@@ -2460,3 +2460,39 @@ fn test_is_sorted() {
2460
2460
assert ! ( ![ "c" , "bb" , "aaa" ] . iter( ) . is_sorted( ) ) ;
2461
2461
assert ! ( [ "c" , "bb" , "aaa" ] . iter( ) . is_sorted_by_key( |s| s. len( ) ) ) ;
2462
2462
}
2463
+
2464
+ #[ test]
2465
+ fn test_partition ( ) {
2466
+ fn check ( xs : & mut [ i32 ] , ref p: impl Fn ( & i32 ) -> bool , expected : usize ) {
2467
+ let i = xs. iter_mut ( ) . partition_in_place ( p) ;
2468
+ assert_eq ! ( expected, i) ;
2469
+ assert ! ( xs[ ..i] . iter( ) . all( p) ) ;
2470
+ assert ! ( !xs[ i..] . iter( ) . any( p) ) ;
2471
+ assert ! ( xs. iter( ) . is_partitioned( p) ) ;
2472
+ if i == 0 || i == xs. len ( ) {
2473
+ assert ! ( xs. iter( ) . rev( ) . is_partitioned( p) ) ;
2474
+ } else {
2475
+ assert ! ( !xs. iter( ) . rev( ) . is_partitioned( p) ) ;
2476
+ }
2477
+ }
2478
+
2479
+ check ( & mut [ ] , |_| true , 0 ) ;
2480
+ check ( & mut [ ] , |_| false , 0 ) ;
2481
+
2482
+ check ( & mut [ 0 ] , |_| true , 1 ) ;
2483
+ check ( & mut [ 0 ] , |_| false , 0 ) ;
2484
+
2485
+ check ( & mut [ -1 , 1 ] , |& x| x > 0 , 1 ) ;
2486
+ check ( & mut [ -1 , 1 ] , |& x| x < 0 , 1 ) ;
2487
+
2488
+ let ref mut xs = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ;
2489
+ check ( xs, |_| true , 10 ) ;
2490
+ check ( xs, |_| false , 0 ) ;
2491
+ check ( xs, |& x| x % 2 == 0 , 5 ) ; // evens
2492
+ check ( xs, |& x| x % 2 == 1 , 5 ) ; // odds
2493
+ check ( xs, |& x| x % 3 == 0 , 4 ) ; // multiple of 3
2494
+ check ( xs, |& x| x % 4 == 0 , 3 ) ; // multiple of 4
2495
+ check ( xs, |& x| x % 5 == 0 , 2 ) ; // multiple of 5
2496
+ check ( xs, |& x| x < 3 , 3 ) ; // small
2497
+ check ( xs, |& x| x > 6 , 3 ) ; // large
2498
+ }
0 commit comments