summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2019-07-30 12:05:19 -0400
committerNed Batchelder <ned@nedbatchelder.com>2019-07-31 10:24:39 -0400
commit13ceea280e0f0b77a655dc7d344925c0ccf84b41 (patch)
tree4eab9a1f8afb29019599be7ed3bbcc85e7542f91
parente94f523162dd39acddfa17b20f4234f1ee5dec7f (diff)
downloadpython-coveragepy-git-13ceea280e0f0b77a655dc7d344925c0ccf84b41.tar.gz
Use Hypothesis instead of my own janky randomization
-rw-r--r--Makefile2
-rw-r--r--requirements/pytest.pip1
-rw-r--r--tests/test_numbits.py36
3 files changed, 16 insertions, 23 deletions
diff --git a/Makefile b/Makefile
index 6f3edb9b..6dc0cce0 100644
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,7 @@ clean:
-rm -f setuptools-*.egg distribute-*.egg distribute-*.tar.gz
-rm -rf doc/_build doc/_spell doc/sample_html_beta
-rm -rf .tox_kits
- -rm -rf .cache .pytest_cache
+ -rm -rf .cache .pytest_cache .hypothesis
-rm -rf $$TMPDIR/coverage_test
sterile: clean
diff --git a/requirements/pytest.pip b/requirements/pytest.pip
index b5a4276c..bd3255b1 100644
--- a/requirements/pytest.pip
+++ b/requirements/pytest.pip
@@ -9,6 +9,7 @@ pytest-xdist==1.28.0
flaky==3.5.3
mock==3.0.5
PyContracts==1.8.12
+hypothesis==4.32.1
# Our testing mixins
unittest-mixins==1.6
diff --git a/tests/test_numbits.py b/tests/test_numbits.py
index b54f65df..2b8e2e4b 100644
--- a/tests/test_numbits.py
+++ b/tests/test_numbits.py
@@ -3,35 +3,27 @@
"""Tests for coverage.numbits"""
-import random
+from hypothesis import given
+from hypothesis.strategies import sets, integers
from coverage.numbits import nums_to_numbits, numbits_to_nums, merge_numbits
from tests.coveragetest import CoverageTest
+# Hypothesis-generated line number data
+line_numbers = sets(integers(min_value=1, max_value=9999), min_size=1)
+
class NumbitsOpTest(CoverageTest):
"""Tests of the numbits operations in numbits.py."""
run_in_temp_dir = False
- def numbers(self, r):
- """Produce a list of numbers from a Random object."""
- return list(set(r.randint(1, 1000) for _ in range(r.randint(100, 200))))
-
- def test_conversion(self):
- r = random.Random(1792)
- for _ in range(10):
- nums = self.numbers(r)
- numbits = nums_to_numbits(nums)
- self.assertEqual(sorted(numbits_to_nums(numbits)), sorted(nums))
-
- def test_merging(self):
- r = random.Random(314159)
- for _ in range(10):
- nums1 = self.numbers(r)
- nums2 = self.numbers(r)
- merged = numbits_to_nums(merge_numbits(nums_to_numbits(nums1), nums_to_numbits(nums2)))
- all_nums = set()
- all_nums.update(nums1)
- all_nums.update(nums2)
- self.assertEqual(sorted(all_nums), sorted(merged))
+ @given(line_numbers)
+ def test_conversion(self, nums):
+ nums2 = numbits_to_nums(nums_to_numbits(nums))
+ self.assertEqual(nums, set(nums2))
+
+ @given(line_numbers, line_numbers)
+ def test_merging(self, nums1, nums2):
+ merged = numbits_to_nums(merge_numbits(nums_to_numbits(nums1), nums_to_numbits(nums2)))
+ self.assertEqual(nums1 | nums2, set(merged))