From e3e7ecd1b2e10691fbb8c4d77cbc25ac7a2bf0b1 Mon Sep 17 00:00:00 2001 From: Per Minborg Date: Tue, 21 Apr 2026 12:33:24 +0000 Subject: [PATCH] 8378901: Test "java/foreign/TestSegmentOffset.java timed out Reviewed-by: jvernee --- test/jdk/java/foreign/TestSegmentOffset.java | 45 +++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/test/jdk/java/foreign/TestSegmentOffset.java b/test/jdk/java/foreign/TestSegmentOffset.java index cf335e4ff88..963063378a3 100644 --- a/test/jdk/java/foreign/TestSegmentOffset.java +++ b/test/jdk/java/foreign/TestSegmentOffset.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2026, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,30 +23,32 @@ /* * @test - * @run testng TestSegmentOffset + * @run junit 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 org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.function.IntFunction; +import java.util.stream.Stream; + import static java.lang.System.out; import static java.lang.foreign.ValueLayout.JAVA_BYTE; -import static org.testng.Assert.*; +import static org.junit.jupiter.api.Assertions.*; -public class TestSegmentOffset { +final 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"); - } + @ParameterizedTest + @MethodSource("slices") + void testOffset(SegmentSlice s1, SegmentSlice s2) { if (s1.contains(s2)) { // check that a segment and its overlapping segment point to same elements long offset = s1.offset(s2); @@ -54,7 +56,7 @@ public class TestSegmentOffset { 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); + assertEquals(expected, found); } } else if (!s2.contains(s1)) { // disjoint segments - check that offset is out of bounds @@ -72,7 +74,7 @@ public class TestSegmentOffset { } } - static class SegmentSlice { + final static class SegmentSlice { enum Kind { NATIVE(i -> Arena.ofAuto().allocate(i, 1)), @@ -94,7 +96,7 @@ public class TestSegmentOffset { final int last; final MemorySegment segment; - public SegmentSlice(Kind kind, int first, int last, MemorySegment segment) { + SegmentSlice(Kind kind, int first, int last, MemorySegment segment) { this.kind = kind; this.first = first; this.last = last; @@ -116,8 +118,8 @@ public class TestSegmentOffset { } } - @DataProvider(name = "slices") - static Object[][] slices() { + + static Stream slices() { int[] sizes = { 16, 8, 4, 2, 1 }; List slices = new ArrayList<>(); for (SegmentSlice.Kind kind : SegmentSlice.Kind.values()) { @@ -134,12 +136,15 @@ public class TestSegmentOffset { } } } - Object[][] sliceArray = new Object[slices.size() * slices.size()][]; + SegmentSlice[][] sliceArray = new SegmentSlice[slices.size() * slices.size()][]; for (int i = 0 ; i < slices.size() ; i++) { for (int j = 0 ; j < slices.size() ; j++) { - sliceArray[i * slices.size() + j] = new Object[] { slices.get(i), slices.get(j) }; + sliceArray[i * slices.size() + j] = new SegmentSlice[] { slices.get(i), slices.get(j) }; } } - return sliceArray; + return Arrays.stream(sliceArray) + // Only consider segment slices of the same kind + .filter(a -> a[0].kind == a[1].kind) + .map(Arguments::of); } }