use criterion::Bencher;
pub fn write_seq<P, S>(b: &mut Bencher, batch: u64, mut put_one: P, mut sync: S)
where
P: FnMut(u64),
S: FnMut(),
{
let mut counter = 0u64;
b.iter(|| {
for _ in 0..batch {
put_one(counter);
counter += 1;
}
sync();
});
}
pub fn write_rand<P, S>(b: &mut Bencher, keys: &[u64], mut put_one: P, mut sync: S)
where
P: FnMut(u64),
S: FnMut(),
{
b.iter(|| {
for &k in keys {
put_one(k);
}
sync();
});
}
pub fn op_batch<F>(b: &mut Bencher, batch: u64, mut op: F)
where
F: FnMut(),
{
b.iter(|| {
for _ in 0..batch {
op();
}
});
}
pub fn read_seq<R>(b: &mut Bencher, batch: u64, mut read: R)
where
R: FnMut(u64),
{
let mut offset = 0u64;
b.iter(|| {
for j in 0..batch {
read(offset + j);
}
offset += batch;
});
}
pub fn mix_batch<R, W>(b: &mut Bencher, reads: u64, writes: u64, mut read: R, mut write: W)
where
R: FnMut(),
W: FnMut(u64),
{
let mut write_seq = 0u64;
b.iter(|| {
for _ in 0..reads {
read();
}
for _ in 0..writes {
write(write_seq);
write_seq += 1;
}
});
}