public void CheckSymmetry(int width, int height, int left, int top, int rw, int rh) { var mazeGenerator = new MazeGeneratorMock(); var field = mazeGenerator.CreateFieldWrapper(width, height); var seed = DateTime.Now.Millisecond; TestContext.WriteLine($"seed: {seed}"); var winZone = new RectZone(left, top, rw, rh); mazeGenerator.GenerateWaysWrapper(field, winZone, new Random(seed)); for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { Wall cell = field[y, x]; if (winZone.Contains(new Point(x, y)) == false) { Assert.That(cell, Is.Not.EqualTo(Wall.Full)); } Wall symmetryCell = field[height - y - 1, width - x - 1]; if ((cell & Wall.Top) == Wall.Top && (symmetryCell & Wall.Bottom) == Wall.Bottom) { Assert.That(symmetryCell & Wall.Bottom, Is.EqualTo(Wall.Bottom)); } else { Assert.That(symmetryCell & Wall.Bottom, Is.EqualTo(Wall.None)); } if ((cell & Wall.Bottom) == Wall.Bottom) { Assert.That(symmetryCell & Wall.Top, Is.EqualTo(Wall.Top)); } else { Assert.That(symmetryCell & Wall.Top, Is.EqualTo(Wall.None)); } if ((cell & Wall.Left) == Wall.Left) { Assert.That(symmetryCell & Wall.Right, Is.EqualTo(Wall.Right)); } else { Assert.That(symmetryCell & Wall.Right, Is.EqualTo(Wall.None)); } if ((cell & Wall.Right) == Wall.Right) { Assert.That(symmetryCell & Wall.Left, Is.EqualTo(Wall.Left)); } else { Assert.That(symmetryCell & Wall.Left, Is.EqualTo(Wall.None)); } } } }