2 from __future__ import absolute_import, print_function
4 import errno, platform, tempfile
9 def test_bloom(tmpdir):
10 hashes = [os.urandom(20) for i in range(100)]
14 ix.name = b'dummy.idx'
15 ix.shatable = b''.join(hashes)
17 with bloom.create(tmpdir + b'/pybuptest.bloom', expected=100, k=k) as b:
19 assert b.pfalse_positive() < .1
20 with bloom.ShaBloom(tmpdir + b'/pybuptest.bloom') as b:
23 all_present &= (b.exists(h) or False)
26 for h in [os.urandom(20) for i in range(1000)]:
29 assert false_positives < 5
30 os.unlink(tmpdir + b'/pybuptest.bloom')
32 tf = tempfile.TemporaryFile(dir=tmpdir)
33 with bloom.create(b'bup.bloom', f=tf, expected=100) as b:
37 # Test large (~1GiB) filter. This may fail on s390 (31-bit
38 # architecture), and anywhere else where the address space is
39 # sufficiently limited.
40 tf = tempfile.TemporaryFile(dir=tmpdir)
43 with bloom.create(b'bup.bloom', f=tf, expected=2**28,
44 delaywrite=False) as b:
46 except EnvironmentError as ex:
47 (ptr_width, linkage) = platform.architecture()
48 if ptr_width == '32bit' and ex.errno == errno.ENOMEM:
49 logging.getLogger().info('skipping large bloom filter test (mmap probably failed) '