@@ -113,14 +113,18 @@ impl<H: ManySeqBuilder> ConsistentChooseKHasher<H> {
113113 ///
114114 /// Time: O(k)
115115 pub fn shrink_n ( & mut self ) -> usize {
116- let mut n = self . samples . last ( ) . expect ( "samples must not be empty" ) . pos ;
116+ let n = self . samples . last ( ) . expect ( "samples must not be empty" ) . pos ;
117117 self . n = n;
118+ self . shrink_n_inner ( n)
119+ }
120+
121+ fn shrink_n_inner ( & mut self , mut n : usize ) -> usize {
118122 for i in ( 0 ..self . samples . len ( ) ) . rev ( ) {
119123 if self . samples [ i] . pos < n {
120124 // We are done!
121125 return i + 1 ;
122126 }
123- // Here the maximum could be k, k-1, or i!
127+ // Here the maximum could be k, k-1, or i!
124128 let k = self . samples [ i] . seq ;
125129 let si = Sample :: new ( self . get_sample ( i, n) , i) ;
126130 let sk = Sample :: new ( self . get_sample ( k, n) , k) ;
@@ -140,16 +144,16 @@ impl<H: ManySeqBuilder> ConsistentChooseKHasher<H> {
140144 ///
141145 /// Time: O(k)
142146 pub fn grow_k ( & mut self ) -> usize {
143- let k = self . samples . len ( ) ;
147+ let k = self . samples . len ( ) ;
144148 let sk = Sample :: new ( self . get_sample ( k, self . n ) , k) ;
145149 if let Some ( last) = self . samples . last ( ) . copied ( ) {
146150 if last. pos < sk. pos {
147151 self . samples . push ( sk) ;
148152 } else if last. pos == sk. pos {
149- self . shrink_n ( ) ;
153+ self . shrink_n_inner ( last . pos ) ;
150154 self . samples . push ( sk) ;
151155 } else {
152- let i = self . shrink_n ( ) ;
156+ let i = self . shrink_n_inner ( last . pos ) ;
153157 self . samples . push ( last) ;
154158 return i;
155159 }
@@ -332,11 +336,6 @@ mod tests {
332336 while iter. samples . last ( ) . unwrap ( ) . pos > k {
333337 let expected =
334338 ConsistentChooseKHasher :: new_with_k ( DefaultHasher :: new ( ) , iter. samples . last ( ) . unwrap ( ) . pos , k) ;
335-
336- println ! ( "n: {n}, k: {k}" ) ;
337- println ! ( "before: {:?}" , iter. samples) ;
338- println ! ( "expected {:?}" , expected. samples) ;
339-
340339 iter. shrink_n ( ) ;
341340 assert_eq ! ( iter. samples, expected. samples) ;
342341 }
0 commit comments