use libutils::array::Array;
use core::hint::black_box;
use criterion::{
criterion_group,
criterion_main,
Criterion,
Throughput
};
const ITERATIONS: u64 = 2u64.pow(14);
fn bench(criterion: &mut Criterion) -> () {
let mut group = criterion.benchmark_group("array");
group.throughput(Throughput::Elements(ITERATIONS));
group.bench_function("push", |bencher| bencher.iter(push));
group.bench_function("pushpop", |bencher| bencher.iter(pushpop));
group.bench_function("insertremove", |bencher| bencher.iter(insertremove));
group.bench_function("extend", |bencher| bencher.iter(extend));
group.finish();
}
fn push() -> () {
let mut array = Array::<u64, {ITERATIONS as usize}>::new();
for index in 0..ITERATIONS {black_box(array.push(black_box(index)))}
}
fn pushpop() -> () {
let mut array = Array::<u64, 1>::new();
for index in 0..ITERATIONS {
black_box(array.push(black_box(index)));
let removed = black_box(array.pop());
black_box(removed);
}
}
fn insertremove() -> () {
let mut array = Array::<u64, 4>::from([0, 0, 0]);
for index in 0..ITERATIONS {
black_box(array.insert(black_box(0), black_box(index)));
let value = black_box(array.remove(black_box(1)));
black_box(value);
}
}
fn extend() -> () {
let mut array = Array::<u64, {ITERATIONS as usize * 2}>::new();
for index in 0..ITERATIONS {black_box(array.extend(black_box([index, index])))}
}
criterion_group!(benches, bench);
criterion_main!(benches);