Ejemplo n.º 1
0
class MeshTest(unittest.TestCase):
    def setUp(self):
        import cv2
        img = cv2.imread('../images/lion.jpg')
        self.N = 60
        self.mesh = Mesh(img, self.N)
        self.mesh.delaunay()

    def test_remove_point(self):
        mesh = self.mesh
        p = mesh.points[50]

        self.assertTrue(p in mesh.points)
        mesh.remove_point(p)
        self.assertTrue(p not in mesh.points)
        self.assertEquals(len(mesh.points), self.N - 1)

    def test_remove_point_at(self):
        mesh = self.mesh
        k = 50
        p = mesh.points[k]

        point_num = len(mesh.points)
        self.assertIn(p, mesh.points)
        mesh.remove_point_at(k)
        self.assertNotIn(p, mesh.points)

        self.assertEquals(len(mesh.points), point_num - 1)

    def test_add_point(self):
        new_p = Point(100, 100)
        point_num = len(self.mesh.points)

        self.mesh.add_point(new_p)
        self.assertIn(new_p, self.mesh.points)
        self.assertEquals(len(self.mesh.points), point_num + 1)

    def test_split_triangle(self):
        mesh = self.mesh

        # TODO parametrize test case
        triangle = mesh.triangles[-1]

        mesh.split_triangle(triangle)
        self.assertTrue(trimath.in_triangle(mesh.points[-1]._position, triangle))

    def test_get_existing_result(self):
        mesh = self.mesh
        self.fake_colorize()
        c = mesh.nptriangle2result(mesh.triangles[-1])
        testing.assert_array_equal(c, mesh.triangles[-1])

    def test_get_nonexistent_result(self):
        mesh = self.mesh
        self.assertRaises(KeyError, mesh.nptriangle2result, mesh.triangles[-1])

    def fake_colorize(self):
        for tr in self.mesh.triangles:
            self.mesh._triangle_cache.set(tr, tr)  # this way all have custom values
        self.mesh._triangle_stack.clear()

    def test_process_existing_triangle(self):
        mesh = self.mesh
        self.fake_colorize()
        c = mesh.process_triangle(mesh.triangles[-1])
        testing.assert_array_equal(c, mesh.triangles[-1])

    def test_proces_new_triangle(self):
        mesh = self.mesh
        mesh._triangle_stack.clear()
        mesh.process_triangle(mesh.triangles[-1])
        self.assertEquals(1, len(mesh._triangle_stack))
        testing.assert_array_equal(mesh.triangles[-1], mesh._triangle_stack[0])

    def test_delaunay(self):
        mesh = self.mesh
        testing.assert_array_equal(mesh.triangles, mesh._triangle_stack)

    def test_delaunay_cache(self):
        mesh = self.mesh
        self.assertEquals(len(mesh._triangle_cache.cache), 0)

    def test_colorize(self):
        mesh = self.mesh
        mesh.colorize_stack()

        self.assertEquals(len(mesh._triangle_stack), 0)
        self.assertEquals(len(mesh._triangle_cache.cache), len(mesh.triangles))