Ignore benchmarks when using stable/beta

前端 未结 3 1531
被撕碎了的回忆
被撕碎了的回忆 2021-02-20 14:06

I have a file with some benchmarks and tests and would like to test against stable, beta and nightly. However, either I don\'t use the benchmark or stable/beta complain. Is ther

3条回答
  •  悲&欢浪女
    2021-02-20 14:45

    In my projects, I place benchmarks in a separate module, just like I do for tests. I then create a Cargo feature that enables them. In this excerpt, I used the feature name unstable, but you can use anything you'd like:

    Cargo.toml

    # ...
    
    [features]
    unstable = []
    
    # ...
    

    src/lib.rs

    #![cfg_attr(feature = "unstable", feature(test))]
    
    #[cfg(test)]
    mod tests {
        #[test]
        fn a_test() {
            assert_eq!(1, 1);
        }
    }
    
    #[cfg(all(feature = "unstable", test))]
    mod bench {
        extern crate test;
        use self::test::Bencher;
    
        #[bench]
        fn a_bench(b: &mut Bencher) {
            let z = b.iter(|| {
                test::black_box(|| {
                    1 + 1
                })
            });
        }
    }
    

    The line #[cfg(all(feature = "unstable", test))] says to only compile the following item if the feature is set and we are compiling in test mode anyway. Likewise, #![cfg_attr(feature = "unstable", feature(test))] only enables the test feature flag when the unstable feature is enabled.

    Here's an example in the wild.

提交回复
热议问题