summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/numbits.py6
-rw-r--r--tests/test_numbits.py10
2 files changed, 15 insertions, 1 deletions
diff --git a/coverage/numbits.py b/coverage/numbits.py
index bc29ed94..19c328c4 100644
--- a/coverage/numbits.py
+++ b/coverage/numbits.py
@@ -40,3 +40,9 @@ def merge_numbits(numbits1, numbits2):
"""Merge two numbits"""
byte_pairs = zip_longest(bytes_to_ints(numbits1), bytes_to_ints(numbits2), fillvalue=0)
return binary_bytes(b1 | b2 for b1, b2 in byte_pairs)
+
+@contract(numbits1='bytes', numbits2='bytes', returns='bool')
+def numbits_any_intersection(numbits1, numbits2):
+ """Is there any number that appears in both numbits?"""
+ byte_pairs = zip_longest(bytes_to_ints(numbits1), bytes_to_ints(numbits2), fillvalue=0)
+ return any(b1 & b2 for b1, b2 in byte_pairs)
diff --git a/tests/test_numbits.py b/tests/test_numbits.py
index 2b8e2e4b..ff574d40 100644
--- a/tests/test_numbits.py
+++ b/tests/test_numbits.py
@@ -6,7 +6,9 @@
from hypothesis import given
from hypothesis.strategies import sets, integers
-from coverage.numbits import nums_to_numbits, numbits_to_nums, merge_numbits
+from coverage.numbits import (
+ nums_to_numbits, numbits_to_nums, merge_numbits, numbits_any_intersection,
+ )
from tests.coveragetest import CoverageTest
@@ -27,3 +29,9 @@ class NumbitsOpTest(CoverageTest):
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))
+
+ @given(line_numbers, line_numbers)
+ def test_any_intersection(self, nums1, nums2):
+ inter = numbits_any_intersection(nums_to_numbits(nums1), nums_to_numbits(nums2))
+ expect = bool(nums1 & nums2)
+ self.assertEqual(expect, bool(inter))