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