def test_str(self): """ Range types should have a short and readable ``str`` implementation. Using ``repr`` for all string conversions can be very unreadable for longer types like ``DateTimeTZRange``. """ # Using the "u" prefix to make sure we have the proper return types in # Python2 expected = [ "(0, 4)", "[0, 4]", "(0, 4]", "[0, 4)", "empty", ] results = [] for bounds in ("()", "[]", "(]", "[)"): r = Range(0, 4, bounds=bounds) results.append(str(r)) r = Range(empty=True) results.append(str(r)) assert results == expected
def test_in(self): r = Range(empty=True) assert 10 not in r r = Range() assert 10 in r r = Range(lower=10, bounds="[)") assert 9 not in r assert 10 in r assert 11 in r r = Range(lower=10, bounds="()") assert 9 not in r assert 10 not in r assert 11 in r r = Range(upper=20, bounds="()") assert 19 in r assert 20 not in r assert 21 not in r r = Range(upper=20, bounds="(]") assert 19 in r assert 20 in r assert 21 not in r r = Range(10, 20) assert 9 not in r assert 10 in r assert 11 in r assert 19 in r assert 20 not in r assert 21 not in r r = Range(10, 20, "(]") assert 9 not in r assert 10 not in r assert 11 in r assert 19 in r assert 20 in r assert 21 not in r r = Range(20, 10) assert 9 not in r assert 10 not in r assert 11 not in r assert 19 not in r assert 20 not in r assert 21 not in r
def test_eq_subclass(self): class IntRange(mrange.DecimalRange): pass class PositiveIntRange(IntRange): pass assert Range(10, 20) == IntRange(10, 20) assert PositiveIntRange(10, 20) == IntRange(10, 20)
def test_keywords(self): r = Range(upper=20) r.lower is None r.upper == 20 assert not r.isempty assert r.lower_inf assert not r.upper_inf assert not r.lower_inc assert not r.upper_inc r = Range(lower=10, bounds="(]") r.lower == 10 r.upper is None assert not r.isempty assert not r.lower_inf assert r.upper_inf assert not r.lower_inc assert not r.upper_inc
def test_nobounds(self): r = Range(10, 20) assert r.lower == 10 assert r.upper == 20 assert not r.isempty assert not r.lower_inf assert not r.upper_inf assert r.lower_inc assert not r.upper_inc
def test_empty(self): r = Range(empty=True) assert r.isempty assert r.lower is None assert r.upper is None assert not r.lower_inf assert not r.upper_inf assert not r.lower_inc assert not r.upper_inc
def test_noparam(self): r = Range() assert not r.isempty assert r.lower is None assert r.upper is None assert r.lower_inf assert r.upper_inf assert not r.lower_inc assert not r.upper_inc
def test_bounds(self): for bounds, lower_inc, upper_inc in [ ("[)", True, False), ("(]", False, True), ("()", False, False), ("[]", True, True), ]: r = Range(10, 20, bounds) assert r.lower == 10 assert r.upper == 20 assert not r.isempty assert not r.lower_inf assert not r.upper_inf assert r.lower_inc == lower_inc assert r.upper_inc == upper_inc
def test_pickling(self): r = Range(0, 4) assert pickle.loads(pickle.dumps(r)) == r
def test_ge_ordering(self): assert not Range(empty=True) >= Range(0, 4) assert Range(1, 2) >= Range(0, 4) assert not Range(0, 4) >= Range(1, 2) assert Range(1, 2) >= Range() assert not Range() >= Range(1, 2) assert Range(1) >= Range(upper=1) assert Range() >= Range() assert Range(empty=True) >= Range(empty=True) assert Range(1, 2) >= Range(1, 2) with pytest.raises(TypeError): assert not 1 >= Range(1, 2) with pytest.raises(TypeError): (Range(1, 2) >= 1)
def test_le_ordering(self): assert Range(empty=True) <= Range(0, 4) assert not Range(1, 2) <= Range(0, 4) assert Range(0, 4) <= Range(1, 2) assert not Range(1, 2) <= Range() assert Range() <= Range(1, 2) assert not Range(1) <= Range(upper=1) assert Range() <= Range() assert Range(empty=True) <= Range(empty=True) assert Range(1, 2) <= Range(1, 2) with pytest.raises(TypeError): assert 1 <= Range(1, 2) with pytest.raises(TypeError): assert not Range(1, 2) <= 1
def test_eq_wrong_type(self): assert Range(10, 20) != ()
def test_eq_hash(self): def assert_equal(r1, r2): assert r1 == r2 assert hash(r1) == hash(r2) assert_equal(Range(empty=True), Range(empty=True)) assert_equal(Range(), Range()) assert_equal(Range(10, None), Range(10, None)) assert_equal(Range(10, 20), Range(10, 20)) assert_equal(Range(10, 20), Range(10, 20, "[)")) assert_equal(Range(10, 20, "[]"), Range(10, 20, "[]")) def assert_not_equal(r1, r2): assert r1 != r2 assert hash(r1) != hash(r2) assert_not_equal(Range(10, 20), Range(10, 21)) assert_not_equal(Range(10, 20), Range(11, 20)) assert_not_equal(Range(10, 20, "[)"), Range(10, 20, "[]"))
def test_nonzero(self): assert Range() assert Range(10, 20) assert not Range(empty=True)
def test_bad_bounds(self): with pytest.raises(ValueError): Range(bounds="(") with pytest.raises(ValueError): Range(bounds="[}")