40
41 import static org.testng.Assert.*;
42
43 public class TestMemoryCopy {
44
45 final static VarHandle BYTE_HANDLE = MemoryLayouts.JAVA_BYTE.varHandle(byte.class);
46
47 @Test(dataProvider = "slices")
48 public void testCopy(SegmentSlice s1, SegmentSlice s2) {
49 MemoryAddress addr1 = s1.segment.baseAddress();
50 MemoryAddress addr2 = s2.segment.baseAddress();
51 int size = Math.min(s1.size(), s2.size());
52 //prepare source and target segments
53 for (int i = 0 ; i < size ; i++) {
54 BYTE_HANDLE.set(addr2.addOffset(i), (byte)0);
55 }
56 for (int i = 0 ; i < size ; i++) {
57 BYTE_HANDLE.set(addr1.addOffset(i), (byte) i);
58 }
59 //perform copy
60 MemoryAddress.copy(addr1, addr2, size);
61 //check that copy actually worked
62 for (int i = 0 ; i < size ; i++) {
63 assertEquals((byte)i, BYTE_HANDLE.get(addr2.addOffset(i)));
64 }
65 }
66
67 static class SegmentSlice {
68
69 enum Kind {
70 NATIVE(MemorySegment::allocateNative),
71 ARRAY(i -> MemorySegment.ofArray(new byte[i]));
72
73 final IntFunction<MemorySegment> segmentFactory;
74
75 Kind(IntFunction<MemorySegment> segmentFactory) {
76 this.segmentFactory = segmentFactory;
77 }
78
79 MemorySegment makeSegment(int elems) {
80 return segmentFactory.apply(elems);
|
40
41 import static org.testng.Assert.*;
42
43 public class TestMemoryCopy {
44
45 final static VarHandle BYTE_HANDLE = MemoryLayouts.JAVA_BYTE.varHandle(byte.class);
46
47 @Test(dataProvider = "slices")
48 public void testCopy(SegmentSlice s1, SegmentSlice s2) {
49 MemoryAddress addr1 = s1.segment.baseAddress();
50 MemoryAddress addr2 = s2.segment.baseAddress();
51 int size = Math.min(s1.size(), s2.size());
52 //prepare source and target segments
53 for (int i = 0 ; i < size ; i++) {
54 BYTE_HANDLE.set(addr2.addOffset(i), (byte)0);
55 }
56 for (int i = 0 ; i < size ; i++) {
57 BYTE_HANDLE.set(addr1.addOffset(i), (byte) i);
58 }
59 //perform copy
60 s2.segment.copyFrom(s1.segment.asSlice(0, size));
61 //check that copy actually worked
62 for (int i = 0 ; i < size ; i++) {
63 assertEquals((byte)i, BYTE_HANDLE.get(addr2.addOffset(i)));
64 }
65 }
66
67 static class SegmentSlice {
68
69 enum Kind {
70 NATIVE(MemorySegment::allocateNative),
71 ARRAY(i -> MemorySegment.ofArray(new byte[i]));
72
73 final IntFunction<MemorySegment> segmentFactory;
74
75 Kind(IntFunction<MemorySegment> segmentFactory) {
76 this.segmentFactory = segmentFactory;
77 }
78
79 MemorySegment makeSegment(int elems) {
80 return segmentFactory.apply(elems);
|