]> gitweb.michael.orlitzky.com - dead/census-tools.git/blobdiff - src/Tests/Unit/GeometryTest.py
Added the Geometry module and its tests.
[dead/census-tools.git] / src / Tests / Unit / GeometryTest.py
diff --git a/src/Tests/Unit/GeometryTest.py b/src/Tests/Unit/GeometryTest.py
new file mode 100644 (file)
index 0000000..49fa113
--- /dev/null
@@ -0,0 +1,98 @@
+import unittest
+
+import Tests.Fixtures
+from Geometry import *
+
+
+class TwoVectorTest(unittest.TestCase):
+
+    def testAdd(self):
+        """
+        Add a couple of test vectors and check that they sum
+        correctly.
+        """        
+        v1 = TwoVector(0,0)
+        v2 = TwoVector(100, -19)
+        self.assertTrue(v2 == v1.add(v2))
+
+        v1 = TwoVector(23, -10)
+        v2 = TwoVector(-23, 10)
+        zero = TwoVector(0, 0)
+        self.assertTrue(v1.add(v2) == zero)
+
+        
+    def testDotProduct(self):
+        """
+        The dot product of a vector v with a vector to which it's
+        perpendicular, v_perp, should always be zero.
+
+        The dot product of any vector with the zero vector should be
+        zero.
+        """        
+        v1 = TwoVector(235, -2352)
+        v2 = TwoVector(9382335.024, -235235.1242)
+        self.assertEqual(0, v1.dot_product(v1.perpendicular()))
+        self.assertEqual(0, v2.dot_product(v2.perpendicular()))
+
+        zero = TwoVector(0, 0)
+        self.assertEqual(0, v1.dot_product(zero))
+
+
+
+class PolygonTest(unittest.TestCase):
+
+    def testEquals(self):
+        """
+        We defined our own __eq__ method; make sure it works.
+        """
+        unit_square1 = Polygon([ (0,0), (1,0), (1,1), (0,1) ])
+        unit_square2 = Polygon([ (0,0), (1,0), (1,1), (0,1) ])
+        self.assertTrue(unit_square1 == unit_square2)
+
+        hexagon = Polygon([ (1,0),
+                            (0.5, sqrt(3)/2.0),
+                            (-0.5, sqrt(3)/2.0),
+                            (-1, 0),
+                            (-0.5, -sqrt(3)/2.0),
+                            (0.5, -sqrt(3)/2.0) ])
+
+        self.assertFalse(unit_square1 == hexagon)
+
+        
+    def testDrag(self):
+        """
+        Drag the unit square 5 units to the right.
+        """
+        unit_square = Polygon([ (0,0), (1,0), (1,1), (0,1) ])
+        v = TwoVector(5,0)
+        result = unit_square.drag(v)
+        expected_result = Polygon([ (0,0), (6,0), (6,1), (0,1) ])
+        self.assertTrue(result == expected_result)
+
+
+
+    def testDragVertices(self):
+        """
+        A diamond shape has nice drag vertices which we can calculate
+        by hand.        
+        """
+        diamond = Polygon([ (0,1), (-1,0), (0,-1), (1,0) ])
+
+        # First, we drag it to the right along the x-axis.
+        drag_vector = TwoVector(5,0)
+        dvs = set(diamond.drag_vertices(drag_vector))
+        expected_dvs = set([(0,1), (0,-1)])
+        self.assertTrue(dvs == expected_dvs)
+
+        # Now, drag it up.
+        drag_vector = TwoVector(0,5)
+        dvs = set(diamond.drag_vertices(drag_vector))
+        expected_dvs = set([(1,0), (-1,0)])
+        self.assertTrue(dvs == expected_dvs)
+
+        
+def suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(TwoVectorTest))
+    suite.addTest(unittest.makeSuite(PolygonTest))
+    return suite