def test_PythonRationalType__lt_le_gt_ge__(): assert (Q(1, 2) < Q(1, 4)) is False assert (Q(1, 2) <= Q(1, 4)) is False assert (Q(1, 2) > Q(1, 4)) is True assert (Q(1, 2) >= Q(1, 4)) is True assert (Q(1, 4) < Q(1, 2)) is True assert (Q(1, 4) <= Q(1, 2)) is True assert (Q(1, 4) > Q(1, 2)) is False assert (Q(1, 4) >= Q(1, 2)) is False
def test_PythonRationalType__pow__(): assert Q(1)**10 == Q(1) assert Q(2)**10 == Q(1024) assert Q(1)**(-10) == Q(1) assert Q(2)**(-10) == Q(1, 1024)
def test_PythonRationalType__eq__(): assert (Q(1, 2) == Q(1, 2)) is True assert (Q(1, 2) != Q(1, 2)) is False assert (Q(1, 2) == Q(1, 3)) is False assert (Q(1, 2) != Q(1, 3)) is True
def test_PythonRationalType__mul__(): assert Q(-1, 2) * Q(1, 2) == Q(-1, 4) assert Q(1, 2) * Q(-1, 2) == Q(-1, 4) assert Q(1, 2) * Q(1, 2) == Q(1, 4) assert Q(1, 2) * Q(3, 2) == Q(3, 4) assert Q(3, 2) * Q(1, 2) == Q(3, 4) assert Q(3, 2) * Q(3, 2) == Q(9, 4) assert 2 * Q(1, 2) == Q(1) assert Q(1, 2) * 2 == Q(1)
def test_PythonRationalType__div__(): assert Q(-1, 2) / Q(1, 2) == Q(-1) assert Q(1, 2) / Q(-1, 2) == Q(-1) assert Q(1, 2) / Q(1, 2) == Q(1) assert Q(1, 2) / Q(3, 2) == Q(1, 3) assert Q(3, 2) / Q(1, 2) == Q(3) assert Q(3, 2) / Q(3, 2) == Q(1) assert 2 / Q(1, 2) == Q(4) assert Q(1, 2) / 2 == Q(1, 4) raises(ZeroDivisionError, "Q(1, 2) / Q(0)") raises(ZeroDivisionError, "Q(1, 2) / 0")
def test_PythonRationalType__add__(): assert Q(-1, 2) + Q(1, 2) == Q(0) assert Q(1, 2) + Q(-1, 2) == Q(0) assert Q(1, 2) + Q(1, 2) == Q(1) assert Q(1, 2) + Q(3, 2) == Q(2) assert Q(3, 2) + Q(1, 2) == Q(2) assert Q(3, 2) + Q(3, 2) == Q(3) assert 1 + Q(1, 2) == Q(3, 2) assert Q(1, 2) + 1 == Q(3, 2)
def test_PythonRationalType__sub__(): assert Q(-1, 2) - Q(1, 2) == Q(-1) assert Q(1, 2) - Q(-1, 2) == Q(1) assert Q(1, 2) - Q(1, 2) == Q(0) assert Q(1, 2) - Q(3, 2) == Q(-1) assert Q(3, 2) - Q(1, 2) == Q(1) assert Q(3, 2) - Q(3, 2) == Q(0) assert 1 - Q(1, 2) == Q(1, 2) assert Q(1, 2) - 1 == Q(-1, 2)
def test_PythonRationalType__pos__(): assert +Q(-1, 2) == Q(-1, 2) assert +Q(1, 2) == Q(1, 2)
def test_PythonRationalType__neg__(): assert -Q(-1, 2) == Q(1, 2) assert -Q(1, 2) == Q(-1, 2)
def test_PythonRationalType__abs__(): assert abs(Q(-1, 2)) == Q(1, 2) assert abs(Q(1, 2)) == Q(1, 2)
def test_PythonRationalType__float__(): assert float(Q(-1, 2)) == -0.5 assert float(Q(1, 2)) == 0.5
def test_PythonRationalType__int__(): assert int(Q(-1, 4)) == 0 assert int(Q(1, 4)) == 0 assert int(Q(-5, 4)) == -1 assert int(Q(5, 4)) == 1
def test_PythonRationalType__hash__(): assert hash(Q(0)) == hash(0) assert hash(Q(1)) == hash(1) assert hash(Q(117)) == hash(117)
def test_PythonRationalType__init__(): assert Q(0).p == 0 assert Q(0).q == 1 assert Q(0, 1).p == 0 assert Q(0, 1).q == 1 assert Q(0, -1).p == 0 assert Q(0, -1).q == 1 assert Q(1).p == 1 assert Q(1).q == 1 assert Q(1, 1).p == 1 assert Q(1, 1).q == 1 assert Q(-1, -1).p == 1 assert Q(-1, -1).q == 1 assert Q(-1).p == -1 assert Q(-1).q == 1 assert Q(-1, 1).p == -1 assert Q(-1, 1).q == 1 assert Q(1, -1).p == -1 assert Q(1, -1).q == 1 assert Q(1, 2).p == 1 assert Q(1, 2).q == 2 assert Q(3, 4).p == 3 assert Q(3, 4).q == 4 assert Q(2, 2).p == 1 assert Q(2, 2).q == 1 assert Q(2, 4).p == 1 assert Q(2, 4).q == 2