def test_validates_bounds(): with pytest.raises(ValueError): IntSet.single(-1) with pytest.raises(ValueError): IntSet.single(2 ** 64) with pytest.raises(ValueError): IntSet.interval(1, 2 ** 65) with pytest.raises(ValueError): IntSet.interval(2 ** 65, 1)
def test_validates_argument_types(): with pytest.raises(TypeError): IntSet.single('foo')
def three_adjacent_values_with_hole(self, v): assume(v + 2 <= 2 ** 64) return (IntSet.single(v) | IntSet.single(v + 2), [v, v + 2])
def single_value(self, v): return (IntSet.single(v), [v])
def test_not_equal_to_other_types(): assert IntSet.single(1) != 1
def test_discarding_a_solo_gives_the_empty_list(i): imp = IntSet.single(i) assert imp.discard(i).size() == 0
SMALL = 100 short_intervals = st.builds( lambda start, length: assume( start + length <= 2 ** 64) and (start, start + length), integers_in_range, st.integers(0, SMALL)) interval_list = st.lists(intervals, average_size=10) IntSets = st.builds( IntSet.from_intervals, interval_list) | integers_in_range.map( IntSet.single) | intervals.map(lambda x: IntSet.interval(*x)) @example(IntSet.empty()) @example(IntSet.single(1)) @example(IntSet([1, 2, 3, 6])) @given(IntSets) def test_pickling_works_correctly(x): assert pickle.loads(pickle.dumps(x)) == x @example(IntSet.interval(0, 10)) @example(IntSet([(0, 10), (15, 20)])) @given(IntSets) def test_copies_as_self(x): assert copy(x) is x assert deepcopy(x) is x def test_deepcopy_collapses_reference_equality():