3
3
use std:: fs:: File ;
4
4
use std:: io;
5
5
use std:: io:: prelude:: Write ;
6
+ use std:: time:: Instant ;
6
7
7
8
use super :: {
8
9
bench:: fmt_bench_samples,
@@ -14,7 +15,7 @@ use super::{
14
15
options:: { Options , OutputFormat } ,
15
16
run_tests,
16
17
test_result:: TestResult ,
17
- time:: TestExecTime ,
18
+ time:: { TestExecTime , TestSuiteExecTime } ,
18
19
types:: { NamePadding , TestDesc , TestDescAndFn } ,
19
20
} ;
20
21
@@ -49,6 +50,7 @@ pub struct ConsoleTestState {
49
50
pub allowed_fail : usize ,
50
51
pub filtered_out : usize ,
51
52
pub measured : usize ,
53
+ pub exec_time : Option < TestSuiteExecTime > ,
52
54
pub metrics : MetricMap ,
53
55
pub failures : Vec < ( TestDesc , Vec < u8 > ) > ,
54
56
pub not_failures : Vec < ( TestDesc , Vec < u8 > ) > ,
@@ -72,6 +74,7 @@ impl ConsoleTestState {
72
74
allowed_fail : 0 ,
73
75
filtered_out : 0 ,
74
76
measured : 0 ,
77
+ exec_time : None ,
75
78
metrics : MetricMap :: new ( ) ,
76
79
failures : Vec :: new ( ) ,
77
80
not_failures : Vec :: new ( ) ,
@@ -277,7 +280,14 @@ pub fn run_tests_console(opts: &TestOpts, tests: Vec<TestDescAndFn>) -> io::Resu
277
280
} ;
278
281
let mut st = ConsoleTestState :: new ( opts) ?;
279
282
283
+ // Prevent the usage of `Instant` in some cases:
284
+ // - It's currently not supported for wasm targets.
285
+ // - We disable it for miri because it's not available when isolation is enabled.
286
+ let is_instant_supported = !cfg ! ( target_arch = "wasm32" ) && !cfg ! ( miri) ;
287
+
288
+ let start_time = is_instant_supported. then ( Instant :: now) ;
280
289
run_tests ( opts, tests, |x| on_test_event ( & x, & mut st, & mut * out) ) ?;
290
+ st. exec_time = start_time. map ( |t| TestSuiteExecTime ( t. elapsed ( ) ) ) ;
281
291
282
292
assert ! ( st. current_test_count( ) == st. total) ;
283
293
0 commit comments