static void testAll()
        {
            (int, int)mazeDimenations = (Console.WindowWidth - 8, Console.WindowHeight - 5);

            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write("generating maze...");

            var mazes = new HashSet <HashSet <Point> >();

            var thread = new Thread(
                () =>
            {
                mazes.Add(BoruvkasAlgorithm.generateMaze(mazeDimenations.Item1, mazeDimenations.Item2));
            });
            var thread2 = new Thread(
                () =>
            {
                mazes.Add(PrimsAlgorithm.generateMaze(mazeDimenations.Item1, mazeDimenations.Item2));
            });
            var thread3 = new Thread(
                () =>
            {
                mazes.Add(KruskalsAlgorithm.generateMaze(mazeDimenations.Item1, mazeDimenations.Item2));
            });
            var thread4 = new Thread(
                () =>
            {
                mazes.Add(RecursiveBacktrackerAlgorithm.generateMaze(mazeDimenations.Item1, mazeDimenations.Item2));
            });
            var thread5 = new Thread(
                () =>
            {
                mazes.Add(HuntandKill.generateMaze(mazeDimenations.Item1, mazeDimenations.Item2));
            });

            var threadList = new List <Thread>
            {
                thread,
                thread2,
                thread3,
                thread4,
                thread5
            };

            foreach (var t in threadList)
            {
                t.Start();
            }
            ;


            Console.Clear();

            if (thread.IsAlive | thread2.IsAlive | thread3.IsAlive | thread4.IsAlive)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("generating mazes...");
            }

            while (thread.IsAlive | thread2.IsAlive | thread3.IsAlive | thread4.IsAlive)
            {
                //if a maze is still being generated then don't go onto the code below
            }

            Console.SetCursorPosition(0, 0);
            Console.ForegroundColor = ConsoleColor.Red;
            Console.Write("finished generating mazes");

            foreach (HashSet <Point> maze in mazes)
            {
                setBothColours(ConsoleColor.White);
                printMaze(maze);
                Depth_first_Search.solveMaze(maze);
                Thread.Sleep(800);

                resetWindow();
            }
        }
        public static HashSet <Point> generateMaze(int width, int height)
        {
            var startV   = new Point(5, 3);
            var currentV = startV;

            var visited = RecursiveBacktrackerAlgorithm.ReturnDict(width, height);

            var maze = new HashSet <Point>();

            var mazeEntry = new Point(5, 2);

            maze.Add(mazeEntry);

            visited[startV] = true;
            maze.Add(startV);

            var r = new Random();

            while (unvisitedVertices(visited))
            {
                var availableVertices = Program.returnUnvisitedNeighbours(visited, currentV);

                if (availableVertices.Count > 0)
                {
                    var temporaryV = availableVertices[r.Next(availableVertices.Count)];

                    visited[temporaryV] = true;

                    var wallV = RecursiveBacktrackerAlgorithm.pointMidPoint(currentV, temporaryV);

                    maze.Add(wallV);
                    maze.Add(temporaryV);

                    currentV = temporaryV;
                }
                else
                {
                    foreach (Point v in visited.Keys)
                    {
                        var visitedNeighbours = PrimsAlgorithm.returnVisitedNeighbours(visited, v);
                        if (visitedNeighbours.Count == 0 || visited[v])
                        {
                            continue;
                        }
                        else
                        {
                            var newVertex = visitedNeighbours[r.Next(visitedNeighbours.Count)];

                            var wallV = RecursiveBacktrackerAlgorithm.pointMidPoint(newVertex, v);

                            maze.Add(wallV);
                            maze.Add(v);

                            currentV = v;

                            break;
                        }
                    }
                    visited[currentV] = true;
                }
            }


            var mazeExit = RecursiveBacktrackerAlgorithm.returnExit(width, height);

            maze.Add(mazeExit);

            return(maze);
        }