diff --git a/pybloom_live/benchmarks.py b/pybloom_live/benchmarks.py index 4c78d9e..aa38bf1 100755 --- a/pybloom_live/benchmarks.py +++ b/pybloom_live/benchmarks.py @@ -1,9 +1,13 @@ #!/usr/bin/env python # """Test performance of BloomFilter at a set capacity and error rate.""" +import math import sys +import time + +import bitarray + from pybloom import BloomFilter -import bitarray, math, time from utils import range_fn diff --git a/pybloom_live/pybloom.py b/pybloom_live/pybloom.py index 9a1af61..4cdf031 100644 --- a/pybloom_live/pybloom.py +++ b/pybloom_live/pybloom.py @@ -5,11 +5,15 @@ Requires the bitarray library: http://pypi.python.org/pypi/bitarray/ """ from __future__ import absolute_import -import math -import hashlib + import copy -from pybloom_live.utils import range_fn, is_string_io, running_python_3 -from struct import unpack, pack, calcsize +import hashlib +import math +from struct import calcsize, pack, unpack + +import xxhash + +from pybloom_live.utils import is_string_io, range_fn, running_python_3 try: import bitarray @@ -34,7 +38,7 @@ def make_hashfuncs(num_slices, num_bits): elif total_hash_bits > 128: hashfn = hashlib.sha1 else: - hashfn = hashlib.md5 + hashfn = xxhash.xxh128 fmt = fmt_code * (hashfn().digest_size // chunk_size) num_salts, extra = divmod(num_slices, len(fmt)) diff --git a/pybloom_live/test_pybloom.py b/pybloom_live/test_pybloom.py index 9f7118a..1424c07 100644 --- a/pybloom_live/test_pybloom.py +++ b/pybloom_live/test_pybloom.py @@ -1,19 +1,19 @@ from __future__ import absolute_import + from pybloom_live.pybloom import (BloomFilter, ScalableBloomFilter, make_hashfuncs) -from pybloom_live.utils import running_python_3, range_fn +from pybloom_live.utils import range_fn, running_python_3 try: - import StringIO import cStringIO + import StringIO except ImportError: pass import io - -import unittest import random import tempfile +import unittest import pytest @@ -21,15 +21,15 @@ class TestMakeHashFuncs(unittest.TestCase): def test_make_hashfuncs_returns_hashfn(self): make_hashes, hashfn = make_hashfuncs(100, 20) - self.assertEquals('openssl_sha512', hashfn.__name__) + self.assertEqual('openssl_sha512', hashfn.__name__) make_hashes, hashfn = make_hashfuncs(20, 3) - self.assertEquals('openssl_sha384', hashfn.__name__) + self.assertEqual('openssl_sha384', hashfn.__name__) make_hashes, hashfn = make_hashfuncs(15, 2) - self.assertEquals('openssl_sha256', hashfn.__name__) + self.assertEqual('openssl_sha256', hashfn.__name__) make_hashes, hashfn = make_hashfuncs(10, 2) - self.assertEquals('openssl_sha1', hashfn.__name__) + self.assertEqual('openssl_sha1', hashfn.__name__) make_hashes, hashfn = make_hashfuncs(5, 1) - self.assertEquals('openssl_md5', hashfn.__name__) + self.assertEqual('xxh3_128', hashfn.__name__) class TestUnionIntersection(unittest.TestCase): diff --git a/requirements.txt b/requirements.txt index 7c8e633..1fd296d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ -bitarray>=0.3.4 \ No newline at end of file +bitarray>=0.3.4 +xxhash>=3.0.0 \ No newline at end of file