import unittest
from pyplanetarium import Transform
class TransformCase(unittest.TestCase):
def test_init(self) -> None:
tr1 = Transform()
self.assertIsInstance(tr1, Transform)
self.assertEqual(str(tr1), "[[1, 0, 0], [0, 1, 0]]")
self.assertEqual(
repr(tr1),
"Transform { xx: 1.0, xy: 0.0, yx: 0.0, yy: 1.0, tx: 0.0, ty: 0.0 }",
)
tr2 = tr1.scale(3.5)
self.assertNotEqual(tr1, tr2)
tr3 = Transform(3.5)
self.assertEqual(str(tr3), "[[3.5, 0, 0], [0, 3.5, 0]]")
self.assertEqual(
repr(tr3),
"Transform { xx: 3.5, xy: 0.0, yx: 0.0, yy: 3.5, tx: 0.0, ty: 0.0 }",
)
tr4 = Transform((3.5, 2.5))
self.assertEqual(str(tr4), "[[1, 0, 3.5], [0, 1, 2.5]]")
self.assertEqual(
repr(tr4),
"Transform { xx: 1.0, xy: 0.0, yx: 0.0, yy: 1.0, tx: 3.5, ty: 2.5 }",
)
tr5 = Transform([[3.5, 0.5], [-0.5, 2.5]])
self.assertEqual(str(tr5), "[[3.5, 0.5, 0], [-0.5, 2.5, 0]]")
tr6 = Transform([[3.5, 0.5, 5.25], [-0.5, 2.5, -14.75]])
self.assertEqual(str(tr6), "[[3.5, 0.5, 5.25], [-0.5, 2.5, -14.75]]")
tr7 = Transform(3)
self.assertIsInstance(tr7, Transform)
tr8 = Transform((3, 2))
self.assertIsInstance(tr8, Transform)
tr9 = Transform([[3, 0], [0, 2]])
self.assertIsInstance(tr9, Transform)
tr10 = Transform([[3, 0, 10], [0, 2, 5]])
self.assertIsInstance(tr10, Transform)
def test_init_err(self) -> None:
with self.assertRaises(TypeError):
Transform({})
with self.assertRaises(TypeError):
Transform("1")
with self.assertRaises(TypeError):
Transform((1,))
with self.assertRaises(TypeError):
Transform([])
with self.assertRaises(TypeError):
Transform([1])
with self.assertRaises(TypeError):
Transform([1, 2])
with self.assertRaises(TypeError):
Transform([1, 2, 3])
with self.assertRaises(TypeError):
Transform([[1, 2], 2])
with self.assertRaises(TypeError):
Transform([[1, 2], [2]])
with self.assertRaises(TypeError):
Transform([[1, 2], [2, 3, 4]])
with self.assertRaises(TypeError):
Transform([[1, 2], [2, 3], 4])
with self.assertRaises(TypeError):
Transform([[1, 2, 3, 4], [2, 3, 4]])
def test_ops(self) -> None:
tr1 = Transform()
self.assertEqual(str(tr1), "[[1, 0, 0], [0, 1, 0]]")
tr2 = tr1.scale(2.5)
self.assertEqual(str(tr2), "[[2.5, 0, 0], [0, 2.5, 0]]")
tr3 = tr2.translate((5.5, -4.25))
self.assertEqual(str(tr3), "[[2.5, 0, 5.5], [0, 2.5, -4.25]]")
tr4 = tr3.stretch(2.0, 1.5)
self.assertEqual(str(tr4), "[[5, 0, 11], [0, 3.75, -6.375]]")
tr5 = Transform((5.0, -10.0))
tr6 = tr5.scale(2.0).rotate(45)
tr7 = tr6.compose(tr4).translate((10, -10))
tr8 = tr7.compose(tr3).compose(Transform())
self.assertIsInstance(tr8, Transform)
if __name__ == "__main__":
unittest.main()