def test_truncations(): s = Sexagesimal("1, 2, 30; 18, 52, 23") assert round(s).equals(s) assert round(s, 1).equals(Sexagesimal("1,2,30;19")) assert s.truncate(1).equals(Sexagesimal("1,2,30;18")) assert s.truncate(100).equals(s) assert m.trunc(s) == 3750 assert m.floor(s) == 3750 assert m.ceil(s) == 3751 assert m.floor(-s) == -3749 assert m.ceil(-s) == -3750 assert Sexagesimal(1, 2, 3).minimize_precision().equals(Sexagesimal(1, 2, 3)) assert (Sexagesimal("1, 2, 3; 0, 0").minimize_precision().equals( Sexagesimal(1, 2, 3)))
def test_attribute_forwarding(self): q = Sexagesimal("1;0,1,31") * degree with pytest.raises(AttributeError): q._from_string() with pytest.raises(AttributeError): q.does_not_exist() assert q.truncate(2).value.equals(q.value.truncate(2)) assert q.left == (1, ) assert round(q, 2).value.equals(round(q.value, 2))
def test_precision_modes(self): s1 = Sexagesimal("0;30,0,0,6") s2 = Sexagesimal(2) with set_precision(pmode=PrecisionMode.MAX): self.equality(s1 + s2, Sexagesimal("2;30,0,0,6")) self.equality(s1 * s2, Sexagesimal("1;0,0,0,12")) self.equality(s1 / s2, Sexagesimal("0;15,0,0,3")) with set_precision(pmode=PrecisionMode.SCI): s1_ = s1.truncate(3) self.equality(s1_ + s2, Sexagesimal(2, remainder=Decimal("0.5"))) self.equality(s1_ * s2, Sexagesimal(1)) self.equality(s1_ / s2, Sexagesimal(0, remainder=Decimal("0.25"))) with set_precision(pmode=3): self.equality( s1 + s2, Sexagesimal((2, ), (30, 0, 0), remainder=Decimal("0.1"))) self.equality( s1 * s2, Sexagesimal((1, ), (0, 0, 0), remainder=Decimal("0.2"))) self.equality( s1 / s2, Sexagesimal((0, ), (15, 0, 0), remainder=Decimal("0.05"))) assert round(Sexagesimal(2, remainder=Decimal("0.5"))) == 3 with pytest.raises(NotImplementedError): with set_precision(pmode=PrecisionMode.FULL): s1 + s2 with pytest.raises(ValueError): with set_precision(pmode=-1): pass with pytest.raises(TypeError): with set_precision(pmode="a"): pass