@@ -95,16 +95,14 @@ impl<C: GeoConfig<Diff>> GeoDiffCount<'_, C> {
95
95
/// having to construct another iterator with the remaining `BitChunk`s.
96
96
fn from_bit_chunks < I : Iterator < Item = BitChunk > > ( config : C , chunks : I ) -> Self {
97
97
let mut ones = iter_ones :: < C :: BucketType , _ > ( chunks. peekable ( ) ) ;
98
-
99
98
let mut msb = Vec :: default ( ) ;
100
99
take_ref ( & mut ones, config. max_msb_len ( ) - 1 ) . for_each ( |bucket| {
101
100
msb. push ( bucket) ;
102
101
} ) ;
103
102
let smallest_msb = ones
104
103
. next ( )
105
- . map ( |bucket| {
106
- msb. push ( bucket) ;
107
- bucket
104
+ . inspect ( |bucket| {
105
+ msb. push ( * bucket) ;
108
106
} )
109
107
. unwrap_or_default ( ) ;
110
108
@@ -365,6 +363,7 @@ mod tests {
365
363
use crate :: {
366
364
build_hasher:: UnstableDefaultBuildHasher ,
367
365
config:: { iter_ones, tests:: test_estimate, FixedConfig } ,
366
+ test_rng:: prng_test_harness,
368
367
} ;
369
368
370
369
use super :: * ;
@@ -517,28 +516,32 @@ mod tests {
517
516
518
517
#[ test]
519
518
fn test_xor_plus_mask ( ) {
520
- let mut rnd = rand:: rngs:: StdRng :: from_os_rng ( ) ;
521
- let mask_size = 12 ;
522
- let mask = 0b100001100000 ;
523
- let mut a = GeoDiffCount7 :: default ( ) ;
524
- for _ in 0 ..10000 {
525
- a. xor_bit ( a. config . hash_to_bucket ( rnd. next_u64 ( ) ) ) ;
526
- }
527
- let mut expected = GeoDiffCount7 :: default ( ) ;
528
- let mut b = a. clone ( ) ;
529
519
for _ in 0 ..1000 {
530
- let hash = rnd. next_u64 ( ) ;
531
- b. xor_bit ( b. config . hash_to_bucket ( hash) ) ;
532
- expected. xor_bit ( expected. config . hash_to_bucket ( hash) ) ;
533
- assert_eq ! ( expected, xor( & a, & b) ) ;
534
-
535
- let masked_a = masked ( & a, mask, mask_size) ;
536
- let masked_b = masked ( & b, mask, mask_size) ;
537
- let masked_expected = masked ( & expected, mask, mask_size) ;
538
- // FIXME: test failed once with:
539
- // left: ~12.37563 (msb: [390, 334, 263, 242, 222, 215, 164, 148, 100, 97, 66, 36], |lsb|: 36)
540
- // right: ~12.37563 (msb: [390, 334, 263, 242, 222, 215, 164, 148, 100, 97, 66, 36], |lsb|: 0)
541
- assert_eq ! ( masked_expected, xor( & masked_a, & masked_b) ) ;
520
+ prng_test_harness ( |mut rng| {
521
+ let mask_size = 12 ;
522
+ let mask = 0b100001100000 ;
523
+ let mut a = GeoDiffCount7 :: default ( ) ;
524
+ for _ in 0 ..10000 {
525
+ a. xor_bit ( a. config . hash_to_bucket ( rng. next_u64 ( ) ) ) ;
526
+ }
527
+ let mut expected = GeoDiffCount7 :: default ( ) ;
528
+ let mut b = a. clone ( ) ;
529
+ for _ in 0 ..1000 {
530
+ let hash = rng. next_u64 ( ) ;
531
+ b. xor_bit ( b. config . hash_to_bucket ( hash) ) ;
532
+ expected. xor_bit ( expected. config . hash_to_bucket ( hash) ) ;
533
+
534
+ println ! ( "a -> {:?}" , a) ;
535
+ println ! ( "b -> {:?}" , b) ;
536
+ println ! ( "exp -> {:?}" , expected) ;
537
+
538
+ assert_eq ! ( expected, xor( & a, & b) ) ;
539
+ let masked_a = masked ( & a, mask, mask_size) ;
540
+ let masked_b = masked ( & b, mask, mask_size) ;
541
+ let masked_expected = masked ( & expected, mask, mask_size) ;
542
+ assert_eq ! ( masked_expected, xor( & masked_a, & masked_b) ) ;
543
+ }
544
+ } ) ;
542
545
}
543
546
}
544
547
0 commit comments