22// SPDX-License-Identifier: MIT
33
44use std:: collections:: BTreeMap ;
5- use std:: collections:: HashSet ;
65use std:: time:: Duration ;
76
87use bytes:: Bytes ;
98use criterion:: Criterion ;
109use criterion:: criterion_group;
1110use criterion:: criterion_main;
12- use octez_riscv_durable_storage:: merkle_layer:: KEY_MAX_SIZE ;
1311use octez_riscv_durable_storage:: merkle_layer:: Key ;
1412use octez_riscv_durable_storage:: merkle_layer:: tree:: Avl ;
13+ use octez_riscv_durable_storage:: random:: generate_keys;
14+ use octez_riscv_durable_storage:: random:: generate_random_bytes_in_range;
1515use rand:: prelude:: * ;
1616
1717const KEY_COUNT : usize = 10_000_000 ;
@@ -24,31 +24,7 @@ pub enum Operation {
2424 Delete ( Key ) ,
2525}
2626
27- fn generate_byte_vector ( rng : & mut impl Rng , length : usize ) -> Vec < u8 > {
28- let mut ret = vec ! [ 0u8 ; length] ;
29- rng. fill ( ret. as_mut_slice ( ) ) ;
30- ret
31- }
32-
33- fn generate_keys ( rng : & mut impl Rng , length : usize ) -> Vec < Key > {
34- let mut tmp: HashSet < Key > = HashSet :: new ( ) ;
35- while tmp. len ( ) < length {
36- let key_length = rng. random_range ( 1 ..KEY_MAX_SIZE ) ;
37- tmp. insert (
38- Key :: new ( generate_byte_vector ( rng, key_length) . as_slice ( ) )
39- . expect ( "The key should be created" ) ,
40- ) ;
41- }
42- tmp. into_iter ( ) . collect ( )
43- }
44-
45- fn get_random_data ( rng : & mut impl Rng ) -> Bytes {
46- let length: usize = rng. random_range ( 1 ..20 ) ;
47- let bytes = generate_byte_vector ( rng, length) ;
48- Bytes :: from ( bytes)
49- }
50-
51- fn get_operations_batch ( rng : & mut impl Rng , keys : & [ Key ] , batch_size : usize ) -> Vec < Operation > {
27+ fn get_operations_batch ( mut rng : & mut impl Rng , keys : & [ Key ] , batch_size : usize ) -> Vec < Operation > {
5228 ( 0 ..batch_size)
5329 . map ( |_| {
5430 let key: Key = keys
@@ -57,7 +33,7 @@ fn get_operations_batch(rng: &mut impl Rng, keys: &[Key], batch_size: usize) ->
5733 . clone ( ) ;
5834 match rng. random_range ( 0 ..3 ) {
5935 0 => Operation :: Get ( key) ,
60- 1 => Operation :: Upsert ( key, get_random_data ( rng) ) ,
36+ 1 => Operation :: Upsert ( key, generate_random_bytes_in_range ( & mut rng, 1 .. 20 ) . into ( ) ) ,
6137 _ => Operation :: Delete ( key) ,
6238 }
6339 } )
@@ -75,7 +51,7 @@ fn bench_avl_tree_operations(c: &mut Criterion) {
7551 // Setting up the tree
7652 let mut tree = Avl :: default ( ) ;
7753 for key in & keys[ ..keys. len ( ) / 2 ] {
78- tree. set ( key, get_random_data ( & mut rng) ) ;
54+ tree. set ( key, generate_random_bytes_in_range ( & mut rng, 1 .. 20 ) . into ( ) ) ;
7955 }
8056
8157 c. bench_function ( "Bench AVL tree with operations" , |b| {
@@ -111,7 +87,10 @@ fn reference(c: &mut Criterion) {
11187
11288 let mut tree = BTreeMap :: < Key , Bytes > :: new ( ) ;
11389 for key in & keys[ ..keys. len ( ) / 2 ] {
114- tree. insert ( key. clone ( ) , get_random_data ( & mut rng) ) ;
90+ tree. insert (
91+ key. clone ( ) ,
92+ generate_random_bytes_in_range ( & mut rng, 1 ..20 ) . into ( ) ,
93+ ) ;
11594 }
11695
11796 c. bench_function ( "BTreeMap reference" , |b| {
0 commit comments