test-bloom-filter 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/python
  2. # pylint: disable=W0402
  3. # W0402: We want the deprecated string module, for a use that isn't deprecated
  4. '''Unit tests for bloom_filter_mod'''
  5. import random
  6. import string
  7. import bloom_filter_mod
  8. def tests():
  9. '''Some quick automatic tests for the bloom filter class'''
  10. states = '''Alabama Alaska Arizona Arkansas California Colorado Connecticut
  11. Delaware Florida Georgia Hawaii Idaho Illinois Indiana Iowa Kansas
  12. Kentucky Louisiana Maine Maryland Massachusetts Michigan Minnesota
  13. Mississippi Missouri Montana Nebraska Nevada NewHampshire NewJersey
  14. NewMexico NewYork NorthCarolina NorthDakota Ohio Oklahoma Oregon
  15. Pennsylvania RhodeIsland SouthCarolina SouthDakota Tennessee Texas Utah
  16. Vermont Virginia Washington WestVirginia Wisconsin Wyoming'''.split()
  17. bloom_filter = bloom_filter_mod.Bloom_filter(num_bits=1000, num_probes=14)
  18. for state in states:
  19. bloom_filter.add(state)
  20. states_in_count = sum(state in bloom_filter for state in states)
  21. print('%d true positives out of %d trials' % (states_in_count, len(states)))
  22. trials = 100000
  23. false_positives = 0
  24. for trialno in range(trials):
  25. dummy = trialno
  26. while True:
  27. candidate = ''.join(random.sample(string.ascii_letters, 5))
  28. # If we accidentally found a real state, try again
  29. if candidate in states:
  30. continue
  31. if candidate in bloom_filter:
  32. false_positives += 1
  33. break
  34. print('%d true negatives and %d false positives out of %d trials' % (trials - false_positives, false_positives, trials))
  35. tests()