diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2019-07-30 12:05:19 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2019-07-31 10:24:39 -0400 |
commit | 13ceea280e0f0b77a655dc7d344925c0ccf84b41 (patch) | |
tree | 4eab9a1f8afb29019599be7ed3bbcc85e7542f91 | |
parent | e94f523162dd39acddfa17b20f4234f1ee5dec7f (diff) | |
download | python-coveragepy-git-13ceea280e0f0b77a655dc7d344925c0ccf84b41.tar.gz |
Use Hypothesis instead of my own janky randomization
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | requirements/pytest.pip | 1 | ||||
-rw-r--r-- | tests/test_numbits.py | 36 |
3 files changed, 16 insertions, 23 deletions
@@ -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)) |