1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#[macro_export]
macro_rules! codspeed_uri {
    ( $name:ident ) => {
        format!("{}::{}", file!(), stringify!($name))
    };
    ( $function:path ) => {
        format!("{}::{}", file!(), stringify!($function))
    };
}

#[macro_export]
macro_rules! codspeed_bench {
    ( $name:ident, $bench_payload:expr) => {
        pub fn $name(codspeed: &mut $crate::codspeed::CodSpeed) {
            let uri = codspeed::codspeed_uri!($name);
            codspeed.start_benchmark(uri.as_str());
            $crate::codspeed::black_box($bench_payload());
            codspeed.end_benchmark();
        }
    };
}

#[macro_export]
macro_rules! codspeed_main {
    ( $( $target:path ),+ $(,)* ) => {
        fn main() {
            $crate::codspeed::display_native_harness();
            let mut codspeed = $crate::codspeed::CodSpeed::new();
            $(
                $target(&mut codspeed);
            )+

        }
    }
}