--- old/test/jdk/java/foreign/TestMemoryCopy.java 2019-12-09 18:35:56.131330295 +0000 +++ new/test/jdk/java/foreign/TestMemoryCopy.java 2019-12-09 18:35:55.671319135 +0000 @@ -28,10 +28,13 @@ */ import jdk.incubator.foreign.MemoryAddress; +import jdk.incubator.foreign.MemoryHandles; +import jdk.incubator.foreign.MemoryLayouts; import jdk.incubator.foreign.MemorySegment; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; +import java.lang.invoke.VarHandle; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -43,15 +46,27 @@ public class TestMemoryCopy { + final static VarHandle BYTE_HANDLE = MemoryLayouts.JAVA_BYTE.varHandle(byte.class); + @Test(dataProvider = "slices") - public void testBadCopy(SegmentSlice s1, SegmentSlice s2) { + public void testCopy(SegmentSlice s1, SegmentSlice s2) { MemoryAddress addr1 = s1.segment.baseAddress(); MemoryAddress addr2 = s2.segment.baseAddress(); int size = Math.min(s1.size(), s2.size()); boolean overlap = SegmentSlice.overlap(s1, s2, size); + //prepare source and target segments + for (int i = 0 ; i < size ; i++) { + BYTE_HANDLE.set(addr1.offset(i), (byte)i); + BYTE_HANDLE.set(addr2.offset(i), (byte)0); + } try { MemoryAddress.copy(addr1, addr2, size); assertFalse(overlap); + //check that copy actually worked + for (int i = 0 ; i < size ; i++) { + assertEquals((byte)i, BYTE_HANDLE.get(addr2.offset(i))); + } + } catch (IllegalArgumentException ex) { assertTrue(overlap); }