use std::sync::Arc;
use cachekit::policy::lru::LruCore;
use cachekit::traits::Cache;
use criterion::{BatchSize, Criterion, Throughput, criterion_group, criterion_main};
fn bench_pop_lru(c: &mut Criterion) {
let mut group = c.benchmark_group("lru_specific");
group.throughput(Throughput::Elements(1024));
group.bench_function("pop_lru", |b| {
b.iter_batched(
|| {
let mut cache = LruCore::new(1024);
for i in 0..1024u64 {
cache.insert(i, Arc::new(i));
}
cache
},
|mut cache| {
for _ in 0..1024u64 {
let _ = std::hint::black_box(cache.pop_lru());
}
},
BatchSize::SmallInput,
)
});
group.finish();
}
fn bench_touch(c: &mut Criterion) {
let mut group = c.benchmark_group("lru_specific");
group.throughput(Throughput::Elements(4096));
group.bench_function("touch_hotset", |b| {
b.iter_batched(
|| {
let mut cache = LruCore::new(4096);
for i in 0..4096u64 {
cache.insert(i, Arc::new(i));
}
cache
},
|mut cache| {
for i in 0..4096u64 {
let _ = std::hint::black_box(cache.touch(&std::hint::black_box(i)));
}
},
BatchSize::SmallInput,
)
});
group.finish();
}
criterion_group!(benches, bench_pop_lru, bench_touch);
criterion_main!(benches);