我有一个包含一些基准测试和测试的文件,想针对稳定版、测试版和夜间版进行测试。然而,要么我不使用基准测试,要么稳定/测试版抱怨。使用 stable/beta 时有没有办法隐藏所有基准部分?
作为示例,以下代码来自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
我能够隐藏#![feature(test)]
with #![cfg_attr(feature = "bench", feature(test))]
。我可以做一些与其余基准部分类似的事情吗?什么是功能标志的好资源?
在我的项目中,我将基准测试放在一个单独的模块中,就像我对测试所做的那样。然后我创建一个 Cargo 功能来启用它们。在本摘录中,我使用了功能名称unstable
,但您可以使用任何您想要的东西:
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
})
});
}
}
线路#[cfg(all(feature = "unstable", test))]
表示仅在设置了该功能并且我们无论如何都在测试模式下编译时才编译以下项目。同样地,#![cfg_attr(feature = "unstable", feature(test))]
仅启用test
功能标志时unstable
功能已启用。
这是一个例子在野外.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)