@@ -542,6 +542,7 @@ struct ConsoleTestState<T> {
542542    passed :  usize , 
543543    failed :  usize , 
544544    ignored :  usize , 
545+     filtered_out :  usize , 
545546    measured :  usize , 
546547    metrics :  MetricMap , 
547548    failures :  Vec < ( TestDesc ,  Vec < u8 > ) > , 
@@ -570,6 +571,7 @@ impl<T: Write> ConsoleTestState<T> {
570571            passed :  0 , 
571572            failed :  0 , 
572573            ignored :  0 , 
574+             filtered_out :  0 , 
573575            measured :  0 , 
574576            metrics :  MetricMap :: new ( ) , 
575577            failures :  Vec :: new ( ) , 
@@ -775,11 +777,12 @@ impl<T: Write> ConsoleTestState<T> {
775777        }  else  { 
776778            self . write_pretty ( "FAILED" ,  term:: color:: RED ) ?; 
777779        } 
778-         let  s = format ! ( ". {} passed; {} failed; {} ignored; {} measured\n \n " , 
780+         let  s = format ! ( ". {} passed; {} failed; {} ignored; {} measured; {} filtered out \n \n " , 
779781                        self . passed, 
780782                        self . failed, 
781783                        self . ignored, 
782-                         self . measured) ; 
784+                         self . measured, 
785+                         self . filtered_out) ; 
783786        self . write_plain ( & s) ?; 
784787        return  Ok ( success) ; 
785788    } 
@@ -875,6 +878,7 @@ pub fn run_tests_console(opts: &TestOpts, tests: Vec<TestDescAndFn>) -> io::Resu
875878    fn  callback < T :  Write > ( event :  & TestEvent ,  st :  & mut  ConsoleTestState < T > )  -> io:: Result < ( ) >  { 
876879        match  ( * event) . clone ( )  { 
877880            TeFiltered ( ref  filtered_tests)  => st. write_run_start ( filtered_tests. len ( ) ) , 
881+             TeFilteredOut ( filtered_out)  => Ok ( st. filtered_out  = filtered_out) , 
878882            TeWait ( ref  test,  padding)  => st. write_test_start ( test,  padding) , 
879883            TeTimeout ( ref  test)  => st. write_timeout ( test) , 
880884            TeResult ( test,  result,  stdout)  => { 
@@ -957,6 +961,7 @@ fn should_sort_failures_before_printing_them() {
957961        passed :  0 , 
958962        failed :  0 , 
959963        ignored :  0 , 
964+         filtered_out :  0 , 
960965        measured :  0 , 
961966        max_name_len :  10 , 
962967        metrics :  MetricMap :: new ( ) , 
@@ -1017,6 +1022,7 @@ pub enum TestEvent {
10171022    TeWait ( TestDesc ,  NamePadding ) , 
10181023    TeResult ( TestDesc ,  TestResult ,  Vec < u8 > ) , 
10191024    TeTimeout ( TestDesc ) , 
1025+     TeFilteredOut ( usize ) , 
10201026} 
10211027
10221028pub  type  MonitorMsg  = ( TestDesc ,  TestResult ,  Vec < u8 > ) ; 
@@ -1028,11 +1034,16 @@ pub fn run_tests<F>(opts: &TestOpts, tests: Vec<TestDescAndFn>, mut callback: F)
10281034    use  std:: collections:: HashMap ; 
10291035    use  std:: sync:: mpsc:: RecvTimeoutError ; 
10301036
1037+     let  tests_len = tests. len ( ) ; 
1038+ 
10311039    let  mut  filtered_tests = filter_tests ( opts,  tests) ; 
10321040    if  !opts. bench_benchmarks  { 
10331041        filtered_tests = convert_benchmarks_to_tests ( filtered_tests) ; 
10341042    } 
10351043
1044+     let  filtered_out = tests_len - filtered_tests. len ( ) ; 
1045+     callback ( TeFilteredOut ( filtered_out) ) ?; 
1046+ 
10361047    let  filtered_descs = filtered_tests. iter ( ) 
10371048                                       . map ( |t| t. desc . clone ( ) ) 
10381049                                       . collect ( ) ; 
0 commit comments