test_line.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. '''
  2. Created on 20 nov. 2016
  3. @author: olinox
  4. '''
  5. import unittest
  6. from pypog import geometry
  7. class Test(unittest.TestCase):
  8. """test line algorithms"""
  9. def test_line_errors(self):
  10. self.assertRaises( TypeError, geometry.line2d, geometry.HEX, "a", 1, 1, 1)
  11. self.assertRaises( TypeError, geometry.line2d, geometry.HEX, 1, "a", 1, 1)
  12. self.assertRaises( TypeError, geometry.line2d, geometry.HEX, 1, 1, "a", 1)
  13. self.assertRaises( TypeError, geometry.line2d, geometry.HEX, 1, 1, 1, "a")
  14. self.assertRaises( ValueError, geometry.line2d, 0, 1, 1, 1, 1)
  15. self.assertRaises( TypeError, geometry.line3d, geometry.HEX, 1, 1, "a", 1, 1, 1)
  16. self.assertRaises( TypeError, geometry.line3d, geometry.HEX, 1, 1, 1, 1, 1, "a")
  17. def test_line(self):
  18. """ 2d line on square or hexagonal grid """
  19. cell_shape = geometry.HEX
  20. attended = {
  21. geometry.HEX: {
  22. (1,1,1,1): [(1,1)],
  23. (0,0,1,1): [(0,0), (0,1), (1,1)],
  24. (1,1,0,0): [(1,1), (0,1), (0,0)],
  25. (0,0,7,3): [(0,0), (1,0), (2,1), (3,1), (4,2), (5,2), (6,3), (7,3)],
  26. (7,3,0,0): [(7,3), (6,3), (5,2), (4,2), (3,1), (2,1), (1,0), (0,0)],
  27. (4,3,0,3): [(4,3), (3,2), (2,3), (1,2), (0,3)],
  28. (0,3,4,3): [(0,3), (1,2), (2,3), (3,2), (4,3)],
  29. (3,0,3,3): [(3,0), (3,1), (3,2), (3,3)],
  30. (3,3,3,0): [(3,3), (3,2), (3,1), (3,0)]
  31. },
  32. geometry.SQUARE: {
  33. (1,1,1,1): [(1,1)],
  34. (0,0,0,1): [(0,0), (0,1)],
  35. (0,1,0,0): [(0,1), (0,0)],
  36. (0,0,1,1): [(0,0), (1,1)],
  37. (1,1,0,0): [(1,1), (0,0)],
  38. (0,0,7,3): [(0,0), (1,0), (2,1), (3,1), (4,2), (5,2), (6,3), (7,3)],
  39. (7,3,0,0): [(7,3), (6,3), (5,2), (4,2), (3,1), (2,1), (1,0), (0,0)],
  40. (4,3,0,3): [(4,3), (3,3), (2,3), (1,3), (0,3)],
  41. (0,3,4,3): [(0,3), (1,3), (2,3), (3,3), (4,3)],
  42. (3,0,3,3): [(3,0), (3,1), (3,2), (3,3)],
  43. (3,3,3,0): [(3,3), (3,2), (3,1), (3,0)]
  44. }
  45. }
  46. for cell_shape, tests in attended.items():
  47. for args, result in tests.items():
  48. line = geometry.line2d(cell_shape, *args)
  49. self.assertEqual(line, result)
  50. def test_line_3d(self):
  51. """ 3d line on hexagonal and square grid """
  52. cell_shape = geometry.HEX
  53. attended = {
  54. geometry.HEX: {
  55. (1,1,1,1,1,1) : [(1,1,1)],
  56. (1,1,0,1,1,1) : [(1,1,0), (1,1,1)],
  57. (0,0,0,1,1,1) : [(0,0,0), (0,1,0), (1,1,1)],
  58. (0,0,0,7,3,7) : [(0,0,0), (1,0,1), (2,1,2), (3,1,3), (4,2,4), (5,2,5), (6,3,6), (7,3,7)],
  59. (4,3,10,0,3,3): [(4,3,10), (3,2,9), (3,2,8), (2,3,7), (2,3,6), (1,2,5), (1,2,4), (0,3,3)],
  60. (3,0,0,3,3,0) : [(3,0,0), (3,1,0), (3,2,0), (3,3,0)]
  61. },
  62. geometry.SQUARE: {
  63. (1,1,1,1,1,1) : [(1,1,1)],
  64. (1,1,0,1,1,1) : [(1,1,0), (1,1,1)],
  65. (0,0,0,1,1,1) : [(0,0,0), (1,1,1)],
  66. (0,0,0,7,3,7) : [(0,0,0), (1,0,1), (2,1,2), (3,1,3), (4,2,4), (5,2,5), (6,3,6), (7,3,7)],
  67. (4,3,10,0,3,3): [(4,3,10), (3,3,9), (3,3,8), (2,3,7), (2,3,6), (1,3,5), (1,3,4), (0,3,3)],
  68. (3,0,0,3,3,0) : [(3,0,0), (3,1,0), (3,2,0), (3,3,0)]
  69. }
  70. }
  71. for cell_shape, tests in attended.items():
  72. for args, result in tests.items():
  73. line = geometry.line3d(cell_shape, *args)
  74. self.assertEqual(line, result)
  75. if __name__ == "__main__":
  76. unittest.main()