如果不是每晚使用,如何忽略基准? [英] How to ignore benchmarks when not using nightly?

查看:21
本文介绍了如果不是每晚使用,如何忽略基准?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个文件与一些基准和测试,并希望测试稳定,测试版和夜间。然而,我要么不使用基准测试,要么抱怨稳定/测试版。有没有办法在使用稳定/测试版时隐藏所有基准部件?

以下代码来自book

#![feature(test)]

extern crate test;

pub fn add_two(a: i32) -> i32 {
    a + 2
}

#[cfg(test)]
mod tests {
    use super::*;
    use test::Bencher;

    #[test]
    fn it_works() {
        assert_eq!(4, add_two(2));
    }

    #[bench]
    fn bench_add_two(b: &mut Bencher) {
        b.iter(|| add_two(2));
    }
}

我正在使用Rustup,并希望相同的文件可以与所有版本一起使用,调用如下代码:

rustup run nightly cargo bench --bin bench --features "bench"
rustup run nightly cargo test --bin bench --features "bench"
rustup run beta cargo test --bin bench
rustup run stable cargo test --bin bench

我能够用#![cfg_attr(feature = "bench", feature(test))]隐藏#![feature(test)]。我可以做一些类似于其他基准部件的事情吗?什么是功能标志的好资源?

推荐答案

在我的项目中,我将基准放在单独的模块中,就像我对测试所做的那样。然后,我创建了一个支持它们的货运功能。在这段摘录中,我使用了特性名称unstable,但您可以使用您喜欢的任何名称:

货运单

# ...

[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
            })
        });
    }
}

#[cfg(all(feature = "unstable", test))]行表示,如果设置了该功能,则只编译以下项,而我们无论如何都是在测试模式下编译。同样,#![cfg_attr(feature = "unstable", feature(test))]仅在启用unstable功能时启用test功能标志。

这里有一个in the wild示例。

这篇关于如果不是每晚使用,如何忽略基准?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆