mirror of
https://github.com/roc-lang/roc.git
synced 2024-09-22 00:09:33 +03:00
72 lines
1.9 KiB
Rust
72 lines
1.9 KiB
Rust
use std::time::Duration;
|
|
|
|
use cli_utils::bench_utils::{
|
|
bench_cfold, bench_deriv, bench_nqueens, bench_quicksort, bench_rbtree_ck,
|
|
};
|
|
use criterion::{measurement::WallTime, BenchmarkGroup, Criterion, SamplingMode};
|
|
|
|
fn bench_group_wall_time(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("bench-group_wall-time");
|
|
// calculate statistics based on a fixed(flat) x runs
|
|
group.sampling_mode(SamplingMode::Flat);
|
|
|
|
let default_nr_of_runs = 200;
|
|
let nr_of_runs = match std::env::var("BENCH_DRY_RUN") {
|
|
Ok(val) => {
|
|
if val == "1" {
|
|
10 // minimum value allowed by criterion
|
|
} else {
|
|
default_nr_of_runs
|
|
}
|
|
}
|
|
Err(_) => default_nr_of_runs,
|
|
};
|
|
|
|
group.sample_size(nr_of_runs);
|
|
|
|
let bench_funcs: Vec<fn(Option<&mut BenchmarkGroup<WallTime>>)> = vec![
|
|
bench_nqueens, // queens 11
|
|
bench_cfold, // e = mkExpr 17 1
|
|
bench_deriv, // nest deriv 8 f
|
|
bench_rbtree_ck, // ms = makeMap 5 80000
|
|
// bench_rbtree_delete, // m = makeMap 100000
|
|
bench_quicksort, // list size 10000
|
|
];
|
|
|
|
for bench_func in bench_funcs.iter() {
|
|
bench_func(Some(&mut group))
|
|
}
|
|
|
|
group.finish();
|
|
}
|
|
|
|
// use short warm up and measurement time on dry run
|
|
fn make_config() -> Criterion {
|
|
let default_config = Criterion::default();
|
|
|
|
match std::env::var("BENCH_DRY_RUN") {
|
|
Ok(val) => {
|
|
if val == "1" {
|
|
default_config
|
|
.warm_up_time(Duration::new(1, 0))
|
|
.measurement_time(Duration::new(1, 0))
|
|
} else {
|
|
default_config
|
|
}
|
|
}
|
|
Err(_) => default_config,
|
|
}
|
|
}
|
|
|
|
fn all_benches() {
|
|
let mut criterion: Criterion<_> = make_config().configure_from_args();
|
|
|
|
bench_group_wall_time(&mut criterion);
|
|
}
|
|
|
|
fn main() {
|
|
all_benches();
|
|
|
|
Criterion::default().configure_from_args().final_summary();
|
|
}
|