返回介绍

13.2 基准测试

发布于 2024-10-13 11:25:32 字数 1802 浏览 0 评论 0 收藏 0

官方基准测试库还是实验状态,使用前要先安装。

$ 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)

Cargo Targets , Benchmark Tests
Criterion.rs

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文