Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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)
Пример #4
0
    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
Пример #5
0
 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
Пример #6
0
    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
Пример #7
0
    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
Пример #8
0
 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
Пример #9
0
 def test_pickling(self):
     r = Range(0, 4)
     assert pickle.loads(pickle.dumps(r)) == r
Пример #10
0
 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)
Пример #11
0
 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
Пример #12
0
 def test_eq_wrong_type(self):
     assert Range(10, 20) != ()
Пример #13
0
    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, "[]"))
Пример #14
0
 def test_nonzero(self):
     assert Range()
     assert Range(10, 20)
     assert not Range(empty=True)
Пример #15
0
 def test_bad_bounds(self):
     with pytest.raises(ValueError):
         Range(bounds="(")
     with pytest.raises(ValueError):
         Range(bounds="[}")