def test_generate_maze_full_icosphere(self):
        bm = bmesh.new()
        bmesh.ops.create_icosphere(bm, subdivisions=3, diameter=5.0)
        for face in bm.faces:
            face.select = True
        nverts = len(bm.verts)
        bm, maze_links, maze_verts = mm.generate_maze(bm, mm.MAZE_PARAMS)

        self.assertEqual(len(maze_links), 323 - nverts)
        self.assertEqual(len(maze_verts), nverts)
        self.assertEqual(sum(face.select for face in bm.faces), 323)
        bm.free()
    def test_generate_maze_full_grid(self):
        """
        generate full maze on 10 x 10 grid
        """
        bm = bmesh.new()
        bmesh.ops.create_grid(bm, x_segments=10, y_segments=10, size=1.0)
        for face in bm.faces:
            face.select = True

        bm, maze_links, maze_verts = mm.generate_maze(bm, mm.MAZE_PARAMS)

        self.assertEqual(len(maze_links), 63)
        self.assertEqual(len(maze_verts), 64)
        # also count of selected faces should == 63+64
        self.assertEqual(sum(face.select for face in bm.faces), 127)
        bm.free()
    def test_generate_maze_loops_grid(self):
        """
        select some edges that don't select full faces
        but could form a maze
        """
        bm = bmesh.new()
        bmesh.ops.create_grid(bm, x_segments=10, y_segments=10, size=1.0)

        bm = make_edge_selection_grid(bm)
        nverts = sum(vert.select for vert in bm.verts)

        maze_params = mm.MAZE_PARAMS.copy()
        maze_params['boundary_type'] = 1
        maze_params['offset'] = 0.0
        bm, maze_links, maze_verts = mm.generate_maze(bm, maze_params)

        self.assertEqual(len(maze_links), 63)
        self.assertEqual(len(maze_verts), nverts)
        self.assertEqual(sum(edge.select for edge in bm.edges),
                         len(maze_links))
        bm.free()