Files
bft-crdt-experiment/crates/bft-json-crdt/benches/speed.rs

68 lines
2.0 KiB
Rust
Raw Normal View History

2024-05-30 14:16:02 +01:00
use bft_json_crdt::{
json_crdt::JsonValue, keypair::make_author, list_crdt::ListCrdt, op::Op, op::ROOT_ID,
2024-05-30 14:16:02 +01:00
};
2024-06-18 11:52:48 +01:00
use criterion::{criterion_group, criterion_main, Criterion};
use rand::seq::SliceRandom;
2024-06-18 12:25:07 +01:00
fn bench_insert_100_root(c: &mut Criterion) {
c.bench_function("bench insert 100 root", |b| {
2024-06-18 11:52:48 +01:00
b.iter(|| {
let mut list = ListCrdt::<i64>::new(make_author(1), vec![]);
2024-06-18 12:25:07 +01:00
for i in 0..100 {
2024-06-18 11:52:48 +01:00
list.insert(ROOT_ID, i);
}
})
});
}
2024-06-18 12:25:07 +01:00
fn bench_insert_100_linear(c: &mut Criterion) {
c.bench_function("bench insert 100 linear", |b| {
2024-06-18 11:52:48 +01:00
b.iter(|| {
let mut list = ListCrdt::<i64>::new(make_author(1), vec![]);
let mut prev = ROOT_ID;
2024-06-18 12:25:07 +01:00
for i in 0..100 {
2024-06-18 11:52:48 +01:00
let op = list.insert(prev, i);
prev = op.id;
}
})
});
}
2024-06-18 11:52:48 +01:00
fn bench_insert_many_agents_conflicts(c: &mut Criterion) {
c.bench_function("bench insert many agents conflicts", |b| {
b.iter(|| {
2024-06-18 12:25:07 +01:00
const N: u8 = 10;
2024-06-18 11:52:48 +01:00
let mut rng = rand::thread_rng();
let mut crdts: Vec<ListCrdt<i64>> = Vec::with_capacity(N as usize);
let mut logs: Vec<Op<JsonValue>> = Vec::new();
for i in 0..N {
let list = ListCrdt::new(make_author(i), vec![]);
crdts.push(list);
for _ in 0..5 {
let op = crdts[i as usize].insert(ROOT_ID, i as i32);
logs.push(op);
}
}
2024-06-18 11:52:48 +01:00
logs.shuffle(&mut rng);
for op in logs {
for c in &mut crdts {
if op.author() != c.our_id {
c.apply(op.clone());
}
}
}
2024-06-18 11:52:48 +01:00
assert!(crdts.windows(2).all(|w| w[0].view() == w[1].view()));
})
});
}
2024-06-18 11:52:48 +01:00
criterion_group!(
benches,
2024-06-18 12:25:07 +01:00
bench_insert_100_root,
bench_insert_100_linear,
2024-06-18 11:52:48 +01:00
bench_insert_many_agents_conflicts
);
criterion_main!(benches);