#[doc(hidden)]
pub mod __private {
pub use super::{
bench::{BenchArgs, BenchOptions},
entry::{
BenchEntry, BenchEntryRunner, EntryConst, EntryList, EntryLocation, EntryMeta,
EntryType, GenericBenchEntry, GroupEntry, BENCH_ENTRIES, GROUP_ENTRIES,
},
};
pub use divan::__private::{shrink_array, Arg, ToStringHelper};
}
mod bench;
mod entry;
mod uri;
mod util;
use std::{cell::RefCell, rc::Rc};
pub use bench::*;
use codspeed::codspeed::CodSpeed;
use entry::AnyBenchEntry;
pub fn main() {
let group_entries = &entry::GROUP_ENTRIES;
let generic_bench_entries = group_entries.iter().flat_map(|group| {
group
.generic_benches_iter()
.map(AnyBenchEntry::GenericBench)
});
let bench_entries = entry::BENCH_ENTRIES
.iter()
.map(AnyBenchEntry::Bench)
.chain(generic_bench_entries);
let codspeed = Rc::new(RefCell::new(CodSpeed::new()));
for entry in bench_entries {
let runner = entry.bench_runner();
let meta = entry.meta();
if let Some(options) = &meta.bench_options {
if let Some(true) = options.ignore {
let uri = uri::generate(&entry, entry.display_name());
println!("Skipped: {uri}");
continue;
}
}
match runner {
entry::BenchEntryRunner::Plain(bench_fn) => {
let uri = uri::generate(&entry, entry.display_name());
bench_fn(bench::Bencher::new(&codspeed, uri));
}
entry::BenchEntryRunner::Args(bench_runner) => {
let bench_runner = bench_runner();
for (arg_index, arg_name) in bench_runner.arg_names().iter().enumerate() {
let uri = uri::generate(&entry, arg_name);
let bencher = bench::Bencher::new(&codspeed, uri);
bench_runner.bench(bencher, arg_index);
}
}
}
}
}