@@ -567,11 +567,7 @@ pub fn exact_filter_match() {
567
567
assert_eq ! ( exact. len( ) , 2 ) ;
568
568
}
569
569
570
- #[ test]
571
- pub fn sort_tests ( ) {
572
- let mut opts = TestOpts :: new ( ) ;
573
- opts. run_tests = true ;
574
-
570
+ fn sample_tests ( ) -> Vec < TestDescAndFn > {
575
571
let names = vec ! [
576
572
"sha1::test" . to_string( ) ,
577
573
"isize::test_to_str" . to_string( ) ,
@@ -585,26 +581,32 @@ pub fn sort_tests() {
585
581
"test::run_include_ignored_option" . to_string( ) ,
586
582
"test::sort_tests" . to_string( ) ,
587
583
] ;
588
- let tests = {
589
- fn testfn ( ) { }
590
- let mut tests = Vec :: new ( ) ;
591
- for name in & names {
592
- let test = TestDescAndFn {
593
- desc : TestDesc {
594
- name : DynTestName ( ( * name) . clone ( ) ) ,
595
- ignore : false ,
596
- should_panic : ShouldPanic :: No ,
597
- allow_fail : false ,
598
- compile_fail : false ,
599
- no_run : false ,
600
- test_type : TestType :: Unknown ,
601
- } ,
602
- testfn : DynTestFn ( Box :: new ( testfn) ) ,
603
- } ;
604
- tests. push ( test) ;
605
- }
606
- tests
607
- } ;
584
+ fn testfn ( ) { }
585
+ let mut tests = Vec :: new ( ) ;
586
+ for name in & names {
587
+ let test = TestDescAndFn {
588
+ desc : TestDesc {
589
+ name : DynTestName ( ( * name) . clone ( ) ) ,
590
+ ignore : false ,
591
+ should_panic : ShouldPanic :: No ,
592
+ allow_fail : false ,
593
+ compile_fail : false ,
594
+ no_run : false ,
595
+ test_type : TestType :: Unknown ,
596
+ } ,
597
+ testfn : DynTestFn ( Box :: new ( testfn) ) ,
598
+ } ;
599
+ tests. push ( test) ;
600
+ }
601
+ tests
602
+ }
603
+
604
+ #[ test]
605
+ pub fn sort_tests ( ) {
606
+ let mut opts = TestOpts :: new ( ) ;
607
+ opts. run_tests = true ;
608
+
609
+ let tests = sample_tests ( ) ;
608
610
let filtered = filter_tests ( & opts, tests) ;
609
611
610
612
let expected = vec ! [
@@ -626,6 +628,71 @@ pub fn sort_tests() {
626
628
}
627
629
}
628
630
631
+ #[ test]
632
+ pub fn shuffle_tests ( ) {
633
+ let mut opts = TestOpts :: new ( ) ;
634
+ opts. shuffle = true ;
635
+
636
+ let shuffle_seed = get_shuffle_seed ( & opts) . unwrap ( ) ;
637
+
638
+ let left =
639
+ sample_tests ( ) . into_iter ( ) . enumerate ( ) . map ( |( i, e) | ( TestId ( i) , e) ) . collect :: < Vec < _ > > ( ) ;
640
+ let mut right =
641
+ sample_tests ( ) . into_iter ( ) . enumerate ( ) . map ( |( i, e) | ( TestId ( i) , e) ) . collect :: < Vec < _ > > ( ) ;
642
+
643
+ assert ! ( left. iter( ) . zip( & right) . all( |( a, b) | a. 1 . desc. name == b. 1 . desc. name) ) ;
644
+
645
+ helpers:: shuffle:: shuffle_tests ( shuffle_seed, right. as_mut_slice ( ) ) ;
646
+
647
+ assert ! ( left. iter( ) . zip( right) . any( |( a, b) | a. 1 . desc. name != b. 1 . desc. name) ) ;
648
+ }
649
+
650
+ #[ test]
651
+ pub fn shuffle_tests_with_seed ( ) {
652
+ let mut opts = TestOpts :: new ( ) ;
653
+ opts. shuffle = true ;
654
+
655
+ let shuffle_seed = get_shuffle_seed ( & opts) . unwrap ( ) ;
656
+
657
+ let mut left =
658
+ sample_tests ( ) . into_iter ( ) . enumerate ( ) . map ( |( i, e) | ( TestId ( i) , e) ) . collect :: < Vec < _ > > ( ) ;
659
+ let mut right =
660
+ sample_tests ( ) . into_iter ( ) . enumerate ( ) . map ( |( i, e) | ( TestId ( i) , e) ) . collect :: < Vec < _ > > ( ) ;
661
+
662
+ helpers:: shuffle:: shuffle_tests ( shuffle_seed, left. as_mut_slice ( ) ) ;
663
+ helpers:: shuffle:: shuffle_tests ( shuffle_seed, right. as_mut_slice ( ) ) ;
664
+
665
+ assert ! ( left. iter( ) . zip( right) . all( |( a, b) | a. 1 . desc. name == b. 1 . desc. name) ) ;
666
+ }
667
+
668
+ #[ test]
669
+ pub fn order_depends_on_more_than_seed ( ) {
670
+ let mut opts = TestOpts :: new ( ) ;
671
+ opts. shuffle = true ;
672
+
673
+ let shuffle_seed = get_shuffle_seed ( & opts) . unwrap ( ) ;
674
+
675
+ let mut left_tests = sample_tests ( ) ;
676
+ let mut right_tests = sample_tests ( ) ;
677
+
678
+ left_tests. pop ( ) ;
679
+ right_tests. remove ( 0 ) ;
680
+
681
+ let mut left =
682
+ left_tests. into_iter ( ) . enumerate ( ) . map ( |( i, e) | ( TestId ( i) , e) ) . collect :: < Vec < _ > > ( ) ;
683
+ let mut right =
684
+ right_tests. into_iter ( ) . enumerate ( ) . map ( |( i, e) | ( TestId ( i) , e) ) . collect :: < Vec < _ > > ( ) ;
685
+
686
+ assert_eq ! ( left. len( ) , right. len( ) ) ;
687
+
688
+ assert ! ( left. iter( ) . zip( & right) . all( |( a, b) | a. 0 == b. 0 ) ) ;
689
+
690
+ helpers:: shuffle:: shuffle_tests ( shuffle_seed, left. as_mut_slice ( ) ) ;
691
+ helpers:: shuffle:: shuffle_tests ( shuffle_seed, right. as_mut_slice ( ) ) ;
692
+
693
+ assert ! ( left. iter( ) . zip( right) . any( |( a, b) | a. 0 != b. 0 ) ) ;
694
+ }
695
+
629
696
#[ test]
630
697
pub fn test_metricmap_compare ( ) {
631
698
let mut m1 = MetricMap :: new ( ) ;
0 commit comments