< prev index next >

test/jdk/java/foreign/TestSegmentOffset.java

Print this page
@@ -21,17 +21,17 @@
   * questions.
   */
  
  /*
   * @test
-  * @enablePreview
   * @run testng TestSegmentOffset
   */
  
  import java.lang.foreign.Arena;
  import java.lang.foreign.MemorySegment;
  
+ import org.testng.SkipException;
  import org.testng.annotations.DataProvider;
  import org.testng.annotations.Test;
  
  import java.util.ArrayList;
  import java.util.List;

@@ -42,31 +42,25 @@
  
  public class TestSegmentOffset {
  
      @Test(dataProvider = "slices")
      public void testOffset(SegmentSlice s1, SegmentSlice s2) {
+         if (s1.kind != s2.kind) {
+             throw new SkipException("Slices of different segment kinds");
+         }
          if (s1.contains(s2)) {
              // check that a segment and its overlapping segment point to same elements
-             long offset = s1.segment.segmentOffset(s2.segment);
+             long offset = s1.offset(s2);
              for (int i = 0; i < s2.size(); i++) {
                  out.format("testOffset s1:%s, s2:%s, offset:%d, i:%s\n", s1, s2, offset, i);
                  byte expected = s2.segment.get(JAVA_BYTE, i);
                  byte found = s1.segment.get(JAVA_BYTE, i + offset);
                  assertEquals(found, expected);
              }
-         } else if (s1.kind != s2.kind) {
-             // check that offset from s1 to s2 fails
-             try {
-                 long offset = s1.segment.segmentOffset(s2.segment);
-                 out.format("testOffset s1:%s, s2:%s, offset:%d\n", s1, s2, offset);
-                 fail("offset unexpectedly passed!");
-             } catch (UnsupportedOperationException ex) {
-                 assertTrue(ex.getMessage().contains("Cannot compute offset from native to heap (or vice versa)."));
-             }
          } else if (!s2.contains(s1)) {
              // disjoint segments - check that offset is out of bounds
-             long offset = s1.segment.segmentOffset(s2.segment);
+             long offset = s1.offset(s2);
              for (int i = 0; i < s2.size(); i++) {
                  out.format("testOffset s1:%s, s2:%s, offset:%d, i:%s\n", s1, s2, offset, i);
                  s2.segment.get(JAVA_BYTE, i);
                  try {
                      s1.segment.get(JAVA_BYTE, i + offset);

@@ -114,10 +108,14 @@
          }
  
          int size() {
              return last - first + 1;
          }
+ 
+         long offset(SegmentSlice that) {
+             return that.segment.address() - segment.address();
+         }
      }
  
      @DataProvider(name = "slices")
      static Object[][] slices() {
          int[] sizes = { 16, 8, 4, 2, 1 };
< prev index next >