< prev index next >
test/jdk/java/nio/Buffer/EqualsCompareTest.java
Print this page
@@ -84,10 +84,11 @@
final Class<?> bufferType;
final Class<?> elementType;
final MethodHandle eq;
final MethodHandle cmp;
+ final MethodHandle mismtch;
final MethodHandle getter;
final MethodHandle setter;
BufferType(BufferKind k, Class<T> bufferType, Class<?> elementType) {
@@ -97,10 +98,11 @@
var lookup = MethodHandles.lookup();
try {
eq = lookup.findVirtual(bufferType, "equals", MethodType.methodType(boolean.class, Object.class));
cmp = lookup.findVirtual(bufferType, "compareTo", MethodType.methodType(int.class, bufferType));
+ mismtch = lookup.findVirtual(bufferType, "mismatch", MethodType.methodType(int.class, bufferType));
getter = lookup.findVirtual(bufferType, "get", MethodType.methodType(elementType, int.class));
setter = lookup.findVirtual(bufferType, "put", MethodType.methodType(bufferType, int.class, elementType));
}
catch (Exception e) {
@@ -184,10 +186,22 @@
if (!get(a, i).equals(get(b, j)))
return false;
return true;
}
+ int mismatch(T a, T b) {
+ try {
+ return (int) mismtch.invoke(a, b);
+ }
+ catch (RuntimeException | Error e) {
+ throw e;
+ }
+ catch (Throwable t) {
+ throw new Error(t);
+ }
+ }
+
static class Bytes extends BufferType<ByteBuffer, Byte> {
Bytes(BufferKind k) {
super(k, ByteBuffer.class, byte.class);
}
@@ -421,11 +435,10 @@
return true;
}
}
}
-
static Object[][] bufferTypes;
@DataProvider
public static Object[][] bufferTypesProvider() {
if (bufferTypes == null) {
@@ -633,16 +646,25 @@
Assert.assertEquals(bt.equals(as, bs), eq);
Assert.assertEquals(bt.equals(bs, as), eq);
if (eq) {
Assert.assertEquals(bt.compare(as, bs), 0);
Assert.assertEquals(bt.compare(bs, as), 0);
+
+ // If buffers are equal, there shall be no mismatch
+ Assert.assertEquals(bt.mismatch(as, bs), -1);
+ Assert.assertEquals(bt.mismatch(bs, as), -1);
}
else {
int aCb = bt.compare(as, bs);
int bCa = bt.compare(bs, as);
int v = Integer.signum(aCb) * Integer.signum(bCa);
Assert.assertTrue(v == -1);
+
+ int aMs = bt.mismatch(as, bs);
+ int bMs = bt.mismatch(bs, as);
+ Assert.assertNotEquals(aMs, -1);
+ Assert.assertEquals(aMs, bMs);
}
}
}
if (aLength > 0 && !a.isReadOnly()) {
@@ -659,10 +681,15 @@
int cCa = bt.compare(cs, as);
int aCc = bt.compare(as, cs);
int v = Integer.signum(cCa) * Integer.signum(aCc);
Assert.assertTrue(v == -1);
+
+ int cMa = bt.mismatch(cs, as);
+ int aMc = bt.mismatch(as, cs);
+ Assert.assertEquals(cMa, aMc);
+ Assert.assertEquals(cMa, i - aFrom);
}
}
}
}
}
< prev index next >