|
1 | 1 | use criterion::{black_box, criterion_group, criterion_main, BatchSize, BenchmarkId, Criterion};
|
2 |
| -use rand::Rng; |
| 2 | +use rand::prelude::*; |
3 | 3 |
|
4 | 4 | pub fn new_pre_sorted(c: &mut Criterion) {
|
5 | 5 | let mut group = c.benchmark_group("new_pre_sorted");
|
@@ -32,32 +32,50 @@ pub fn rank_select(c: &mut Criterion) {
|
32 | 32 | assert_eq!(integers_u64.len(), 2000);
|
33 | 33 |
|
34 | 34 | group.bench_function(BenchmarkId::new("Elias-Fano", delta), |b| {
|
35 |
| - let list = elias_fano::IntegerList::new_pre_sorted(black_box(&integers_usize)).0; |
36 | 35 | b.iter_batched(
|
37 |
| - || list.clone(), |
38 |
| - |list| { |
| 36 | + || { |
| 37 | + let (index, element) = |
| 38 | + integers_usize.iter().enumerate().choose(&mut thread_rng()).unwrap(); |
| 39 | + ( |
| 40 | + elias_fano::IntegerList::new_pre_sorted(black_box(&integers_usize)).0, |
| 41 | + index, |
| 42 | + *element, |
| 43 | + ) |
| 44 | + }, |
| 45 | + |(list, index, element)| { |
39 | 46 | let list = list.enable_rank();
|
40 |
| - list.rank(black_box(10)); |
41 |
| - list.select(black_box(10)); |
| 47 | + list.rank(element); |
| 48 | + list.select(index); |
42 | 49 | },
|
43 | 50 | BatchSize::PerIteration,
|
44 | 51 | );
|
45 | 52 | });
|
46 | 53 |
|
47 | 54 | group.bench_function(BenchmarkId::new("Roaring Bitmaps", delta), |b| {
|
48 |
| - let list = reth_primitives::IntegerList::new_pre_sorted(black_box(&integers_u64)); |
49 |
| - b.iter(|| { |
50 |
| - list.rank(black_box(10)); |
51 |
| - list.select(black_box(10)); |
52 |
| - }); |
| 55 | + b.iter_batched( |
| 56 | + || { |
| 57 | + let (index, element) = |
| 58 | + integers_u64.iter().enumerate().choose(&mut thread_rng()).unwrap(); |
| 59 | + ( |
| 60 | + reth_primitives::IntegerList::new_pre_sorted(black_box(&integers_u64)), |
| 61 | + index as u64, |
| 62 | + *element, |
| 63 | + ) |
| 64 | + }, |
| 65 | + |(list, index, element)| { |
| 66 | + list.rank(element); |
| 67 | + list.select(index); |
| 68 | + }, |
| 69 | + BatchSize::PerIteration, |
| 70 | + ); |
53 | 71 | });
|
54 | 72 | }
|
55 | 73 | }
|
56 | 74 |
|
57 | 75 | fn generate_integers(n: usize, delta: usize) -> Vec<usize> {
|
58 | 76 | (0..n).fold(Vec::new(), |mut vec, _| {
|
59 | 77 | vec.push(vec.last().map_or(0, |last| {
|
60 |
| - last + rand::thread_rng().gen_range(delta - delta / 2..=delta + delta / 2) |
| 78 | + last + thread_rng().gen_range(delta - delta / 2..=delta + delta / 2) |
61 | 79 | }));
|
62 | 80 | vec
|
63 | 81 | })
|
|
0 commit comments