test_grid.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. '''
  2. ** By Cro-Ki l@b, 2017 **
  3. '''
  4. import unittest
  5. from pypog.geometry_objects import SquareGeometry, FHexGeometry, BoundingRect
  6. from pypog.grid_objects import BaseGrid, SquareGrid, FHexGrid
  7. class Test(unittest.TestCase):
  8. def assertObjEquals(self, obj1, obj2):
  9. self.assertEqual(obj1.__dict__, obj2.__dict__)
  10. def test_init(self):
  11. # square grid
  12. _ = BaseGrid(1, 1)
  13. _ = SquareGrid(1, 1)
  14. _ = FHexGrid(1, 1)
  15. self.assertObjEquals(SquareGrid(1, 1), BaseGrid.from_geometry(SquareGeometry, 1, 1))
  16. self.assertObjEquals(FHexGrid(1, 1), BaseGrid.from_geometry(FHexGeometry, 1, 1))
  17. self.assertRaises(TypeError, BaseGrid.from_geometry, int, 1, 1)
  18. def test_various(self):
  19. self.assertEqual(str(BaseGrid(1, 1)), "<BaseGrid object>")
  20. self.assertEqual(str(SquareGrid(1, 1)), "<SquareGrid object>")
  21. self.assertEqual(str(FHexGrid(1, 1)), "<FHexGrid object>")
  22. def test_properties(self):
  23. grid = BaseGrid(1, 1)
  24. self.assertEqual(grid.height, 1)
  25. self.assertEqual(grid.width, 1)
  26. grid.height = 1000
  27. self.assertEqual(grid.height, 1000)
  28. grid.width = 1000
  29. self.assertEqual(grid.width, 1000)
  30. def _set_invalid_height():
  31. grid.height = -1
  32. self.assertRaises(ValueError, _set_invalid_height)
  33. def _set_invalid_width():
  34. grid.width = -1
  35. self.assertRaises(ValueError, _set_invalid_width)
  36. self.assertEqual(grid.br, BoundingRect(0, 0, 999, 999))
  37. def test_length(self):
  38. grid = BaseGrid(1, 1)
  39. self.assertEqual(len(grid), 1)
  40. grid.width = 100
  41. grid.height = 100
  42. self.assertEqual(len(grid), 10000)
  43. def test_contains(self):
  44. grid = BaseGrid(10, 10)
  45. self.assertTrue((5, 5) in grid)
  46. self.assertFalse((11, 5) in grid)
  47. self.assertFalse((5, 11) in grid)
  48. self.assertFalse("a" in grid)
  49. def test_iter(self):
  50. grid = BaseGrid(2, 2)
  51. self.assertCountEqual([(x, y) for x, y in grid], [(0, 0), (0, 1), (1, 0), (1, 1)])
  52. def test_geometry(self):
  53. # geometrics algorithms are properly tested in tests.test_geometry
  54. square_grid = SquareGrid(10, 10)
  55. fhex_grid = FHexGrid(10, 10)
  56. args = (0, 0)
  57. self.assertEqual(square_grid.neighbors(*args), SquareGeometry.neighbors(*args))
  58. self.assertEqual(fhex_grid.neighbors(*args), FHexGeometry.neighbors(*args))
  59. args = (0, 0, 3, 3)
  60. self.assertEqual(square_grid.line(*args), SquareGeometry.line(*args))
  61. self.assertEqual(fhex_grid.line(*args), FHexGeometry.line(*args))
  62. args = (0, 0, 0, 3, 3, 3)
  63. self.assertEqual(square_grid.line3d(*args), SquareGeometry.line3d(*args))
  64. self.assertEqual(fhex_grid.line3d(*args), FHexGeometry.line3d(*args))
  65. args = (0, 0, 1)
  66. self.assertEqual(square_grid.zone(*args), SquareGeometry.zone(*args))
  67. self.assertEqual(fhex_grid.zone(*args), FHexGeometry.zone(*args))
  68. args = (0, 0, 2, 2 , 1)
  69. self.assertEqual(square_grid.triangle(*args), SquareGeometry.triangle(*args))
  70. self.assertEqual(fhex_grid.triangle(*args), FHexGeometry.triangle(*args))
  71. args = (0, 0, 0, 2, 2, 2, 1)
  72. self.assertEqual(square_grid.triangle3d(*args), SquareGeometry.triangle3d(*args))
  73. self.assertEqual(fhex_grid.triangle3d(*args), FHexGeometry.triangle3d(*args))
  74. args = (0, 0, 3, 3)
  75. self.assertEqual(square_grid.rectangle(*args), SquareGeometry.rectangle(*args))
  76. self.assertEqual(fhex_grid.rectangle(*args), FHexGeometry.rectangle(*args))
  77. args = (0, 0, 3, 3)
  78. self.assertEqual(square_grid.hollow_rectangle(*args), SquareGeometry.hollow_rectangle(*args))
  79. self.assertEqual(fhex_grid.hollow_rectangle(*args), FHexGeometry.hollow_rectangle(*args))
  80. args = ((5, 5), [(6, 6)], 1)
  81. self.assertEqual(square_grid.rotate(*args), SquareGeometry.rotate(*args))
  82. self.assertEqual(fhex_grid.rotate(*args), FHexGeometry.rotate(*args))
  83. if __name__ == "__main__":
  84. unittest.main()