test_triangle.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. '''
  2. Created on 22 nov. 2016
  3. @author: olinox
  4. '''
  5. import unittest
  6. from pypog import geometry
  7. class Test(unittest.TestCase):
  8. """test triangle algorithms"""
  9. def test_triangle_errors(self):
  10. for cell_shape in (geometry.HEX, geometry.SQUARE):
  11. self.assertRaises( TypeError, geometry.triangle, cell_shape, "a", 1, 1, 1, 1)
  12. self.assertRaises( TypeError, geometry.triangle, cell_shape, 1, "a", 1, 1, 1)
  13. self.assertRaises( TypeError, geometry.triangle, cell_shape, 1, 1, "a", 1, 1)
  14. self.assertRaises( TypeError, geometry.triangle, cell_shape, 1, 1, 1, "a", 1)
  15. self.assertRaises( ValueError, geometry.triangle, cell_shape, 1, 1, 1, 1, -1)
  16. self.assertRaises( TypeError, geometry.triangle3d, cell_shape, "a", 1, 1, 1, 1, 1, 1)
  17. self.assertRaises( TypeError, geometry.triangle3d, cell_shape, 1, "a", 1, 1, 1, 1, 1)
  18. self.assertRaises( TypeError, geometry.triangle3d, cell_shape, 1, 1, "a", 1, 1, 1, 1)
  19. self.assertRaises( TypeError, geometry.triangle3d, cell_shape, 1, 1, 1, "a", 1, 1, 1)
  20. self.assertRaises( TypeError, geometry.triangle3d, cell_shape, 1, 1, 1, 1, "a", 1, 1)
  21. self.assertRaises( TypeError, geometry.triangle3d, cell_shape, 1, 1, 1, 1, 1, "a", 1)
  22. self.assertRaises( ValueError, geometry.triangle3d, cell_shape, 1, 1, 1, 1, 1, 1, -1)
  23. self.assertRaises( ValueError, geometry.triangle, 0, 1, 1, 1, 1, 1)
  24. self.assertRaises( ValueError, geometry.triangle3d, 0, 1, 1, 1, 1, 1, 1, 1)
  25. def test_sq_triangle(self):
  26. """test triangle algorithms on square grid"""
  27. cell_shape = geometry.SQUARE
  28. for i in geometry.ANGLES:
  29. self.assertCountEqual(geometry.triangle(cell_shape, 0, 0, 0, 0, i), [(0,0)])
  30. # TODO: check and validate
  31. # # left to right
  32. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  33. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  34. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  35. #
  36. # # top to bottom
  37. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  38. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  39. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  40. #
  41. # # right to left
  42. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  43. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  44. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  45. #
  46. # # bottom to top
  47. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  48. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  49. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  50. #
  51. # # top left to bottom right
  52. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  53. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  54. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  55. #
  56. # # bottom right to top left
  57. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  58. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  59. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  60. #
  61. # # top right to bottom left
  62. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  63. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  64. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  65. #
  66. # # bottom right to top left
  67. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  68. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  69. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  70. def test_hex_triangle(self):
  71. """test triangle algorithms on hexagonal grid"""
  72. cell_shape = geometry.HEX
  73. for i in geometry.ANGLES:
  74. self.assertCountEqual(geometry.triangle(cell_shape, 0, 0, 0, 0, i), [(0,0)])
  75. # left to right
  76. self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [(3, 3), (3, 4), (3, 3), (4, 5), (4, 4), (4, 3), (4, 2), (4, 1), (4, 1), (3, 1), (3, 2), (2, 3)])
  77. self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [(3, 3), (4, 4), (4, 3), (4, 2), (4, 2), (3, 2), (2, 3)])
  78. self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [(3, 3), (4, 4), (4, 3), (4, 2), (4, 2), (3, 2), (2, 3)])
  79. # TODO: check and validate
  80. # # top to bottom
  81. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  82. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  83. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  84. #
  85. # right to left
  86. self.assertCountEqual(geometry.triangle(cell_shape, 4, 3, 2, 3, 1), [(3, 2), (3, 1), (3, 2), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 5), (3, 4), (3, 3), (4, 3)])
  87. self.assertCountEqual(geometry.triangle(cell_shape, 4, 3, 2, 3, 2), [(3, 2), (2, 2), (2, 3), (2, 4), (2, 4), (3, 3), (4, 3)])
  88. self.assertCountEqual(geometry.triangle(cell_shape, 4, 3, 2, 3, 3), [(3, 2), (2, 2), (2, 3), (2, 4), (2, 4), (3, 3), (4, 3)])
  89. # # bottom to top
  90. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  91. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  92. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  93. #
  94. # # top left to bottom right
  95. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  96. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  97. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  98. #
  99. # # bottom right to top left
  100. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  101. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  102. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  103. #
  104. # # top right to bottom left
  105. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  106. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  107. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  108. #
  109. # # bottom right to top left
  110. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 1), [])
  111. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 2), [])
  112. # self.assertCountEqual(geometry.triangle(cell_shape, 2, 3, 4, 3, 3), [])
  113. def test_sq_triangle_3d(self):
  114. """test triangle3d algorithms on square grid"""
  115. cell_shape = geometry.SQUARE
  116. #TODO: complete
  117. def test_hex_triangle_3d(self):
  118. """test triangle3d algorithms on hexagonal grid"""
  119. cell_shape = geometry.HEX
  120. #TODO: complete
  121. def test_errors(self):
  122. for cell_shape in (geometry.HEX, geometry.SQUARE):
  123. self.assertRaises(ValueError, geometry.triangle, cell_shape, 0, 0, 0, 0, 0)
  124. self.assertRaises(TypeError, geometry.triangle, cell_shape, "a", 0, 0, 0, 1)
  125. self.assertRaises(TypeError, geometry.triangle, cell_shape, 0, "a", 0, 0, 1)
  126. self.assertRaises(TypeError, geometry.triangle, cell_shape, 0, 0, "a", 0, 1)
  127. self.assertRaises(TypeError, geometry.triangle, cell_shape, 0, 0, 0, "a", 1)
  128. self.assertRaises(ValueError, geometry.triangle, cell_shape, 0, 0, 0, 0, "a")
  129. if __name__ == "__main__":
  130. #import sys;sys.argv = ['', 'Test.test_sq_triangle']
  131. unittest.main()