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 }
|