@@ -125,7 +125,7 @@ use crate::hash_utils::HashIterBuilder;
125125#[ derive( Clone ) ]
126126pub struct CountMinSketch < T , C = usize , B = BuildHasherDefault < DefaultHasher > >
127127where
128- T : Hash ,
128+ T : Hash + ? Sized ,
129129 C : CheckedAdd + Clone + One + Ord + Unsigned + Zero ,
130130 B : BuildHasher + Clone + Eq ,
131131{
@@ -138,7 +138,7 @@ where
138138
139139impl < T , C > CountMinSketch < T , C >
140140where
141- T : Hash ,
141+ T : Hash + ? Sized ,
142142 C : CheckedAdd + Clone + One + Ord + Unsigned + Zero ,
143143{
144144 /// Create new CountMinSketch based on table size.
@@ -172,7 +172,7 @@ where
172172
173173impl < T , C , B > CountMinSketch < T , C , B >
174174where
175- T : Hash ,
175+ T : Hash + ? Sized ,
176176 C : CheckedAdd + Clone + One + Ord + Unsigned + Zero ,
177177 B : BuildHasher + Clone + Eq ,
178178{
@@ -300,7 +300,7 @@ where
300300
301301impl < T > fmt:: Debug for CountMinSketch < T >
302302where
303- T : Hash ,
303+ T : Hash + ? Sized ,
304304{
305305 fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
306306 write ! ( f, "CountMinSketch {{ w: {}, d: {} }}" , self . w, self . d)
@@ -513,6 +513,15 @@ mod tests {
513513 assert_eq ! ( cms. query_point( & 2 ) , 0 ) ;
514514 }
515515
516+ #[ test]
517+ fn add_unsized ( ) {
518+ let mut cms = CountMinSketch :: < str , usize > :: with_params ( 10 , 10 ) ;
519+
520+ assert_eq ! ( cms. add( "test" ) , 1 ) ;
521+ assert_eq ! ( cms. query_point( "test" ) , 1 ) ;
522+ assert_eq ! ( cms. query_point( "foo" ) , 0 ) ;
523+ }
524+
516525 #[ test]
517526 fn send ( ) {
518527 let cms = CountMinSketch :: < NotSend > :: with_params ( 10 , 10 ) ;
0 commit comments