< prev index next > test/jdk/java/foreign/TestSpliterator.java
Print this page
* questions.
*/
/*
* @test
- * @enablePreview
* @run testng TestSpliterator
*/
import java.lang.foreign.*;
import static org.testng.Assert.*;
public class TestSpliterator {
- static final VarHandle INT_HANDLE = ValueLayout.JAVA_INT.arrayElementVarHandle();
-
final static int CARRIER_SIZE = 4;
@Test(dataProvider = "splits")
public void testSum(int size, int threshold) {
SequenceLayout layout = MemoryLayout.sequenceLayout(size, ValueLayout.JAVA_INT);
//setup
try (Arena arena = Arena.ofShared()) {
MemorySegment segment = arena.allocate(layout);;
for (int i = 0; i < layout.elementCount(); i++) {
- INT_HANDLE.set(segment, (long) i, i);
+ segment.setAtIndex(ValueLayout.JAVA_INT, i, i);
}
long expected = LongStream.range(0, layout.elementCount()).sum();
//serial
long serial = sum(0, segment);
assertEquals(serial, expected);
//setup
Arena scope = Arena.ofAuto();
MemorySegment segment = scope.allocate(layout);
for (int i = 0; i < layout.elementCount(); i++) {
- INT_HANDLE.set(segment, (long) i, i);
+ segment.setAtIndex(ValueLayout.JAVA_INT, i, i);
}
long expected = LongStream.range(0, layout.elementCount()).sum();
//check that a segment w/o ACQUIRE access mode can still be used from same thread
AtomicLong spliteratorSum = new AtomicLong();
long bigByteAlign = Long.lowestOneBit(segment.address()) << 1;
segment.elements(MemoryLayout.sequenceLayout(2, ValueLayout.JAVA_INT.withByteAlignment(bigByteAlign)));
}
static long sumSingle(long acc, MemorySegment segment) {
- return acc + (int)INT_HANDLE.get(segment, 0L);
+ return acc + segment.getAtIndex(ValueLayout.JAVA_INT, 0);
}
static long sum(long start, MemorySegment segment) {
long sum = start;
int length = (int)segment.byteSize();
for (int i = 0 ; i < length / CARRIER_SIZE ; i++) {
- sum += (int)INT_HANDLE.get(segment, (long)i);
+ sum += segment.getAtIndex(ValueLayout.JAVA_INT, i);
}
return sum;
}
static class SumSegmentCounted extends CountedCompleter<Long> {
< prev index next >