def test___rtruediv__():
    assert 2 / m == si.Physical(2, si.Dimensions(0, -1, 0, 0, 0, 0, 0), 1)
    assert 10 / N == si.Physical(10, si.Dimensions(-1, -1, 2, 0, 0, 0, 0), 1)
    assert 1 / kip == si.Physical(
        value=0.00022480894309971045,
        dimensions=si.Dimensions(kg=-1, m=-1, s=2, A=0, cd=0, K=0, mol=0),
        factor=4448.221615260501,
        precision=3,
    )
def test___truediv__():
    assert m / m == 1
    assert m / s == si.Physical(1, si.Dimensions(0, 1, -1, 0, 0, 0, 0), 1)
    assert kN / m / m == kPa
    assert (5 * kN) / 2 == 2.5 * kN
    assert (kip / (2 * ft * 5 * ft)).value == pytest.approx(
        (0.100 * ksf).value)
def test___sub__():
    assert kg - kg == 0.0
    assert m - ft == si.Physical(0.6952, si.Dimensions(0, 1, 0, 0, 0, 0, 0), 1)
    assert ft - m == si.Physical(-0.6952, si.Dimensions(0, 1, 0, 0, 0, 0, 0),
                                 1 / 0.3048)
    assert N - lb == si.Physical(-3.4482216152605005,
                                 si.Dimensions(1, 1, -2, 0, 0, 0, 0), 1)
    assert lb - N == si.Physical(3.4482216152605005,
                                 si.Dimensions(1, 1, -2, 0, 0, 0, 0),
                                 0.22480894309971047)
    assert (ft - 3).value == pytest.approx(
        si.Physical(-0.6096, si.Dimensions(0, 1, 0, 0, 0, 0, 0),
                    1 / 0.3048).value)
    with pytest.raises(ValueError):
        kg - m
        N - psf
def test___mul__():
    assert m * m == si.Physical(1, si.Dimensions(0, 2, 0, 0, 0, 0, 0), 1)
    assert m * kg == si.Physical(1, si.Dimensions(1, 1, 0, 0, 0, 0, 0), 1)
    assert ft * m == si.Physical(0.3048, si.Dimensions(0, 2, 0, 0, 0, 0, 0),
                                 1 / 0.3048)
    assert N * m == si.Physical(1, si.Dimensions(1, 2, -2, 0, 0, 0, 0), 1)
    assert psf * m * m == si.Physical(47.88025898033584,
                                      si.Dimensions(1, 1, -2, 0, 0, 0, 0),
                                      0.02088543423315013)
    assert 2 * ft == si.Physical(0.6096, si.Dimensions(0, 1, 0, 0, 0, 0, 0),
                                 1 / 0.3048)
    assert (si.Physical(10, si.Dimensions(-1, -1, 0, 0, 0, 0, 0), 1) *
            si.Physical(2, si.Dimensions(1, 1, 0, 0, 0, 0, 0), 1)) == 20
    assert (10 * ksf) * (5 * ft) * (2 *
                                    ft) == 100 * kip  # TODO: Fix this gotcha
    assert m * ft == si.Physical(0.3048, si.Dimensions(0, 2, 0, 0, 0, 0, 0),
                                 1.0)
def test___add__():
    assert kg + kg == si.Physical(2, si.Dimensions(1, 0, 0, 0, 0, 0, 0), 1)
    assert m + ft == si.Physical(1.3048, si.Dimensions(0, 1, 0, 0, 0, 0, 0), 1)
    assert ft + m == si.Physical(1.3048, si.Dimensions(0, 1, 0, 0, 0, 0, 0),
                                 1 / 0.3048)
    assert N + lb == si.Physical(5.4482216152605005,
                                 si.Dimensions(1, 1, -2, 0, 0, 0, 0), 1)
    assert lb + N == si.Physical(5.4482216152605005,
                                 si.Dimensions(1, 1, -2, 0, 0, 0, 0),
                                 0.22480894309971047)
    assert ft + 3 == si.Physical(1.2192, si.Dimensions(0, 1, 0, 0, 0, 0, 0),
                                 1 / 0.3048)
    with pytest.raises(ValueError):
        kg + m
        N + psf
def test___pow__():
    assert N**2 == si.Physical(1, si.Dimensions(2, 2, -4, 0, 0, 0, 0), 1)
    assert ft**3 == si.Physical(0.3048**3, si.Dimensions(0, 3, 0, 0, 0, 0, 0),
                                (1 / 0.3048)**3)
def test___rsub__():
    assert 2 - ft == si.Physical(0.3048, si.Dimensions(0, 1, 0, 0, 0, 0, 0),
                                 1 / 0.3048)
    assert 10 - N == si.Physical(9, si.Dimensions(1, 1, -2, 0, 0, 0, 0), 1)