def test_equality(self): q1 = Quaternion([0, 0, 0, 1]) q2 = Quaternion([0, 0, 0, 1]) q3 = Quaternion([0, 0, 1, -1]) self.assertEqual(q1, q2) self.assertNotEqual(q1, q3) self.assertNotEqual(q2, q3)
def test_create(self): q = Quaternion() self.assertTrue(np.array_equal(q, [0., 0., 0., 1.])) self.assertEqual(q.shape, self._shape) q = Quaternion([1., 2., 3., 4.]) self.assertTrue(np.array_equal(q, [1., 2., 3., 4.])) self.assertEqual(q.shape, self._shape) q = Quaternion(Quaternion([1., 2., 3., 4.])) self.assertTrue(np.array_equal(q, [1., 2., 3., 4.])) self.assertEqual(q.shape, self._shape)
def test_normalized(self): q1 = Quaternion([1., 2., 3., 4.]) self.assertFalse(np.allclose(q1.length, 1.)) q2 = q1.normalized self.assertFalse(np.allclose(q1.length, 1.)) self.assertTrue(np.allclose(q2.length, 1.))
def test_operators_quaternion(self): q1 = Quaternion() q2 = Quaternion.from_x_rotation(0.5) # add self.assertRaises(ValueError, lambda: q1 + q2) # subtract # we had to add this to enable np.array_equal to work # as it uses subtraction #self.assertRaises(ValueError, lambda: q1 - q2) # multiply self.assertTrue( np.array_equal( q1 * q2, quaternion.cross(quaternion.create(), quaternion.create_from_x_rotation(0.5)))) # divide self.assertRaises(ValueError, lambda: q1 / q2) # or self.assertTrue( np.array_equal( q1 | q2, quaternion.dot(quaternion.create(), quaternion.create_from_x_rotation(0.5)))) # inverse self.assertTrue( np.array_equal( ~q2, quaternion.conjugate(quaternion.create_from_x_rotation(0.5))))
def test_create_from_quaternion(self): q = Quaternion() m = Matrix44.from_quaternion(q) self.assertTrue(np.array_equal(m, np.eye(4))) self.assertTrue(np.array_equal(m.quaternion, q)) m = Matrix44(q) self.assertTrue(np.array_equal(m, np.eye(4)))
def test_operators_matrix44(self): q = Quaternion() m = Matrix44.from_x_rotation(0.5) # add self.assertRaises(ValueError, lambda: q + m) # subtract self.assertRaises(ValueError, lambda: q - m) # multiply self.assertTrue(np.array_equal(q * m, quaternion.cross(quaternion.create(), quaternion.create_from_matrix(matrix44.create_from_x_rotation(0.5))))) # divide self.assertRaises(ValueError, lambda: q / m)
def test_accessors(self): q = Quaternion(np.arange(self._size)) self.assertTrue(np.array_equal(q.xy, [0, 1])) self.assertTrue(np.array_equal(q.xyz, [0, 1, 2])) self.assertTrue(np.array_equal(q.xyzw, [0, 1, 2, 3])) self.assertTrue(np.array_equal(q.xz, [0, 2])) self.assertTrue(np.array_equal(q.xyz, [0, 1, 2])) self.assertTrue(np.array_equal(q.xyw, [0, 1, 3])) self.assertTrue(np.array_equal(q.xw, [0, 3])) self.assertEqual(q.x, 0) self.assertEqual(q.y, 1) self.assertEqual(q.z, 2) self.assertEqual(q.w, 3) q.x = 1 self.assertEqual(q.x, 1) self.assertEqual(q[0], 1) q.x += 1 self.assertEqual(q.x, 2) self.assertEqual(q[0], 2)
def test_is_identity(self): self.assertTrue(quaternion.is_identity(Quaternion())) self.assertTrue(quaternion.is_identity(Quaternion([0., 0., 0., 1.]))) self.assertFalse(quaternion.is_identity(Quaternion([1., 0., 0., 0.])))
def test_normalize(self): q = Quaternion([1., 2., 3., 4.]) self.assertFalse(np.allclose(q.length, 1.)) q.normalize() self.assertTrue(np.allclose(q.length, 1.))