Skip to content

Commit 7bb1fe8

Browse files
committed
feat: comparison with btree
1 parent 8d4d1b9 commit 7bb1fe8

File tree

2 files changed

+126
-0
lines changed

2 files changed

+126
-0
lines changed

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ debug = false
2424
name = "compare_rbtree"
2525
harness = false
2626

27+
[[bench]]
28+
name = "compare_btree"
29+
harness = false
30+
2731
[features]
2832
default = []
2933
expanded = []

benches/compare_btree.rs

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
use std::collections::BTreeMap;
2+
use std::hint::black_box;
3+
use criterion::{criterion_group, criterion_main, Criterion, Throughput};
4+
use flat_rbtree::RedBlackTree;
5+
6+
const N: usize = 10_000;
7+
8+
fn bench_insert_flat_rbtree(c: &mut Criterion) {
9+
let mut group = c.benchmark_group("Insert - flat_rbtree");
10+
group.throughput(Throughput::Elements(N as u64));
11+
group.sample_size(20).measurement_time(std::time::Duration::from_secs(10));
12+
group.bench_function("Insert 10_000 - flat_rbtree", |b| {
13+
b.iter(|| {
14+
let mut tree = RedBlackTree::<usize, usize, N>::new();
15+
for i in 0..N {
16+
tree.insert(black_box(i), black_box(i));
17+
}
18+
});
19+
});
20+
group.finish();
21+
}
22+
23+
fn bench_insert_btreemap(c: &mut Criterion) {
24+
let mut group = c.benchmark_group("Insert - BTreeMap");
25+
group.throughput(Throughput::Elements(N as u64));
26+
group.sample_size(20).measurement_time(std::time::Duration::from_secs(10));
27+
group.bench_function("Insert 10_000 - BTreeMap", |b| {
28+
b.iter(|| {
29+
let mut map = BTreeMap::new();
30+
for i in 0..N {
31+
map.insert(black_box(i), black_box(i));
32+
}
33+
});
34+
});
35+
group.finish();
36+
}
37+
38+
fn bench_search_flat_rbtree(c: &mut Criterion) {
39+
let mut tree = RedBlackTree::<usize, usize, N>::new();
40+
for i in 0..N {
41+
tree.insert(i, i);
42+
}
43+
44+
let mut group = c.benchmark_group("Search - flat_rbtree");
45+
group.sample_size(20).measurement_time(std::time::Duration::from_secs(10));
46+
group.bench_function("Search 10_000 - flat_rbtree", |b| {
47+
b.iter(|| {
48+
for i in 0..N {
49+
black_box(tree.search(&i));
50+
}
51+
});
52+
});
53+
group.finish();
54+
}
55+
56+
fn bench_search_btreemap(c: &mut Criterion) {
57+
let mut map = BTreeMap::new();
58+
for i in 0..N {
59+
map.insert(i, i);
60+
}
61+
62+
let mut group = c.benchmark_group("Search - BTreeMap");
63+
group.sample_size(20).measurement_time(std::time::Duration::from_secs(10));
64+
group.bench_function("Search 10_000 - BTreeMap", |b| {
65+
b.iter(|| {
66+
for i in 0..N {
67+
black_box(map.get(&i));
68+
}
69+
});
70+
});
71+
group.finish();
72+
}
73+
74+
fn bench_remove_flat_rbtree(c: &mut Criterion) {
75+
let mut tree = RedBlackTree::<usize, usize, N>::new();
76+
for i in 0..N {
77+
tree.insert(i, i);
78+
}
79+
80+
let mut group = c.benchmark_group("Remove - flat_rbtree");
81+
group.sample_size(20).measurement_time(std::time::Duration::from_secs(10));
82+
group.bench_function("Remove 10_000 - flat_rbtree", |b| {
83+
b.iter(|| {
84+
for i in 0..N {
85+
tree.remove(i);
86+
}
87+
});
88+
});
89+
group.finish();
90+
}
91+
92+
fn bench_remove_btreemap(c: &mut Criterion) {
93+
let mut map = BTreeMap::new();
94+
for i in 0..N {
95+
map.insert(i, i);
96+
}
97+
98+
let mut group = c.benchmark_group("Remove - BTreeMap");
99+
group.sample_size(20).measurement_time(std::time::Duration::from_secs(10));
100+
group.bench_function("Remove 10_000 - BTreeMap", |b| {
101+
b.iter(|| {
102+
for i in 0..N {
103+
map.remove(&i);
104+
}
105+
});
106+
});
107+
group.finish();
108+
}
109+
110+
criterion_group!(
111+
name = benches;
112+
config = Criterion::default();
113+
targets =
114+
bench_insert_flat_rbtree,
115+
bench_insert_btreemap,
116+
bench_remove_flat_rbtree,
117+
bench_remove_btreemap,
118+
bench_search_flat_rbtree,
119+
bench_search_btreemap,
120+
);
121+
criterion_main!(benches);
122+

0 commit comments

Comments
 (0)