@@ -1414,7 +1414,7 @@ fn extract_if_empty() {
14141414 let mut vec: Vec < i32 > = vec ! [ ] ;
14151415
14161416 {
1417- let mut iter = vec. extract_if ( |_| true ) ;
1417+ let mut iter = vec. extract_if ( .. , |_| true ) ;
14181418 assert_eq ! ( iter. size_hint( ) , ( 0 , Some ( 0 ) ) ) ;
14191419 assert_eq ! ( iter. next( ) , None ) ;
14201420 assert_eq ! ( iter. size_hint( ) , ( 0 , Some ( 0 ) ) ) ;
@@ -1431,7 +1431,7 @@ fn extract_if_zst() {
14311431 let initial_len = vec. len ( ) ;
14321432 let mut count = 0 ;
14331433 {
1434- let mut iter = vec. extract_if ( |_| true ) ;
1434+ let mut iter = vec. extract_if ( .. , |_| true ) ;
14351435 assert_eq ! ( iter. size_hint( ) , ( 0 , Some ( initial_len) ) ) ;
14361436 while let Some ( _) = iter. next ( ) {
14371437 count += 1 ;
@@ -1454,7 +1454,7 @@ fn extract_if_false() {
14541454 let initial_len = vec. len ( ) ;
14551455 let mut count = 0 ;
14561456 {
1457- let mut iter = vec. extract_if ( |_| false ) ;
1457+ let mut iter = vec. extract_if ( .. , |_| false ) ;
14581458 assert_eq ! ( iter. size_hint( ) , ( 0 , Some ( initial_len) ) ) ;
14591459 for _ in iter. by_ref ( ) {
14601460 count += 1 ;
@@ -1476,7 +1476,7 @@ fn extract_if_true() {
14761476 let initial_len = vec. len ( ) ;
14771477 let mut count = 0 ;
14781478 {
1479- let mut iter = vec. extract_if ( |_| true ) ;
1479+ let mut iter = vec. extract_if ( .. , |_| true ) ;
14801480 assert_eq ! ( iter. size_hint( ) , ( 0 , Some ( initial_len) ) ) ;
14811481 while let Some ( _) = iter. next ( ) {
14821482 count += 1 ;
@@ -1492,6 +1492,31 @@ fn extract_if_true() {
14921492 assert_eq ! ( vec, vec![ ] ) ;
14931493}
14941494
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+
14951520#[ test]
14961521fn extract_if_complex ( ) {
14971522 {
@@ -1501,7 +1526,7 @@ fn extract_if_complex() {
15011526 39 ,
15021527 ] ;
15031528
1504- let removed = vec. extract_if ( |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1529+ let removed = vec. extract_if ( .. , |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
15051530 assert_eq ! ( removed. len( ) , 10 ) ;
15061531 assert_eq ! ( removed, vec![ 2 , 4 , 6 , 18 , 20 , 22 , 24 , 26 , 34 , 36 ] ) ;
15071532
@@ -1515,7 +1540,7 @@ fn extract_if_complex() {
15151540 2 , 4 , 6 , 7 , 9 , 11 , 13 , 15 , 17 , 18 , 20 , 22 , 24 , 26 , 27 , 29 , 31 , 33 , 34 , 35 , 36 , 37 , 39 ,
15161541 ] ;
15171542
1518- let removed = vec. extract_if ( |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1543+ let removed = vec. extract_if ( .. , |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
15191544 assert_eq ! ( removed. len( ) , 10 ) ;
15201545 assert_eq ! ( removed, vec![ 2 , 4 , 6 , 18 , 20 , 22 , 24 , 26 , 34 , 36 ] ) ;
15211546
@@ -1528,7 +1553,7 @@ fn extract_if_complex() {
15281553 let mut vec =
15291554 vec ! [ 2 , 4 , 6 , 7 , 9 , 11 , 13 , 15 , 17 , 18 , 20 , 22 , 24 , 26 , 27 , 29 , 31 , 33 , 34 , 35 , 36 ] ;
15301555
1531- let removed = vec. extract_if ( |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1556+ let removed = vec. extract_if ( .. , |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
15321557 assert_eq ! ( removed. len( ) , 10 ) ;
15331558 assert_eq ! ( removed, vec![ 2 , 4 , 6 , 18 , 20 , 22 , 24 , 26 , 34 , 36 ] ) ;
15341559
@@ -1540,7 +1565,7 @@ fn extract_if_complex() {
15401565 // [xxxxxxxxxx+++++++++++]
15411566 let mut vec = vec ! [ 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 , 1 , 3 , 5 , 7 , 9 , 11 , 13 , 15 , 17 , 19 ] ;
15421567
1543- let removed = vec. extract_if ( |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1568+ let removed = vec. extract_if ( .. , |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
15441569 assert_eq ! ( removed. len( ) , 10 ) ;
15451570 assert_eq ! ( removed, vec![ 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 ] ) ;
15461571
@@ -1552,7 +1577,7 @@ fn extract_if_complex() {
15521577 // [+++++++++++xxxxxxxxxx]
15531578 let mut vec = vec ! [ 1 , 3 , 5 , 7 , 9 , 11 , 13 , 15 , 17 , 19 , 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 ] ;
15541579
1555- let removed = vec. extract_if ( |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
1580+ let removed = vec. extract_if ( .. , |x| * x % 2 == 0 ) . collect :: < Vec < _ > > ( ) ;
15561581 assert_eq ! ( removed. len( ) , 10 ) ;
15571582 assert_eq ! ( removed, vec![ 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 ] ) ;
15581583
@@ -1600,7 +1625,7 @@ fn extract_if_consumed_panic() {
16001625 }
16011626 c. index < 6
16021627 } ;
1603- let drain = data. extract_if ( filter) ;
1628+ let drain = data. extract_if ( .. , filter) ;
16041629
16051630 // NOTE: The ExtractIf is explicitly consumed
16061631 drain. for_each ( drop) ;
@@ -1653,7 +1678,7 @@ fn extract_if_unconsumed_panic() {
16531678 }
16541679 c. index < 6
16551680 } ;
1656- let _drain = data. extract_if ( filter) ;
1681+ let _drain = data. extract_if ( .. , filter) ;
16571682
16581683 // NOTE: The ExtractIf is dropped without being consumed
16591684 } ) ;
@@ -1669,7 +1694,7 @@ fn extract_if_unconsumed_panic() {
16691694#[ test]
16701695fn extract_if_unconsumed ( ) {
16711696 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 ) ;
16731698 drop ( drain) ;
16741699 assert_eq ! ( vec, [ 1 , 2 , 3 , 4 ] ) ;
16751700}
0 commit comments