< prev index next > test/jdk/java/foreign/TestMemoryAlignment.java
Print this page
* questions.
*/
/*
* @test
- * @enablePreview
* @run testng TestMemoryAlignment
*/
import java.lang.foreign.*;
import java.lang.foreign.MemoryLayout.PathElement;
ValueLayout aligned = layout.withByteAlignment(align);
assertEquals(aligned.byteAlignment(), align); //unreasonable alignment here, to make sure access throws
VarHandle vh = aligned.varHandle();
try (Arena arena = Arena.ofConfined()) {
MemorySegment segment = arena.allocate(aligned);;
- vh.set(segment, -42);
- int val = (int)vh.get(segment);
+ vh.set(segment, 0L, -42);
+ int val = (int)vh.get(segment, 0L);
assertEquals(val, -42);
}
}
@Test(dataProvider = "alignments")
try (Arena arena = Arena.ofConfined()) {
MemoryLayout alignedGroup = MemoryLayout.structLayout(MemoryLayout.paddingLayout(1), aligned);
assertEquals(alignedGroup.byteAlignment(), align);
VarHandle vh = aligned.varHandle();
MemorySegment segment = arena.allocate(alignedGroup);;
- vh.set(segment.asSlice(1L), -42);
+ vh.set(segment.asSlice(1L), 0L, -42);
assertEquals(align, 8); //this is the only case where access is aligned
} catch (IllegalArgumentException ex) {
assertNotEquals(align, 8); //if align != 8, access is always unaligned
}
}
SequenceLayout layout = MemoryLayout.sequenceLayout(5, ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN).withByteAlignment(align));
VarHandle vh = layout.varHandle(PathElement.sequenceElement());
try (Arena arena = Arena.ofConfined()) {
MemorySegment segment = arena.allocate(layout);;
for (long i = 0 ; i < 5 ; i++) {
- vh.set(segment, i, -42);
+ vh.set(segment, 0L, i, -42);
}
}
} catch (IllegalArgumentException ex) {
assertTrue(align > 4); //if align > 4, access is always unaligned (for some elements)
}
VarHandle vh_c = g.varHandle(PathElement.groupElement("a"));
VarHandle vh_s = g.varHandle(PathElement.groupElement("b"));
VarHandle vh_i = g.varHandle(PathElement.groupElement("c"));
try (Arena arena = Arena.ofConfined()) {
MemorySegment segment = arena.allocate(g);;
- vh_c.set(segment, Byte.MIN_VALUE);
- assertEquals(vh_c.get(segment), Byte.MIN_VALUE);
- vh_s.set(segment, Short.MIN_VALUE);
- assertEquals(vh_s.get(segment), Short.MIN_VALUE);
- vh_i.set(segment, Integer.MIN_VALUE);
- assertEquals(vh_i.get(segment), Integer.MIN_VALUE);
+ vh_c.set(segment, 0L, Byte.MIN_VALUE);
+ assertEquals(vh_c.get(segment, 0L), Byte.MIN_VALUE);
+ vh_s.set(segment, 0L, Short.MIN_VALUE);
+ assertEquals(vh_s.get(segment, 0L), Short.MIN_VALUE);
+ vh_i.set(segment, 0L, Integer.MIN_VALUE);
+ assertEquals(vh_i.get(segment, 0L), Integer.MIN_VALUE);
}
}
@DataProvider(name = "alignments")
public Object[][] createAlignments() {
< prev index next >