Exemplo n.º 1
0
    def test_cuckoo_filter_load(self):
        """test loading a saved cuckoo filter"""
        md5sum = "3c693508d1a3acd819310fd0c11dc906"
        with NamedTemporaryFile(dir=os.getcwd(),
                                suffix=".cko",
                                delete=DELETE_TEMP_FILES) as fobj:
            cko = CuckooFilter.init_error_rate(0.00001)
            for i in range(1000):
                cko.add(str(i))
            cko.export(fobj.name)
            md5_out = calc_file_md5(fobj.name)
            self.assertEqual(md5sum, md5_out)

            ckf = CuckooFilter.load_error_rate(error_rate=0.00001,
                                               filepath=fobj.name)
            for i in range(1000):
                self.assertTrue(ckf.check(str(i)))

            self.assertEqual(10000, ckf.capacity)
            self.assertEqual(4, ckf.bucket_size)
            self.assertEqual(500, ckf.max_swaps)
            self.assertEqual(2, ckf.expansion_rate)
            self.assertEqual(True, ckf.auto_expand)
            self.assertEqual(3, ckf.fingerprint_size)
            self.assertEqual(20, ckf.fingerprint_size_bits)
            self.assertEqual(0.00001, ckf.error_rate)
            self.assertEqual(0.025, ckf.load_factor())
Exemplo n.º 2
0
 def test_cuckoo_filter_er_bytes(self):
     """test exporting a cuckoo filter to bytes"""
     md5sum = "3c693508d1a3acd819310fd0c11dc906"
     cko = CuckooFilter.init_error_rate(0.00001)
     for i in range(1000):
         cko.add(str(i))
     md5_out = hashlib.md5(bytes(cko)).hexdigest()
     self.assertEqual(md5sum, md5_out)
Exemplo n.º 3
0
 def test_cuckoo_filter_er_default(self):
     """test cuckoo filter default properties"""
     cko = CuckooFilter.init_error_rate(0.00001)
     self.assertEqual(10000, cko.capacity)
     self.assertEqual(4, cko.bucket_size)
     self.assertEqual(500, cko.max_swaps)
     self.assertEqual(2, cko.expansion_rate)
     self.assertEqual(True, cko.auto_expand)
     self.assertEqual(3, cko.fingerprint_size)
     self.assertEqual(20, cko.fingerprint_size_bits)
     self.assertEqual(0.00001, cko.error_rate)
Exemplo n.º 4
0
 def test_cuckoo_filter_er_export(self):
     """test exporting a cuckoo filter"""
     md5sum = "3c693508d1a3acd819310fd0c11dc906"
     with NamedTemporaryFile(dir=os.getcwd(),
                             suffix=".cko",
                             delete=DELETE_TEMP_FILES) as fobj:
         cko = CuckooFilter.init_error_rate(0.00001)
         for i in range(1000):
             cko.add(str(i))
         cko.export(fobj.name)
         md5_out = calc_file_md5(fobj.name)
         self.assertEqual(md5sum, md5_out)
Exemplo n.º 5
0
    def test_cuckoo_filter_er_frombytes(self):
        """test initializing a cuckoo filter frombytes"""
        cko = CuckooFilter.init_error_rate(0.00001)
        for i in range(1000):
            cko.add(str(i))
        bytes_out = bytes(cko)

        cko2 = CuckooFilter.frombytes(bytes_out, error_rate=0.00001)
        self.assertEqual(bytes_out, bytes(cko2))

        for i in range(1000):
            self.assertTrue(cko2.check(str(i)))
        self.assertFalse(cko2.check("9999"))
Exemplo n.º 6
0
    def test_cuckoo_filter_er_add_check(self):
        """test adding to the cuckoo filter"""
        cko = CuckooFilter.init_error_rate(0.00001)
        cko.add("this is a test")
        self.assertEqual(cko.elements_added, 1)
        cko.add("this is another test")
        self.assertEqual(cko.elements_added, 2)
        cko.add("this is yet another test")
        self.assertEqual(cko.elements_added, 3)

        # check
        self.assertEqual(cko.check("this is a test"), True)
        self.assertEqual(cko.check("this is another test"), True)
        self.assertEqual(cko.check("this is yet another test"), True)
        self.assertEqual(cko.check("this is not another test"), False)
        self.assertEqual(cko.check("this is not a test"), False)

        # use of `in`
        self.assertEqual("this is a test" in cko, True)
        self.assertEqual("this is another test" in cko, True)
        self.assertEqual("this is yet another test" in cko, True)
        self.assertEqual("this is not another test" in cko, False)
        self.assertEqual("this is not a test" in cko, False)