@@ -42,6 +42,24 @@ pub struct CuckooFilterFull;
4242/// assert!(!filter.query(&"another super long string"));
4343/// ```
4444///
45+ /// Note that the filter is specific to `T`, so the following will not compile:
46+ ///
47+ /// ```compile_fail
48+ /// use pdatastructs::filters::Filter;
49+ /// use pdatastructs::filters::cuckoofilter::CuckooFilter;
50+ /// use pdatastructs::rand::SeedableRng;
51+ /// use rand_chacha::ChaChaRng;
52+ ///
53+ /// // set up filter
54+ /// let false_positive_rate = 0.02; // = 2%
55+ /// let expected_elements = 1000;
56+ /// let rng = ChaChaRng::from_seed([0; 32]);
57+ /// let mut filter1 = CuckooFilter::<u8, _>::with_properties_8(false_positive_rate, expected_elements, rng);
58+ /// let filter2 = CuckooFilter::<i8, _>::with_properties_8(false_positive_rate, expected_elements, rng);
59+ ///
60+ /// filter1.union(&filter2);
61+ /// ```
62+ ///
4563/// # Applications
4664/// Same as BloomFilter.
4765///
@@ -147,7 +165,7 @@ where
147165 n_buckets : usize ,
148166 l_fingerprint : usize ,
149167 rng : R ,
150- phantom : PhantomData < T > ,
168+ phantom : PhantomData < fn ( ) -> T > ,
151169}
152170
153171impl < T , R > CuckooFilter < T , R >
@@ -581,7 +599,11 @@ where
581599#[ cfg( test) ]
582600mod tests {
583601 use super :: CuckooFilter ;
584- use crate :: { filters:: Filter , hash_utils:: BuildHasherSeeded } ;
602+ use crate :: {
603+ filters:: Filter ,
604+ hash_utils:: BuildHasherSeeded ,
605+ test_util:: { assert_send, NotSend } ,
606+ } ;
585607 use rand:: SeedableRng ;
586608 use rand_chacha:: ChaChaRng ;
587609
@@ -921,4 +943,10 @@ mod tests {
921943 assert ! ( cf. query( "test1" ) ) ;
922944 assert ! ( !cf. query( "test2" ) ) ;
923945 }
946+
947+ #[ test]
948+ fn send ( ) {
949+ let cf = CuckooFilter :: < NotSend , _ > :: with_params ( ChaChaRng :: from_seed ( [ 0 ; 32 ] ) , 2 , 16 , 8 ) ;
950+ assert_send ( & cf) ;
951+ }
924952}
0 commit comments