< prev index next > test/jdk/java/util/Arrays/ArraysEqCmpTest.java
Print this page
/*
* @test
* @bug 8033148 8141409
* @summary tests for array equals and compare
* @run junit ArraysEqCmpTest
*/
-
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Array;
import java.util.Arrays;
/*
* @test
* @bug 8033148 8141409
* @summary tests for array equals and compare
+ * @library /test/lib
* @run junit ArraysEqCmpTest
*/
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Objects;
import java.util.function.BiFunction;
import java.util.function.LongFunction;
import java.util.stream.IntStream;
+ import jdk.test.lib.valueclass.AsValueClass;
+
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
// Maximum width in bits
static final int MAX_WIDTH = 512;
static final Map<Class, Integer> typeToWidth;
+ @AsValueClass
+ record Point(int x, int y) implements Comparable<Point> {
+ @Override
+ public int compareTo(Point o) {
+ int r = Integer.compare(this.x, o.x);
+ return (r != 0) ? r : Integer.compare(this.y, o.y);
+ }
+ }
+
static {
typeToWidth = new HashMap<>();
typeToWidth.put(boolean.class, Byte.SIZE);
typeToWidth.put(byte.class, Byte.SIZE);
typeToWidth.put(short.class, Short.SIZE);
else throw new IllegalStateException();
((double[]) a)[i] = pv;
}
}
+
+ static class ValuePoints extends ArrayType<Point[]> {
+ public ValuePoints() {
+ super(Point[].class);
+ }
+
+ @Override
+ void set(Object a, int i, Object v) {
+ if (v == null) {
+ ((Point[]) a)[i] = null;
+ } else if (v instanceof Point) {
+ ((Point[]) a)[i] = (Point) v;
+ } else if (v instanceof Integer) {
+ int val = (Integer) v;
+ ((Point[]) a)[i] = new Point(val, val);
+ } else throw new IllegalStateException();
+ }
+ }
}
static Object[][] arrayTypes;
public static Object[][] arrayTypesProvider() {
new Object[]{new ArrayType.Integers(true)},
new Object[]{new ArrayType.Longs(false)},
new Object[]{new ArrayType.Longs(true)},
new Object[]{new ArrayType.Floats()},
new Object[]{new ArrayType.Doubles()},
+ new Object[]{new ArrayType.ValuePoints()}
};
}
return arrayTypes;
}
LongFunction<Object> bToD = Double::longBitsToDouble;
objectArrayTypes = new Object[][]{
new Object[]{new ArrayType.BoxedIntegers()},
new Object[]{new ArrayType.BoxedIntegersWithReverseComparator()},
+ new Object[]{new ArrayType.ValuePoints()},
};
}
return objectArrayTypes;
}
BiFunction<ArrayType<?>, Object, Object> cloner = ArrayType::copyOf;
// One ref
Integer one = 1;
testArrayType(arrayType,
! (at, s) -> {
! Integer[] a = (Integer[]) at.construct(s);
! for (int x = 0; x < s; x++) {
! a[x] = one;
! }
! return a;
! },
! cloner);
// All ref
testArrayType(arrayType,
! (at, s) -> {
! Integer[] a = (Integer[]) at.construct(s);
! for (int x = 0; x < s; x++) {
! a[x] = Integer.valueOf(s);
! }
! return a;
! },
! cloner);
// Some same ref
testArrayType(arrayType,
! (at, s) -> {
! Integer[] a = (Integer[]) at.construct(s);
! for (int x = 0; x < s; x++) {
! int v = x % 8;
! a[x] = v == 1 ? one : new Integer(v);
! }
! return a;
! },
! cloner);
}
@ParameterizedTest
@MethodSource("signedUnsignedArrayTypes")
public void testSignedUnsignedArray(ArrayType<?> sat, ArrayType<?> uat) {
BiFunction<ArrayType<?>, Object, Object> cloner = ArrayType::copyOf;
// One ref
Integer one = 1;
testArrayType(arrayType,
! (at, s) -> {
! Object a = at.construct(s);
! for (int x = 0; x < s; x++) {
! at.set(a, x, one);
! }
! return a;
! },
! cloner);
// All ref
testArrayType(arrayType,
! (at, s) -> {
! Object a = at.construct(s);
! for (int x = 0; x < s; x++) {
! at.set(a, x, s);
! }
! return a;
! },
! cloner);
// Some same ref
testArrayType(arrayType,
! (at, s) -> {
! Object a = at.construct(s);
! for (int x = 0; x < s; x++) {
! int v = x % 8;
! at.set(a, x, v == 1 ? one : v);
! }
! return a;
! },
! cloner);
}
@ParameterizedTest
@MethodSource("signedUnsignedArrayTypes")
public void testSignedUnsignedArray(ArrayType<?> sat, ArrayType<?> uat) {
< prev index next >