1 个不稳定版本
0.1.0 | 2023年5月5日 |
---|
#301 in 性能分析
13KB
162 行
快速且轻松地对代码进行基准测试,具备对I/O生成的完全控制以及内置的多线程。
快速入门
要使用Benchmarker,你的输入数据必须在一个实现了 Bench
的结构体中。这允许完全控制每个测试的输入是如何生成的(例如使用rand)。
use rand::prelude::*;
use benchmark_suite::*;
struct Sorter {
table:Vec<u32>
}
impl Bench for Sorter {
fn generate() -> Self {
let mut rng = rand::thread_rng();
let mut table:Vec<u32> = (1..100).collect();
table.shuffle(&mut rng);
Sorter {table}
}
fn test(&mut self) {
let mut swapped = true;
while swapped {
swapped = false;
for i in 0..self.table.len()-1 {
let a = self.table[i];
let b = self.table[i+1];
if a > b {
swapped = true;
self.table[i] = b;
self.table[i+1] = a;
}
}
}
}
}
现在,你可以使用 quickbench!
宏创建基准测试器,并使用 start()
运行测试。启动另一个测试后将继续添加到时间列表中,使它们更加详细。
//note that the runcount is the amount of times threads are created, the total number of tests ran is threads * runcount
//struct, threads, runcount
let mut bencher = quickbench!(Sorter, 8, 100);
bencher.start();
println!(
"{:?} / {}",
bencher.average(),
bencher.max_threads * bencher.max_runcount,
)
依赖关系
~2–9MB
~75K SLoC