#!/usr/bin/python3 "Check that an overlap function is correct for nonempty integer intervals." from hypothesis import given from hypothesis.strategies import integers, tuples, composite def includes(interval, point): start, end = interval return start <= point < end def overlaps(a, b): sa, ea = a sb, eb = b return not (ea <= sb or eb <= sa) def nonempty(interval): s, e = interval return e > s points = integers(min_value=0, max_value=100) @composite def intervals(draw): "A Hypothesis strategy to generate a nonempty interval." a = draw(points) b = draw(points) return (a, b) if a < b else (b, a) if b < a else (a, a+1) @given(intervals(), intervals(), points) def test_overlaps(a, b, p): assert nonempty(a) assert nonempty(b) #open('/dev/tty', 'w').write(f'{a} {b} {p}\n') if overlaps(a, b): # If they overlap, they should have *some* point in common. I # claim that at least one of their start points should be such # a point. assert includes(a, b[0]) or includes(b, a[0]) else: assert not (includes(a, p) and includes(b, p))