@@ -1414,7 +1414,7 @@ fn extract_if_empty() {
1414
1414
let mut vec: Vec < i32 > = vec ! [ ] ;
1415
1415
1416
1416
{
1417
- let mut iter = vec. extract_if ( |_| true ) ;
1417
+ let mut iter = vec. extract_if ( .. , |_| true ) ;
1418
1418
assert_eq ! ( iter. size_hint( ) , ( 0 , Some ( 0 ) ) ) ;
1419
1419
assert_eq ! ( iter. next( ) , None ) ;
1420
1420
assert_eq ! ( iter. size_hint( ) , ( 0 , Some ( 0 ) ) ) ;
@@ -1431,7 +1431,7 @@ fn extract_if_zst() {
1431
1431
let initial_len = vec. len ( ) ;
1432
1432
let mut count = 0 ;
1433
1433
{
1434
- let mut iter = vec. extract_if ( |_| true ) ;
1434
+ let mut iter = vec. extract_if ( .. , |_| true ) ;
1435
1435
assert_eq ! ( iter. size_hint( ) , ( 0 , Some ( initial_len) ) ) ;
1436
1436
while let Some ( _) = iter. next ( ) {
1437
1437
count += 1 ;
@@ -1454,7 +1454,7 @@ fn extract_if_false() {
1454
1454
let initial_len = vec. len ( ) ;
1455
1455
let mut count = 0 ;
1456
1456
{
1457
- let mut iter = vec. extract_if ( |_| false ) ;
1457
+ let mut iter = vec. extract_if ( .. , |_| false ) ;
1458
1458
assert_eq ! ( iter. size_hint( ) , ( 0 , Some ( initial_len) ) ) ;
1459
1459
for _ in iter. by_ref ( ) {
1460
1460
count += 1 ;
@@ -1476,7 +1476,7 @@ fn extract_if_true() {
1476
1476
let initial_len = vec. len ( ) ;
1477
1477
let mut count = 0 ;
1478
1478
{
1479
- let mut iter = vec. extract_if ( |_| true ) ;
1479
+ let mut iter = vec. extract_if ( .. , |_| true ) ;
1480
1480
assert_eq ! ( iter. size_hint( ) , ( 0 , Some ( initial_len) ) ) ;
1481
1481
while let Some ( _) = iter. next ( ) {
1482
1482
count += 1 ;
@@ -1492,6 +1492,31 @@ fn extract_if_true() {
1492
1492
assert_eq ! ( vec, vec![ ] ) ;
1493
1493
}
1494
1494
1495
+ #[ test]
1496
+ fn extract_if_ranges ( ) {
1497
+ let mut vec = vec ! [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ;
1498
+
1499
+ let mut count = 0 ;
1500
+ let it = vec. extract_if ( 1 ..=3 , |_| {
1501
+ count += 1 ;
1502
+ true
1503
+ } ) ;
1504
+ assert_eq ! ( it. collect:: <Vec <_>>( ) , vec![ 1 , 2 , 3 ] ) ;
1505
+ assert_eq ! ( vec, vec![ 0 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ;
1506
+ assert_eq ! ( count, 3 ) ;
1507
+
1508
+ let it = vec. extract_if ( 1 ..=3 , |_| false ) ;
1509
+ assert_eq ! ( it. collect:: <Vec <_>>( ) , vec![ ] ) ;
1510
+ assert_eq ! ( vec, vec![ 0 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ;
1511
+ }
1512
+
1513
+ #[ test]
1514
+ #[ should_panic]
1515
+ fn extraxt_if_out_of_bounds ( ) {
1516
+ let mut vec = vec ! [ 0 , 1 ] ;
1517
+ let _ = vec. extract_if ( 5 .., |_| true ) . for_each ( drop) ;
1518
+ }
1519
+
1495
1520
#[ test]
1496
1521
fn extract_if_complex ( ) {
1497
1522
{
@@ -1501,7 +1526,7 @@ fn extract_if_complex() {
1501
1526
39 ,
1502
1527
] ;
1503
1528
1504
- let removed = vec. extract_if ( |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1529
+ let removed = vec. extract_if ( .. , |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1505
1530
assert_eq ! ( removed. len( ) , 10 ) ;
1506
1531
assert_eq ! ( removed, vec![ 2 , 4 , 6 , 18 , 20 , 22 , 24 , 26 , 34 , 36 ] ) ;
1507
1532
@@ -1515,7 +1540,7 @@ fn extract_if_complex() {
1515
1540
2 , 4 , 6 , 7 , 9 , 11 , 13 , 15 , 17 , 18 , 20 , 22 , 24 , 26 , 27 , 29 , 31 , 33 , 34 , 35 , 36 , 37 , 39 ,
1516
1541
] ;
1517
1542
1518
- let removed = vec. extract_if ( |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1543
+ let removed = vec. extract_if ( .. , |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1519
1544
assert_eq ! ( removed. len( ) , 10 ) ;
1520
1545
assert_eq ! ( removed, vec![ 2 , 4 , 6 , 18 , 20 , 22 , 24 , 26 , 34 , 36 ] ) ;
1521
1546
@@ -1528,7 +1553,7 @@ fn extract_if_complex() {
1528
1553
let mut vec =
1529
1554
vec ! [ 2 , 4 , 6 , 7 , 9 , 11 , 13 , 15 , 17 , 18 , 20 , 22 , 24 , 26 , 27 , 29 , 31 , 33 , 34 , 35 , 36 ] ;
1530
1555
1531
- let removed = vec. extract_if ( |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1556
+ let removed = vec. extract_if ( .. , |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1532
1557
assert_eq ! ( removed. len( ) , 10 ) ;
1533
1558
assert_eq ! ( removed, vec![ 2 , 4 , 6 , 18 , 20 , 22 , 24 , 26 , 34 , 36 ] ) ;
1534
1559
@@ -1540,7 +1565,7 @@ fn extract_if_complex() {
1540
1565
// [xxxxxxxxxx+++++++++++]
1541
1566
let mut vec = vec ! [ 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 , 1 , 3 , 5 , 7 , 9 , 11 , 13 , 15 , 17 , 19 ] ;
1542
1567
1543
- let removed = vec. extract_if ( |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1568
+ let removed = vec. extract_if ( .. , |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1544
1569
assert_eq ! ( removed. len( ) , 10 ) ;
1545
1570
assert_eq ! ( removed, vec![ 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 ] ) ;
1546
1571
@@ -1552,7 +1577,7 @@ fn extract_if_complex() {
1552
1577
// [+++++++++++xxxxxxxxxx]
1553
1578
let mut vec = vec ! [ 1 , 3 , 5 , 7 , 9 , 11 , 13 , 15 , 17 , 19 , 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 ] ;
1554
1579
1555
- let removed = vec. extract_if ( |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1580
+ let removed = vec. extract_if ( .. , |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1556
1581
assert_eq ! ( removed. len( ) , 10 ) ;
1557
1582
assert_eq ! ( removed, vec![ 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 ] ) ;
1558
1583
@@ -1600,7 +1625,7 @@ fn extract_if_consumed_panic() {
1600
1625
}
1601
1626
c. index < 6
1602
1627
} ;
1603
- let drain = data. extract_if ( filter) ;
1628
+ let drain = data. extract_if ( .. , filter) ;
1604
1629
1605
1630
// NOTE: The ExtractIf is explicitly consumed
1606
1631
drain. for_each ( drop) ;
@@ -1653,7 +1678,7 @@ fn extract_if_unconsumed_panic() {
1653
1678
}
1654
1679
c. index < 6
1655
1680
} ;
1656
- let _drain = data. extract_if ( filter) ;
1681
+ let _drain = data. extract_if ( .. , filter) ;
1657
1682
1658
1683
// NOTE: The ExtractIf is dropped without being consumed
1659
1684
} ) ;
@@ -1669,7 +1694,7 @@ fn extract_if_unconsumed_panic() {
1669
1694
#[ test]
1670
1695
fn extract_if_unconsumed ( ) {
1671
1696
let mut vec = vec ! [ 1 , 2 , 3 , 4 ] ;
1672
- let drain = vec. extract_if ( |& mut x| x % 2 != 0 ) ;
1697
+ let drain = vec. extract_if ( .. , |& mut x| x % 2 != 0 ) ;
1673
1698
drop ( drain) ;
1674
1699
assert_eq ! ( vec, [ 1 , 2 , 3 , 4 ] ) ;
1675
1700
}
0 commit comments