@@ -4,14 +4,19 @@ extern crate pdatastructs;
44
55use std:: collections:: HashSet ;
66
7- use criterion:: { Bencher , Criterion , Fun , ParameterizedBenchmark } ;
7+ use criterion:: { Bencher , BenchmarkId , Criterion } ;
88use pdatastructs:: filters:: bloomfilter:: BloomFilter ;
99use pdatastructs:: filters:: cuckoofilter:: CuckooFilter ;
1010use pdatastructs:: filters:: quotientfilter:: QuotientFilter ;
1111use pdatastructs:: filters:: Filter ;
1212use pdatastructs:: rand:: SeedableRng ;
1313use rand_chacha:: ChaChaRng ;
1414
15+ const ID_BLOOMFILTER : & str = "bloomfilter" ;
16+ const ID_CUCKOOFILTER : & str = "cuckoofilter" ;
17+ const ID_HASHSET : & str = "hashset" ;
18+ const ID_QUOTIENTFILTER : & str = "quotientfilter" ;
19+
1520fn setup_bloomfilter ( ) -> BloomFilter < u64 > {
1621 let false_positive_rate = 0.02 ; // = 2%
1722 let expected_elements = 10_000 ;
@@ -71,49 +76,60 @@ where
7176}
7277
7378fn benchmarks_setup ( c : & mut Criterion ) {
74- let functions = vec ! [
75- Fun :: new( "bloomfilter" , |b, _| run_setup( setup_bloomfilter, b) ) ,
76- Fun :: new( "cuckoofilter" , |b, _| run_setup( setup_cuckoofilter, b) ) ,
77- Fun :: new( "hashset" , |b, _| run_setup( setup_hashset, b) ) ,
78- Fun :: new( "quotientfilter" , |b, _| run_setup( setup_quotientfilter, b) ) ,
79- ] ;
80- c. bench_functions ( "setup" , functions, ( ) ) ;
79+ let mut g = c. benchmark_group ( "setup" ) ;
80+
81+ g. bench_function ( ID_BLOOMFILTER , |b| run_setup ( setup_bloomfilter, b) ) ;
82+ g. bench_function ( ID_CUCKOOFILTER , |b| run_setup ( setup_cuckoofilter, b) ) ;
83+ g. bench_function ( ID_HASHSET , |b| run_setup ( setup_hashset, b) ) ;
84+ g. bench_function ( ID_QUOTIENTFILTER , |b| run_setup ( setup_quotientfilter, b) ) ;
85+
86+ g. finish ( ) ;
8187}
8288
8389fn benchmarks_insert_many ( c : & mut Criterion ) {
84- let parameters = vec ! [ 4_000 , 8_000 , 12_000 , 16_000 , 20_000 ] ;
85- let benchmark = ParameterizedBenchmark :: new (
86- "bloomfilter" ,
87- |b, n| run_insert_many ( setup_bloomfilter, b, * n) ,
88- parameters,
89- )
90- . with_function ( "cuckoofilter" , |b, n| {
91- run_insert_many ( setup_cuckoofilter, b, * n)
92- } )
93- . with_function ( "hashset" , |b, n| run_insert_many ( setup_hashset, b, * n) )
94- . with_function ( "quotientfilter" , |b, n| {
95- run_insert_many ( setup_quotientfilter, b, * n)
96- } )
97- . sample_size ( 20 ) ;
98- c. bench ( "insert_many" , benchmark) ;
90+ let mut g = c. benchmark_group ( "insert_many" ) ;
91+
92+ g. sample_size ( 20 ) ;
93+
94+ for n in [ 4_000 , 8_000 , 12_000 , 16_000 , 20_000 ] {
95+ g. bench_with_input ( BenchmarkId :: new ( ID_BLOOMFILTER , & n) , & n, |b, n| {
96+ run_insert_many ( setup_bloomfilter, b, * n)
97+ } ) ;
98+ g. bench_with_input ( BenchmarkId :: new ( ID_CUCKOOFILTER , & n) , & n, |b, n| {
99+ run_insert_many ( setup_cuckoofilter, b, * n)
100+ } ) ;
101+ g. bench_with_input ( BenchmarkId :: new ( ID_HASHSET , & n) , & n, |b, n| {
102+ run_insert_many ( setup_hashset, b, * n)
103+ } ) ;
104+ g. bench_with_input ( BenchmarkId :: new ( ID_QUOTIENTFILTER , & n) , & n, |b, n| {
105+ run_insert_many ( setup_quotientfilter, b, * n)
106+ } ) ;
107+ }
108+
109+ g. finish ( ) ;
99110}
100111
101112fn benchmarks_query_single ( c : & mut Criterion ) {
102- let parameters = vec ! [ 4_000 , 8_000 ] ;
103- let benchmark = ParameterizedBenchmark :: new (
104- "bloomfilter" ,
105- |b, n| run_query_single ( setup_bloomfilter, b, * n) ,
106- parameters,
107- )
108- . with_function ( "cuckoofilter" , |b, n| {
109- run_query_single ( setup_cuckoofilter, b, * n)
110- } )
111- . with_function ( "hashset" , |b, n| run_query_single ( setup_hashset, b, * n) )
112- . with_function ( "quotientfilter" , |b, n| {
113- run_query_single ( setup_quotientfilter, b, * n)
114- } )
115- . sample_size ( 20 ) ;
116- c. bench ( "query_single" , benchmark) ;
113+ let mut g = c. benchmark_group ( "query_single" ) ;
114+
115+ g. sample_size ( 20 ) ;
116+
117+ for n in [ 4_000 , 8_000 ] {
118+ g. bench_with_input ( BenchmarkId :: new ( ID_BLOOMFILTER , & n) , & n, |b, n| {
119+ run_query_single ( setup_bloomfilter, b, * n)
120+ } ) ;
121+ g. bench_with_input ( BenchmarkId :: new ( ID_CUCKOOFILTER , & n) , & n, |b, n| {
122+ run_query_single ( setup_cuckoofilter, b, * n)
123+ } ) ;
124+ g. bench_with_input ( BenchmarkId :: new ( ID_HASHSET , & n) , & n, |b, n| {
125+ run_query_single ( setup_hashset, b, * n)
126+ } ) ;
127+ g. bench_with_input ( BenchmarkId :: new ( ID_QUOTIENTFILTER , & n) , & n, |b, n| {
128+ run_query_single ( setup_quotientfilter, b, * n)
129+ } ) ;
130+ }
131+
132+ g. finish ( ) ;
117133}
118134
119135criterion_group ! (
0 commit comments