@@ -273,6 +273,14 @@ fn xor_unoptimized_u128(v1: &[u128], v2: &[u128]) -> usize {
273
273
result
274
274
}
275
275
276
+ fn xor_unoptimized_u128_fixed_size ( v1 : & [ u128 ] , v2 : & [ u128 ] ) -> usize {
277
+ let mut result = 0 ;
278
+ for ( b1, b2) in v1[ ..12 ] . iter ( ) . zip ( v2[ ..12 ] . iter ( ) ) {
279
+ result += ( b1 ^ b2) . count_ones ( ) as usize ;
280
+ }
281
+ result
282
+ }
283
+
276
284
fn benchmark_distance_xor ( c : & mut Criterion ) {
277
285
let r: Vec < bool > = ( 0 ..1536 ) . map ( |v| v as u64 % 2 == 0 ) . collect ( ) ;
278
286
let l: Vec < bool > = ( 0 ..1536 ) . map ( |v| v as u64 % 3 == 0 ) . collect ( ) ;
@@ -294,13 +302,17 @@ fn benchmark_distance_xor(c: &mut Criterion) {
294
302
b. iter ( || xor_unoptimized_u128 ( black_box ( & r_u128) , black_box ( & l_u128) ) )
295
303
} ) ;
296
304
305
+ assert ! ( r_u8. len( ) == 192 ) ;
306
+ group. bench_function ( "xor unoptimized u8 fixed size" , |b| {
307
+ b. iter ( || xor_unoptimized_u8_fixed_size ( black_box ( & r_u8) , black_box ( & l_u8) ) )
308
+ } ) ;
297
309
assert ! ( r_u64. len( ) == 24 ) ;
298
310
group. bench_function ( "xor unoptimized u64 fixed size" , |b| {
299
311
b. iter ( || xor_unoptimized_u64_fixed_size ( black_box ( & r_u64) , black_box ( & l_u64) ) )
300
312
} ) ;
301
- assert ! ( r_u8 . len( ) == 192 ) ;
302
- group. bench_function ( "xor unoptimized u8 fixed size" , |b| {
303
- b. iter ( || xor_unoptimized_u8_fixed_size ( black_box ( & r_u8 ) , black_box ( & l_u8 ) ) )
313
+ assert ! ( r_u128 . len( ) == 12 ) ;
314
+ group. bench_function ( "xor unoptimized u128 fixed size" , |b| {
315
+ b. iter ( || xor_unoptimized_u128_fixed_size ( black_box ( & r_u128 ) , black_box ( & l_u128 ) ) )
304
316
} ) ;
305
317
}
306
318
0 commit comments