コード例 #1
0
        public void TestKnownMazes()
        {
            List <string> unprocessedFiles = new List <string>();

            foreach (string filepath in Directory.EnumerateFiles(FileSystemConstants.KNOWN_SOLUTION_MAZES_FOLDER))
            {
                string filename             = Path.GetFileName(filepath);
                string nameWithoutExtension = filename.Substring(0, filename.IndexOf('.'));
                int    expectedResult;
                if (int.TryParse(nameWithoutExtension, out expectedResult))
                {
                    MazeValue[,] maze = MazeParser.Parse(filepath);
                    solver.solve(ref maze);

                    int result = CheckMaze(maze);
                    Assert.AreEqual(expectedResult, result);
                }
                else
                {
                    unprocessedFiles.Add(filename);
                }
            }

            if (unprocessedFiles.Count > 0)
            {
                Console.WriteLine("The following files were not processed");
                foreach (string filename in unprocessedFiles)
                {
                    Console.WriteLine("\t" + filename);
                }
                Assert.Fail();
            }
        }
コード例 #2
0
        public void TestGenerateInvalidImagePath()
        {
            Random rngesus    = new Random();
            string outputFile = Path.Combine(FileSystemConstants.OUTPUT_FOLDER, "tmp_invalid_path.bmp");

            File.Create(outputFile).Close();
            int width = 10;

            MazeValue[,] maze = new MazeValue[width, width];
            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    maze[i, j] = MazeValue.Wall;
                }
            }

            // Make sure the GenerateFile function returns false if file already exists
            Assert.IsFalse(MazeParser.GenerateFile(maze, outputFile));

            // Make sure the file has not changed (is empty)
            Assert.IsTrue(File.ReadAllBytes(outputFile).Length == 0);
            try
            {
                Bitmap image = new Bitmap(outputFile);
                Assert.Fail();
            }
            catch (ArgumentException)
            {
                // Pass
            }
        }
コード例 #3
0
        public void TestGenerateEmptyImage()
        {
            Random rngesus = new Random();

            MazeValue[,] maze = new MazeValue[0, 0];
            string outputFile = Path.Combine(FileSystemConstants.OUTPUT_FOLDER, "tmp_empty.bmp");

            Assert.IsFalse(MazeParser.GenerateFile(maze, outputFile));
        }
コード例 #4
0
 public void TestUnsolveableMazes()
 {
     foreach (string filename in Directory.EnumerateFiles(FileSystemConstants.UNSOLVEABLE_MAZES_FOLDER))
     {
         MazeValue[,] maze   = MazeParser.Parse(filename);
         MazeValue[,] values = DeepCopy(maze);
         Assert.IsFalse(solver.solve(ref maze));
         Assert.IsTrue(CheckEqual(values, maze));
     }
 }
コード例 #5
0
 public void TestRandomlyGeneratedLargeMaze()
 {
     for (int i = 0; i < NUM_RANDOM_TESTS; i++)
     {
         ImageSize size = ImageSize.Large;
         generator         = new MazeGenerator.MazeGenerator(size);
         MazeValue[,] maze = MazeParser.Parse(generator.Image);
         solver.solve(ref maze);
     }
 }
コード例 #6
0
 public void TestLargeMazes()
 {
     foreach (string filename in Directory.EnumerateFiles(FileSystemConstants.LARGE_MAZES_FOLDER))
     {
         MazeValue[,] maze   = MazeParser.Parse(filename);
         MazeValue[,] values = DeepCopy(maze);
         Assert.IsTrue(solver.solve(ref maze));
         CheckMaze(maze);
     }
 }
コード例 #7
0
        private void CreateAndTestRandomlyGeneratedImage(string fileExtension, bool useFuzzy = false)
        {
            int    NUM_TESTS = 10;
            Random rngesus   = new Random();

            Array mazeValues = Enum.GetValues(typeof(MazeValue));

            for (int test_num = 0; test_num < NUM_TESTS; test_num++)
            {
                int    width      = rngesus.Next(75, 100);
                int    height     = rngesus.Next(75, 100);
                string outputFile = Path.Combine(FileSystemConstants.OUTPUT_FOLDER, "tmp_" +
                                                 test_num + fileExtension);

                // Create maze
                MazeValue[,] maze = new MazeValue[width, height];
                for (int i = 0; i < width; i++)
                {
                    for (int j = 0; j < height; j++)
                    {
                        maze[i, j] = (MazeValue)rngesus.Next(0, mazeValues.Length);
                    }
                }

                Assert.IsTrue(MazeParser.GenerateFile(maze, outputFile));

                // Use the fuzzy parser on jpeg images
                MazeValue[,] mazeFromFile;
                if (!useFuzzy)
                {
                    mazeFromFile = MazeParser.Parse(outputFile, false);
                    Assert.IsTrue(CheckMazeEquality(maze, mazeFromFile));
                }
                else
                {
                    // Note: Even the fuzzy parser can't deal with the jpeg resulting image due to lossy compression
                    //mazeFromFile = MazeParser.FuzzyParse(output_file, false);
                }
            }
        }