1 个不稳定版本
0.1.0 | 2023年11月28日 |
---|
#252 在 性能分析
24KB
508 行
Chairmark
一个 Rust 的基准测试库。
快速开始
use chairmark::{chair, agg_and_cmp};
// custom function for sorting data
fn bubblesort(data: &mut Vec<u32>) {
/* your fancy sorting algorithm */
}
fn main() {
const RUNS: usize = 1_000;
let prepare = |_| (0u32..1_000).collect();
let bubblesort = chair_prepare(RUNS, prepare, |mut data| bubblesort(&mut data));
let std = chair_prepare(RUNS, prepare, |mut data| data.sort());
let compare = agg_and_cmp![std, bubblesort];
println!("{}", compare);
}
TODOs
- 在 README 中添加更多示例
lib.rs
:
基准测试的crate
不幸的是,没有对正确的 cargo bench
的稳定支持。因此,我创建了此crate
想法是有一个函数来基准测试另一个给定的函数。这将执行指定次数以获得更可靠的数据。在基准测试(chairmark)运行期间,将收集数据,可以进行汇总等。
然后可以轻松、直观地显示这些数据。还有一个比较不同 chairmarks 的附加功能。这可以用来比较自定义实现和标准库中的实现或不同的实现。
示例
不使用宏的示例
use chairmark::{chair, Time, Comparison};
// checks if number is power of two
fn is_power(arg: u32) -> bool {
arg.to_ne_bytes().into_iter().sum::<u8>() == 1
}
fn main() {
const NUMBER: u32 = 69;
// benchmark std function
let std = chair(1_000, || NUMBER.is_power_of_two()).aggregate::<Time>();
// benchmark custom function
let custom = chair(1_000, || is_power(NUMBER)).aggregate::<Time>();
// compare
let compare = Comparison::from([("std", std), ("custom", custom)]);
// display as a table
println!("{}", compare);
}
使用所有宏的示例
use chairmark::*;
// checks if number is power of two
fn is_power(arg: u32) -> bool {
arg.to_ne_bytes().into_iter().sum::<u8>() == 1
}
fn main() {
const NUMBER: u32 = 69;
// benchmark std function
let std = chair(1_000, || NUMBER.is_power_of_two());
// benchmark custom function
let custom = chair(1_000, || is_power(NUMBER));
// compare
let compare = agg_and_cmp![std, custom];
// display as table
println!("{}", compare);
}
使用准备好的数据的示例
use chairmark::*;
// custom sort function
fn bubblesort(data: &mut Vec<u32>) {
/* your great bubblesort implementation */
}
fn main() {
let prepare = |idx| (0..idx).map(|x| x as u32 / 3).collect::<Vec<_>>();
// benchmark std functions
let std_stable = chair_prepare(1_000, prepare, |mut data| data.sort());
let std_unstable = chair_prepare(1_000, prepare, |mut data| data.sort_unstable());
// benchmark custom function
let custom = chair_prepare(1_000, prepare, |mut data| bubblesort(&mut data));
// aggregate and compare
let compare = agg_and_cmp![std_stable, std_unstable, custom];
println!("{}", compare);
}