@@ -103,20 +103,47 @@ fn decompress_alp<T: ALPFloat + NativePType>(bencher: Bencher, args: (usize, f64
103103 . bench_values ( |( v, mut ctx) | decompress_into_array ( v, & mut ctx) ) ;
104104}
105105
106- #[ divan:: bench( types = [ f32 , f64 ] , args = [ 10_000 , 100_000 ] ) ]
107- fn compress_rd < T : ALPRDFloat > ( bencher : Bencher , n : usize ) {
108- let primitive = PrimitiveArray :: new ( buffer ! [ T :: from( 1.23 ) . unwrap( ) ; n] , Validity :: NonNullable ) ;
109- let encoder = RDEncoder :: new ( & [ T :: from ( 1.23 ) . unwrap ( ) ] ) ;
106+ const RD_BENCH_ARGS : & [ ( usize , f64 ) ] = & [
107+ // length, fraction_patch
108+ ( 10_000 , 0.0 ) ,
109+ ( 10_000 , 0.01 ) ,
110+ ( 10_000 , 0.1 ) ,
111+ ( 100_000 , 0.0 ) ,
112+ ( 100_000 , 0.01 ) ,
113+ ( 100_000 , 0.1 ) ,
114+ ] ;
115+
116+ fn make_rd_array < T : ALPRDFloat + NativePType > ( n : usize , fraction_patch : f64 ) -> PrimitiveArray {
117+ let base_val = T :: from ( 1.23 ) . unwrap ( ) ;
118+ let mut rng = StdRng :: seed_from_u64 ( 42 ) ;
119+ let mut values = buffer ! [ base_val; n] . into_mut ( ) ;
120+ if fraction_patch > 0.0 {
121+ let outlier = T :: from ( 1000.0 ) . unwrap ( ) ;
122+ for index in 0 ..values. len ( ) {
123+ if rng. random_bool ( fraction_patch) {
124+ values[ index] = outlier;
125+ }
126+ }
127+ }
128+ PrimitiveArray :: new ( values. freeze ( ) , Validity :: NonNullable )
129+ }
130+
131+ #[ divan:: bench( types = [ f32 , f64 ] , args = RD_BENCH_ARGS ) ]
132+ fn compress_rd < T : ALPRDFloat + NativePType > ( bencher : Bencher , args : ( usize , f64 ) ) {
133+ let ( n, fraction_patch) = args;
134+ let primitive = make_rd_array :: < T > ( n, fraction_patch) ;
135+ let encoder = RDEncoder :: new ( primitive. as_slice :: < T > ( ) ) ;
110136
111137 bencher
112138 . with_inputs ( || ( & primitive, & encoder) )
113139 . bench_refs ( |( primitive, encoder) | encoder. encode ( primitive) )
114140}
115141
116- #[ divan:: bench( types = [ f32 , f64 ] , args = [ 10_000 , 100_000 ] ) ]
117- fn decompress_rd < T : ALPRDFloat > ( bencher : Bencher , n : usize ) {
118- let primitive = PrimitiveArray :: new ( buffer ! [ T :: from( 1.23 ) . unwrap( ) ; n] , Validity :: NonNullable ) ;
119- let encoder = RDEncoder :: new ( & [ T :: from ( 1.23 ) . unwrap ( ) ] ) ;
142+ #[ divan:: bench( types = [ f32 , f64 ] , args = RD_BENCH_ARGS ) ]
143+ fn decompress_rd < T : ALPRDFloat + NativePType > ( bencher : Bencher , args : ( usize , f64 ) ) {
144+ let ( n, fraction_patch) = args;
145+ let primitive = make_rd_array :: < T > ( n, fraction_patch) ;
146+ let encoder = RDEncoder :: new ( primitive. as_slice :: < T > ( ) ) ;
120147 let encoded = encoder. encode ( & primitive) ;
121148
122149 bencher
0 commit comments