@@ -567,11 +567,7 @@ pub fn exact_filter_match() {
567567 assert_eq ! ( exact. len( ) , 2 ) ;
568568}
569569
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 > {
575571 let names = vec ! [
576572 "sha1::test" . to_string( ) ,
577573 "isize::test_to_str" . to_string( ) ,
@@ -585,26 +581,32 @@ pub fn sort_tests() {
585581 "test::run_include_ignored_option" . to_string( ) ,
586582 "test::sort_tests" . to_string( ) ,
587583 ] ;
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 ( ) ;
608610 let filtered = filter_tests ( & opts, tests) ;
609611
610612 let expected = vec ! [
@@ -626,6 +628,71 @@ pub fn sort_tests() {
626628 }
627629}
628630
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+
629696#[ test]
630697pub fn test_metricmap_compare ( ) {
631698 let mut m1 = MetricMap :: new ( ) ;
0 commit comments