< prev index next >

test/jdk/java/foreign/TestByteBuffer.java

Print this page

412         }
413         ByteBuffer byteBuffer = leaked.asByteBuffer(); // ok
414         byteBuffer.get(); // should throw
415     }
416 
417     @Test(expectedExceptions = { UnsupportedOperationException.class,
418                                  IllegalArgumentException.class })
419     public void testTooBigForByteBuffer() {
420         try (MemorySegment segment = MemorySegment.allocateNative((long)Integer.MAX_VALUE + 10L)) {
421             segment.asByteBuffer();
422         }
423     }
424 
425     @Test(dataProvider="resizeOps")
426     public void testCopyHeapToNative(Consumer<MemoryAddress> checker, Consumer<MemoryAddress> initializer, SequenceLayout seq) {
427         checkByteArrayAlignment(seq.elementLayout());
428         int bytes = (int)seq.byteSize();
429         try (MemorySegment nativeArray = MemorySegment.allocateNative(bytes);
430              MemorySegment heapArray = MemorySegment.ofArray(new byte[bytes])) {
431             initializer.accept(heapArray.baseAddress());
432             MemoryAddress.copy(heapArray.baseAddress(), nativeArray.baseAddress(), bytes);
433             checker.accept(nativeArray.baseAddress());
434         }
435     }
436 
437     @Test(dataProvider="resizeOps")
438     public void testCopyNativeToHeap(Consumer<MemoryAddress> checker, Consumer<MemoryAddress> initializer, SequenceLayout seq) {
439         checkByteArrayAlignment(seq.elementLayout());
440         int bytes = (int)seq.byteSize();
441         try (MemorySegment nativeArray = MemorySegment.allocateNative(seq);
442              MemorySegment heapArray = MemorySegment.ofArray(new byte[bytes])) {
443             initializer.accept(nativeArray.baseAddress());
444             MemoryAddress.copy(nativeArray.baseAddress(), heapArray.baseAddress(), bytes);
445             checker.accept(heapArray.baseAddress());
446         }
447     }
448 
449     @Test(dataProvider="bufferSources")
450     public void testBufferToSegment(ByteBuffer bb, Predicate<MemorySegment> segmentChecker) {
451         MemorySegment segment = MemorySegment.ofByteBuffer(bb);
452         assertEquals(segment.hasAccessModes(MemorySegment.WRITE), !bb.isReadOnly());
453         assertTrue(segmentChecker.test(segment));
454         assertTrue(segmentChecker.test(segment.asSlice(0, segment.byteSize())));
455         assertTrue(segmentChecker.test(segment.withAccessModes(MemorySegment.READ)));
456         assertEquals(bb.capacity(), segment.byteSize());
457         //another round trip
458         segment = MemorySegment.ofByteBuffer(segment.asByteBuffer());
459         assertEquals(segment.hasAccessModes(MemorySegment.WRITE), !bb.isReadOnly());
460         assertTrue(segmentChecker.test(segment));
461         assertTrue(segmentChecker.test(segment.asSlice(0, segment.byteSize())));
462         assertTrue(segmentChecker.test(segment.withAccessModes(MemorySegment.READ)));
463         assertEquals(bb.capacity(), segment.byteSize());
464     }

412         }
413         ByteBuffer byteBuffer = leaked.asByteBuffer(); // ok
414         byteBuffer.get(); // should throw
415     }
416 
417     @Test(expectedExceptions = { UnsupportedOperationException.class,
418                                  IllegalArgumentException.class })
419     public void testTooBigForByteBuffer() {
420         try (MemorySegment segment = MemorySegment.allocateNative((long)Integer.MAX_VALUE + 10L)) {
421             segment.asByteBuffer();
422         }
423     }
424 
425     @Test(dataProvider="resizeOps")
426     public void testCopyHeapToNative(Consumer<MemoryAddress> checker, Consumer<MemoryAddress> initializer, SequenceLayout seq) {
427         checkByteArrayAlignment(seq.elementLayout());
428         int bytes = (int)seq.byteSize();
429         try (MemorySegment nativeArray = MemorySegment.allocateNative(bytes);
430              MemorySegment heapArray = MemorySegment.ofArray(new byte[bytes])) {
431             initializer.accept(heapArray.baseAddress());
432             nativeArray.copyFrom(heapArray);
433             checker.accept(nativeArray.baseAddress());
434         }
435     }
436 
437     @Test(dataProvider="resizeOps")
438     public void testCopyNativeToHeap(Consumer<MemoryAddress> checker, Consumer<MemoryAddress> initializer, SequenceLayout seq) {
439         checkByteArrayAlignment(seq.elementLayout());
440         int bytes = (int)seq.byteSize();
441         try (MemorySegment nativeArray = MemorySegment.allocateNative(seq);
442              MemorySegment heapArray = MemorySegment.ofArray(new byte[bytes])) {
443             initializer.accept(nativeArray.baseAddress());
444             heapArray.copyFrom(nativeArray);
445             checker.accept(heapArray.baseAddress());
446         }
447     }
448 
449     @Test(dataProvider="bufferSources")
450     public void testBufferToSegment(ByteBuffer bb, Predicate<MemorySegment> segmentChecker) {
451         MemorySegment segment = MemorySegment.ofByteBuffer(bb);
452         assertEquals(segment.hasAccessModes(MemorySegment.WRITE), !bb.isReadOnly());
453         assertTrue(segmentChecker.test(segment));
454         assertTrue(segmentChecker.test(segment.asSlice(0, segment.byteSize())));
455         assertTrue(segmentChecker.test(segment.withAccessModes(MemorySegment.READ)));
456         assertEquals(bb.capacity(), segment.byteSize());
457         //another round trip
458         segment = MemorySegment.ofByteBuffer(segment.asByteBuffer());
459         assertEquals(segment.hasAccessModes(MemorySegment.WRITE), !bb.isReadOnly());
460         assertTrue(segmentChecker.test(segment));
461         assertTrue(segmentChecker.test(segment.asSlice(0, segment.byteSize())));
462         assertTrue(segmentChecker.test(segment.withAccessModes(MemorySegment.READ)));
463         assertEquals(bb.capacity(), segment.byteSize());
464     }
< prev index next >