stf_runner/
lib.rs

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}