@@ -1399,3 +1399,83 @@ fn try_reclaim_arc() {
1399
1399
buf. advance ( 2 ) ;
1400
1400
assert_eq ! ( true , buf. try_reclaim( 6 ) ) ;
1401
1401
}
1402
+
1403
+ #[ test]
1404
+ fn split_off_empty_addr ( ) {
1405
+ let mut buf = Bytes :: from ( vec ! [ 0 ; 1024 ] ) ;
1406
+
1407
+ let ptr_start = buf. as_ptr ( ) ;
1408
+ let ptr_end = ptr_start. wrapping_add ( 1024 ) ;
1409
+
1410
+ let empty_end = buf. split_off ( 1024 ) ;
1411
+ assert_eq ! ( empty_end. len( ) , 0 ) ;
1412
+ assert_eq ! ( empty_end. as_ptr( ) , ptr_end) ;
1413
+
1414
+ let _ = buf. split_off ( 0 ) ;
1415
+ assert_eq ! ( buf. len( ) , 0 ) ;
1416
+ assert_eq ! ( buf. as_ptr( ) , ptr_start) ;
1417
+
1418
+ // Is miri happy about the provenance?
1419
+ let _ = & empty_end[ ..] ;
1420
+ let _ = & buf[ ..] ;
1421
+ }
1422
+
1423
+ #[ test]
1424
+ fn split_to_empty_addr ( ) {
1425
+ let mut buf = Bytes :: from ( vec ! [ 0 ; 1024 ] ) ;
1426
+
1427
+ let ptr_start = buf. as_ptr ( ) ;
1428
+ let ptr_end = ptr_start. wrapping_add ( 1024 ) ;
1429
+
1430
+ let empty_start = buf. split_to ( 0 ) ;
1431
+ assert_eq ! ( empty_start. len( ) , 0 ) ;
1432
+ assert_eq ! ( empty_start. as_ptr( ) , ptr_start) ;
1433
+
1434
+ let _ = buf. split_to ( 1024 ) ;
1435
+ assert_eq ! ( buf. len( ) , 0 ) ;
1436
+ assert_eq ! ( buf. as_ptr( ) , ptr_end) ;
1437
+
1438
+ // Is miri happy about the provenance?
1439
+ let _ = & empty_start[ ..] ;
1440
+ let _ = & buf[ ..] ;
1441
+ }
1442
+
1443
+ #[ test]
1444
+ fn split_off_empty_addr_mut ( ) {
1445
+ let mut buf = BytesMut :: from ( [ 0 ; 1024 ] . as_slice ( ) ) ;
1446
+
1447
+ let ptr_start = buf. as_ptr ( ) ;
1448
+ let ptr_end = ptr_start. wrapping_add ( 1024 ) ;
1449
+
1450
+ let empty_end = buf. split_off ( 1024 ) ;
1451
+ assert_eq ! ( empty_end. len( ) , 0 ) ;
1452
+ assert_eq ! ( empty_end. as_ptr( ) , ptr_end) ;
1453
+
1454
+ let _ = buf. split_off ( 0 ) ;
1455
+ assert_eq ! ( buf. len( ) , 0 ) ;
1456
+ assert_eq ! ( buf. as_ptr( ) , ptr_start) ;
1457
+
1458
+ // Is miri happy about the provenance?
1459
+ let _ = & empty_end[ ..] ;
1460
+ let _ = & buf[ ..] ;
1461
+ }
1462
+
1463
+ #[ test]
1464
+ fn split_to_empty_addr_mut ( ) {
1465
+ let mut buf = BytesMut :: from ( [ 0 ; 1024 ] . as_slice ( ) ) ;
1466
+
1467
+ let ptr_start = buf. as_ptr ( ) ;
1468
+ let ptr_end = ptr_start. wrapping_add ( 1024 ) ;
1469
+
1470
+ let empty_start = buf. split_to ( 0 ) ;
1471
+ assert_eq ! ( empty_start. len( ) , 0 ) ;
1472
+ assert_eq ! ( empty_start. as_ptr( ) , ptr_start) ;
1473
+
1474
+ let _ = buf. split_to ( 1024 ) ;
1475
+ assert_eq ! ( buf. len( ) , 0 ) ;
1476
+ assert_eq ! ( buf. as_ptr( ) , ptr_end) ;
1477
+
1478
+ // Is miri happy about the provenance?
1479
+ let _ = & empty_start[ ..] ;
1480
+ let _ = & buf[ ..] ;
1481
+ }
0 commit comments