< prev index next >

test/jdk/java/foreign/TestMemoryAlignment.java

Print this page
*** 21,11 ***
   * questions.
   */
  
  /*
   * @test
-  * @enablePreview
   * @run testng TestMemoryAlignment
   */
  
  import java.lang.foreign.*;
  import java.lang.foreign.MemoryLayout.PathElement;
--- 21,10 ---

*** 46,12 ***
          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);
              assertEquals(val, -42);
          }
      }
  
      @Test(dataProvider = "alignments")
--- 45,12 ---
          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, 0L, -42);
!             int val = (int)vh.get(segment, 0L);
              assertEquals(val, -42);
          }
      }
  
      @Test(dataProvider = "alignments")

*** 63,11 ***
          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);
              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
          }
      }
--- 62,11 ---
          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), 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
          }
      }

*** 91,11 ***
              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);
                  }
              }
          } catch (IllegalArgumentException ex) {
              assertTrue(align > 4); //if align > 4, access is always unaligned (for some elements)
          }
--- 90,11 ---
              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, 0L, i, -42);
                  }
              }
          } catch (IllegalArgumentException ex) {
              assertTrue(align > 4); //if align > 4, access is always unaligned (for some elements)
          }

*** 114,16 ***
          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);
          }
      }
  
      @DataProvider(name = "alignments")
      public Object[][] createAlignments() {
--- 113,16 ---
          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, 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 >