如果不是每晚使用,如何忽略基准? [英] How to ignore benchmarks when not using nightly?
本文介绍了如果不是每晚使用,如何忽略基准?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个文件与一些基准和测试,并希望测试稳定,测试版和夜间。然而,我要么不使用基准测试,要么抱怨稳定/测试版。有没有办法在使用稳定/测试版时隐藏所有基准部件?
以下代码来自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屋!
查看全文