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