< 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 >