< prev index next >

test/jdk/java/foreign/TestMismatch.java

Print this page
rev 59809 : 8247696: Incorrect tail computation for large segments in AbstractMemorySegmentImpl::mismatch
Reviewed-by: psandoz, mcimadamore

@@ -115,18 +115,34 @@
              var s2 = MemorySegment.allocateNative((long)Integer.MAX_VALUE + 10L)) {
             assertEquals(s1.mismatch(s1), -1);
             assertEquals(s1.mismatch(s2), -1);
             assertEquals(s2.mismatch(s1), -1);
 
+            testLargeAcrossMaxBoundary(s1, s2);
+
+            testLargeMismatchAcrossMaxBoundary(s1, s2);
+        }
+    }
+
+    private void testLargeAcrossMaxBoundary(MemorySegment s1, MemorySegment s2) {
+        for (long i = s2.byteSize() -1 ; i >= Integer.MAX_VALUE - 10L; i--) {
+            var s3 = s1.asSlice(0, i);
+            var s4 = s2.asSlice(0, i);
+            assertEquals(s3.mismatch(s3), -1);
+            assertEquals(s3.mismatch(s4), -1);
+            assertEquals(s4.mismatch(s3), -1);
+        }
+    }
+
+    private void testLargeMismatchAcrossMaxBoundary(MemorySegment s1, MemorySegment s2) {
             for (long i = s2.byteSize() -1 ; i >= Integer.MAX_VALUE - 10L; i--) {
                 BYTE_HANDLE.set(s2.baseAddress().addOffset(i), (byte) 0xFF);
                 long expectedMismatchOffset = i;
                 assertEquals(s1.mismatch(s2), expectedMismatchOffset);
                 assertEquals(s2.mismatch(s1), expectedMismatchOffset);
             }
         }
-    }
 
     static final Class<IllegalStateException> ISE = IllegalStateException.class;
     static final Class<UnsupportedOperationException> UOE = UnsupportedOperationException.class;
 
     @Test
< prev index next >