文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
13.2 基准测试
官方基准测试库还是实验状态,使用前要先安装。
$ rustup install nightly
代码和单元测试类似。
// lib.rs #![feature(test)] // 启用!!! extern crate test; mod add;
// add.rs fn add(x: i32, y: i32) -> i32 { x + y } #[cfg(test)] mod tests { use super::*; use test::Bencher; #[test] fn add_test() { assert_eq!(add(1, 2), 3); } #[bench] fn add_bench(b: &mut Bencher) { b.iter(|| add(1, 2)); } }
命令行添加 +nightly
,否则会出错。
$ cargo +nightly bench --lib running 2 tests test add::tests::add_test ... ignored test add::tests::add_bench ... bench: 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 1 ignored; ... finished in 3.49s $ cargo +nightly test --lib running 2 tests test add::tests::add_bench ... ok test add::tests::add_test ... ok test result: ok. 2 passed; 0 failed; 0 ignored; ... finished in 0.00s
集成测试
使用 src 同级的 benches 目录,每个文件都独立编译。
$ tree . ├── benches │ └── add_test.rs ├── Cargo.lock ├── Cargo.toml └── src ├── add.rs ├── lib.rs └── main.rs
// src/lib.rs pub mod add;
// benches/add_test.rs #![feature(test)] // 每个文件都要添加。 extern crate test; // 因为都独立编译。 use demo::add::*; use test::Bencher; #[bench] fn add_bench(b: &mut Bencher) { b.iter(|| add(1, 2)); }
$ cargo +nightly bench # 当前是 binary,不用 --lib 参数。 test add_bench ... bench: 2 ns/iter (+/- 0)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论