< prev index next >

test/jdk/java/foreign/TestMemoryCopy.java

Print this page
rev 57245 : [mq]: 8234049_v4

@@ -26,14 +26,17 @@
  * @test
  * @run testng TestMemoryCopy
  */
 
 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;
 import java.util.function.IntFunction;
 import java.util.stream.Collectors;

@@ -41,19 +44,31 @@
 
 import static org.testng.Assert.*;
 
 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);
         }
     }
 
< prev index next >