1use std::time::Instant;
2
3const RED: &str = "\u{001b}[31m";
4const GREEN: &str = "\u{001b}[32m";
5const CYAN: &str = "\u{001b}[36m";
6const RESET: &str = "\u{001b}[0m";
7
8pub trait Testable {
9 fn run(&self) -> ();
10}
11
12impl<T> Testable for T
13where
14 T: Fn(),
15{
16 fn run(&self) {
17 print!("{}...\t", core::any::type_name::<T>());
18 self();
19 println!("{}[ok]{}", GREEN, RESET);
20 }
21}
22
23pub fn test_runner(tests: &[&dyn Testable]) {
24 println!("Running {} tests\n", tests.len());
25
26 let start = Instant::now();
27
28 for test in tests {
29 test.run();
30 }
31
32 let duration = start.elapsed();
33
34 println!(
35 "\nTime elapsed in tests is: {}{:?}{}",
36 CYAN, duration, RESET
37 );
38}