diff --git a/src/fancymath/vector.py b/src/fancymath/vector.py index 6c10466..c027e5b 100644 --- a/src/fancymath/vector.py +++ b/src/fancymath/vector.py @@ -36,6 +36,14 @@ class Vector(object): z = self.z + other.z return self.__class__(x, y, z) + def __mul__(self, other): + if not isinstance(other, Vector): + return NotImplemented + x = self.y * other.z - self.z * other.y + y = self.z * other.x - self.x * other.z + z = self.x * other.y - self.y * other.x + return self.__class__(x, y, z) + if __name__ == "__main__": v1 = Vector(3, 4, 0) diff --git a/test/test_vector.py b/test/test_vector.py index aeb002f..5238172 100644 --- a/test/test_vector.py +++ b/test/test_vector.py @@ -4,6 +4,28 @@ from fancymath.vector import Vector class TestVector(unittest.TestCase): + def test_cross_product(self): + # given + v1 = Vector(1, 2, 3) + v2 = Vector(3, 2, 1) + + # when + v3 = v1 * v2 + + # then + self.assertIsInstance(v3, Vector) + self.assertEqual(v3.x, -4) + self.assertEqual(v3.y, 8) + self.assertEqual(v3.z, -4) + + def test_cross_product_failure(self): + v1 = Vector(1, 2, 3) + v2 = (3, 2, 1) + + with self.assertRaises(TypeError): + v1 * v2 + + def test_add_vector(self): v1 = Vector(1, 2, 3) v2 = Vector(-3, -2, -1) @@ -17,4 +39,17 @@ class TestVector(unittest.TestCase): v3 = Vector(1, -2, 2) self.assertEqual(v1.abs(), 0) self.assertEqual(v2.abs(), 3) - self.assertEqual(v2.abs(), v3.abs()) \ No newline at end of file + self.assertEqual(v2.abs(), v3.abs()) + + def test_dot_failure(self): + with self.assertRaises(ValueError): + v1 = Vector(1, 2, 3) + v1.dot(3) + + def test_dot_product(self): + v1 = Vector(1, 2, 3) + v2 = Vector(-3, -2, -1) + v3 = v1.dot(v2) + self.assertEqual(v3,v1.x * v2.x + v1.y * v2.y + v1.z * v2.z) + vzero = Vector(0, 0, 0) + self.assertEqual(v1.dot(vzero),0)