@@ -4,8 +4,7 @@ extern crate test;
4
4
5
5
#[ cfg( test) ]
6
6
mod tests {
7
- use std:: iter;
8
- use std:: sync:: Arc ;
7
+ use std:: { ops:: RangeInclusive , sync:: Arc } ;
9
8
10
9
use common:: OwnedBytes ;
11
10
use fastfield_codecs:: * ;
@@ -71,29 +70,24 @@ mod tests {
71
70
} ) ;
72
71
}
73
72
74
- fn get_exp_data ( ) -> Vec < u64 > {
73
+ const FIFTY_PERCENT_RANGE : RangeInclusive < u64 > = 1 ..=50 ;
74
+ const SINGLE_ITEM : u64 = 90 ;
75
+ const SINGLE_ITEM_RANGE : RangeInclusive < u64 > = 90 ..=90 ;
76
+ const ONE_PERCENT_ITEM_RANGE : RangeInclusive < u64 > = 49 ..=49 ;
77
+ fn get_data_50percent_item ( ) -> Vec < u128 > {
78
+ let mut rng = StdRng :: from_seed ( [ 1u8 ; 32 ] ) ;
79
+
75
80
let mut data = vec ! [ ] ;
76
- for i in 0 ..100 {
77
- let num = i * i ;
78
- data. extend ( iter :: repeat ( i as u64 ) . take ( num ) ) ;
81
+ for _ in 0 ..300_000 {
82
+ let val = rng . gen_range ( 1 ..= 100 ) ;
83
+ data. push ( val ) ;
79
84
}
80
- data. shuffle ( & mut StdRng :: from_seed ( [ 1u8 ; 32 ] ) ) ;
81
-
82
- assert_eq ! ( data. len( ) , 328350 ) ;
85
+ data. push ( SINGLE_ITEM ) ;
83
86
84
- // lengt = 328350
87
+ data. shuffle ( & mut rng) ;
88
+ let data = data. iter ( ) . map ( |el| * el as u128 ) . collect :: < Vec < _ > > ( ) ;
85
89
data
86
90
}
87
-
88
- fn get_data_50percent_item ( ) -> ( u128 , u128 , Vec < u128 > ) {
89
- let mut permutation = get_exp_data ( ) ;
90
- let major_item = 20 ;
91
- let minor_item = 10 ;
92
- permutation. extend ( iter:: repeat ( major_item) . take ( permutation. len ( ) ) ) ;
93
- permutation. shuffle ( & mut StdRng :: from_seed ( [ 1u8 ; 32 ] ) ) ;
94
- let permutation = permutation. iter ( ) . map ( |el| * el as u128 ) . collect :: < Vec < _ > > ( ) ;
95
- ( major_item as u128 , minor_item as u128 , permutation)
96
- }
97
91
fn get_u128_column_random ( ) -> Arc < dyn Column < u128 > > {
98
92
let permutation = generate_random ( ) ;
99
93
let permutation = permutation. iter ( ) . map ( |el| * el as u128 ) . collect :: < Vec < _ > > ( ) ;
@@ -111,15 +105,31 @@ mod tests {
111
105
// U64 RANGE START
112
106
#[ bench]
113
107
fn bench_intfastfield_getrange_u64_50percent_hit ( b : & mut Bencher ) {
114
- let ( major_item, _minor_item, data) = get_data_50percent_item ( ) ;
115
- let major_item = major_item as u64 ;
108
+ let data = get_data_50percent_item ( ) ;
109
+ let data = data. iter ( ) . map ( |el| * el as u64 ) . collect :: < Vec < _ > > ( ) ;
110
+ let column: Arc < dyn Column < u64 > > = serialize_and_load ( & data) ;
111
+
112
+ b. iter ( || {
113
+ let mut positions = Vec :: new ( ) ;
114
+ column. get_docids_for_value_range (
115
+ FIFTY_PERCENT_RANGE ,
116
+ 0 ..data. len ( ) as u32 ,
117
+ & mut positions,
118
+ ) ;
119
+ positions
120
+ } ) ;
121
+ }
122
+
123
+ #[ bench]
124
+ fn bench_intfastfield_getrange_u64_1percent_hit ( b : & mut Bencher ) {
125
+ let data = get_data_50percent_item ( ) ;
116
126
let data = data. iter ( ) . map ( |el| * el as u64 ) . collect :: < Vec < _ > > ( ) ;
117
127
let column: Arc < dyn Column < u64 > > = serialize_and_load ( & data) ;
118
128
119
129
b. iter ( || {
120
130
let mut positions = Vec :: new ( ) ;
121
131
column. get_docids_for_value_range (
122
- major_item..=major_item ,
132
+ ONE_PERCENT_ITEM_RANGE ,
123
133
0 ..data. len ( ) as u32 ,
124
134
& mut positions,
125
135
) ;
@@ -129,15 +139,14 @@ mod tests {
129
139
130
140
#[ bench]
131
141
fn bench_intfastfield_getrange_u64_single_hit ( b : & mut Bencher ) {
132
- let ( _major_item, minor_item, data) = get_data_50percent_item ( ) ;
133
- let minor_item = minor_item as u64 ;
142
+ let data = get_data_50percent_item ( ) ;
134
143
let data = data. iter ( ) . map ( |el| * el as u64 ) . collect :: < Vec < _ > > ( ) ;
135
144
let column: Arc < dyn Column < u64 > > = serialize_and_load ( & data) ;
136
145
137
146
b. iter ( || {
138
147
let mut positions = Vec :: new ( ) ;
139
148
column. get_docids_for_value_range (
140
- minor_item..=minor_item ,
149
+ SINGLE_ITEM_RANGE ,
141
150
0 ..data. len ( ) as u32 ,
142
151
& mut positions,
143
152
) ;
@@ -147,7 +156,7 @@ mod tests {
147
156
148
157
#[ bench]
149
158
fn bench_intfastfield_getrange_u64_hit_all ( b : & mut Bencher ) {
150
- let ( _major_item , _minor_item , data) = get_data_50percent_item ( ) ;
159
+ let data = get_data_50percent_item ( ) ;
151
160
let data = data. iter ( ) . map ( |el| * el as u64 ) . collect :: < Vec < _ > > ( ) ;
152
161
let column: Arc < dyn Column < u64 > > = serialize_and_load ( & data) ;
153
162
@@ -162,13 +171,13 @@ mod tests {
162
171
// U128 RANGE START
163
172
#[ bench]
164
173
fn bench_intfastfield_getrange_u128_50percent_hit ( b : & mut Bencher ) {
165
- let ( major_item , _minor_item , data) = get_data_50percent_item ( ) ;
174
+ let data = get_data_50percent_item ( ) ;
166
175
let column = get_u128_column_from_data ( & data) ;
167
176
168
177
b. iter ( || {
169
178
let mut positions = Vec :: new ( ) ;
170
179
column. get_docids_for_value_range (
171
- major_item..=major_item ,
180
+ * FIFTY_PERCENT_RANGE . start ( ) as u128 ..= * FIFTY_PERCENT_RANGE . end ( ) as u128 ,
172
181
0 ..data. len ( ) as u32 ,
173
182
& mut positions,
174
183
) ;
@@ -178,13 +187,13 @@ mod tests {
178
187
179
188
#[ bench]
180
189
fn bench_intfastfield_getrange_u128_single_hit ( b : & mut Bencher ) {
181
- let ( _major_item , minor_item , data) = get_data_50percent_item ( ) ;
190
+ let data = get_data_50percent_item ( ) ;
182
191
let column = get_u128_column_from_data ( & data) ;
183
192
184
193
b. iter ( || {
185
194
let mut positions = Vec :: new ( ) ;
186
195
column. get_docids_for_value_range (
187
- minor_item..=minor_item ,
196
+ * SINGLE_ITEM_RANGE . start ( ) as u128 ..= * SINGLE_ITEM_RANGE . end ( ) as u128 ,
188
197
0 ..data. len ( ) as u32 ,
189
198
& mut positions,
190
199
) ;
@@ -194,7 +203,7 @@ mod tests {
194
203
195
204
#[ bench]
196
205
fn bench_intfastfield_getrange_u128_hit_all ( b : & mut Bencher ) {
197
- let ( _major_item , _minor_item , data) = get_data_50percent_item ( ) ;
206
+ let data = get_data_50percent_item ( ) ;
198
207
let column = get_u128_column_from_data ( & data) ;
199
208
200
209
b. iter ( || {
0 commit comments