Support for generic benchmark groups
nvzqz opened this issue · comments
Generic types
and consts
options should be providable through #[divan::bench_group]
:
#[divan::bench_group(types = [Vec<i32>, HashSet<i32>, BTreeSet<i32>, LinkedList<i32>])]
mod group {
#[divan::bench]
fn bench1<T>() {}
#[divan::bench]
fn bench2<T>() {}
}
This would be equivalent to:
#[divan::bench_group]
mod group {
#[divan::bench(types = [Vec<i32>, HashSet<i32>, BTreeSet<i32>, LinkedList<i32>])]
fn bench1<T>() {}
#[divan::bench(types = [Vec<i32>, HashSet<i32>, BTreeSet<i32>, LinkedList<i32>])]
fn bench2<T>() {}
}
This can be achieved by having #[divan::bench_group]
rewrite each #[divan::bench]
to include the appropriate types
or consts
option. If a benchmark already has its own types
or consts
option, we can skip it. To automatically make types visible within the group without importing from the super
scope, we could create our own type aliases in the parent to then be used via super::
on rewrite.