| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- '''
- Tests for 'geometry' module
- ** By Cro-Ki l@b, 2017 **
- '''
- import unittest
- from pypog import geometry
- class Test(unittest.TestCase):
- # # neighbours
- def test_neighbours(self):
- """ test for geometry.neighbours """
- for coord in ((0, 0), (-10, -10), (10, 10)):
- x, y = coord
- self.assertEqual(geometry.neighbours(geometry.FLAT_HEX, x, y), geometry.fhex2_neighbours(x, y))
- self.assertEqual(geometry.neighbours(geometry.SQUARE, x, y), geometry.squ2_neighbours(x, y))
- def test_fhex2_neighbours(self):
- """ test for geometry.fhex2_neighbours """
- self.assertCountEqual(geometry.fhex2_neighbours(3, 3), [(3, 2), (4, 3), (4, 4), (3, 4), (2, 4), (2, 3)])
- self.assertCountEqual(geometry.fhex2_neighbours(4, 4), [(4, 3), (5, 3), (5, 4), (4, 5), (3, 4), (3, 3)])
- def test_squ2_neighbours(self):
- """ test for geometry.squ2_neighbours """
- self.assertCountEqual(geometry.squ2_neighbours(3, 3), [(2, 3), (2, 2), (3, 2), (4, 2), (4, 3), (4, 4), (3, 4), (2, 4)])
- def test_zone(self):
- """ test for geometry.zone """
- self.assertRaises(TypeError, geometry.zone, 5, 0, 0, "a")
- self.assertRaises(TypeError, geometry.zone, 5, "a", 0, 1)
- self.assertRaises(TypeError, geometry.zone, 5, 0, "a", 1)
- self.assertRaises(ValueError, geometry.zone, 5, 0, 0, -1)
- self.assertRaises(ValueError, geometry.zone, -1, 0, 0, 1)
- self.assertRaises(ValueError, geometry.zone, "a", 0, 0, 1)
- self.assertCountEqual(geometry.zone(geometry.FLAT_HEX, 3, 3, 0), [(3, 3)])
- self.assertCountEqual(geometry.zone(geometry.FLAT_HEX, 3, 3, 1), [(3, 2), (2, 3), (3, 3), (4, 3), (4, 4), (3, 4), (2, 4)])
- self.assertCountEqual(geometry.zone(geometry.FLAT_HEX, 3, 3, 2), [(3, 2), (1, 3), (5, 4), (4, 5), (1, 4), (2, 3), (4, 2), \
- (2, 5), (5, 3), (1, 2), (3, 5), (3, 3), (4, 4), (3, 1), \
- (4, 3), (2, 2), (3, 4), (2, 4), (5, 2)])
- self.assertCountEqual(geometry.zone(geometry.SQUARE, 3, 3, 0), [(3, 3)])
- self.assertCountEqual(geometry.zone(geometry.SQUARE, 3, 3, 1), [(3, 2), (3, 3), (4, 4), (2, 3), (4, 3), (2, 2), (4, 2), (3, 4), (2, 4)])
- self.assertCountEqual(geometry.zone(geometry.SQUARE, 3, 3, 2), [(2, 4), (3, 2), (5, 4), (1, 3), (4, 5), (2, 1), (1, 4), (2, 3), (4, 2), \
- (5, 1), (2, 5), (3, 5), (5, 3), (1, 2), (3, 3), (5, 5), (4, 4), (3, 1), \
- (1, 5), (4, 3), (2, 2), (4, 1), (5, 2), (3, 4), (1, 1)])
- # # lines
- def test_line2d(self):
- """ test for geometry.line """
- self.assertRaises(TypeError, geometry.line, geometry.FLAT_HEX, "a", 1, 1, 1)
- self.assertRaises(TypeError, geometry.line, geometry.FLAT_HEX, 1, "a", 1, 1)
- self.assertRaises(TypeError, geometry.line, geometry.FLAT_HEX, 1, 1, "a", 1)
- self.assertRaises(TypeError, geometry.line, geometry.FLAT_HEX, 1, 1, 1, "a")
- self.assertRaises(ValueError, geometry.line, 0, 1, 1, 1, 1)
- attended = {
- geometry.FLAT_HEX: {
- (1, 1, 1, 1): [(1, 1)],
- (0, 0, 1, 1): [(0, 0), (0, 1), (1, 1)],
- (1, 1, 0, 0): [(1, 1), (0, 1), (0, 0)],
- (0, 0, 7, 3): [(0, 0), (1, 0), (2, 1), (3, 1), (4, 2), (5, 2), (6, 3), (7, 3)],
- (7, 3, 0, 0): [(7, 3), (6, 3), (5, 2), (4, 2), (3, 1), (2, 1), (1, 0), (0, 0)],
- (4, 3, 0, 3): [(4, 3), (3, 2), (2, 3), (1, 2), (0, 3)],
- (0, 3, 4, 3): [(0, 3), (1, 2), (2, 3), (3, 2), (4, 3)],
- (3, 0, 3, 3): [(3, 0), (3, 1), (3, 2), (3, 3)],
- (3, 3, 3, 0): [(3, 3), (3, 2), (3, 1), (3, 0)]
- },
- geometry.SQUARE: {
- (1, 1, 1, 1): [(1, 1)],
- (0, 0, 0, 1): [(0, 0), (0, 1)],
- (0, 1, 0, 0): [(0, 1), (0, 0)],
- (0, 0, 1, 1): [(0, 0), (1, 1)],
- (1, 1, 0, 0): [(1, 1), (0, 0)],
- (0, 0, 7, 3): [(0, 0), (1, 0), (2, 1), (3, 1), (4, 2), (5, 2), (6, 3), (7, 3)],
- (7, 3, 0, 0): [(7, 3), (6, 3), (5, 2), (4, 2), (3, 1), (2, 1), (1, 0), (0, 0)],
- (4, 3, 0, 3): [(4, 3), (3, 3), (2, 3), (1, 3), (0, 3)],
- (0, 3, 4, 3): [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3)],
- (3, 0, 3, 3): [(3, 0), (3, 1), (3, 2), (3, 3)],
- (3, 3, 3, 0): [(3, 3), (3, 2), (3, 1), (3, 0)]
- }
- }
- for cell_shape, tests in attended.items():
- for args, attended in tests.items():
- result = geometry.line(cell_shape, *args)
- self.assertEqual(result, attended)
- def test_line3d(self):
- """ test for geometry.line3d """
- self.assertRaises(TypeError, geometry.line3d, geometry.FLAT_HEX, 1, 1, "a", 1, 1, 1)
- self.assertRaises(TypeError, geometry.line3d, geometry.FLAT_HEX, 1, 1, 1, 1, 1, "a")
- attended = {
- geometry.FLAT_HEX: {
- (1, 1, 1, 1, 1, 1) : [(1, 1, 1)],
- (1, 1, 0, 1, 1, 1) : [(1, 1, 0), (1, 1, 1)],
- (0, 0, 0, 1, 1, 1) : [(0, 0, 0), (0, 1, 0), (1, 1, 1)],
- (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)],
- (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)],
- (3, 0, 0, 3, 3, 0) : [(3, 0, 0), (3, 1, 0), (3, 2, 0), (3, 3, 0)]
- },
- geometry.SQUARE: {
- (1, 1, 1, 1, 1, 1) : [(1, 1, 1)],
- (1, 1, 0, 1, 1, 1) : [(1, 1, 0), (1, 1, 1)],
- (0, 0, 0, 1, 1, 1) : [(0, 0, 0), (1, 1, 1)],
- (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)],
- (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)],
- (3, 0, 0, 3, 3, 0) : [(3, 0, 0), (3, 1, 0), (3, 2, 0), (3, 3, 0)]
- }
- }
- for cell_shape, tests in attended.items():
- for args, result in tests.items():
- line = geometry.line3d(cell_shape, *args)
- self.assertEqual(line, result)
- def test_squ2_line(self):
- """ test for geometry.squ2_line """
- pass
- def test_fhex2_line(self):
- """ test for geometry.fhex2_line """
- pass
- # # Rectangles
- def test_rectangle(self):
- """ test for geometry.rectangle """
- self.assertRaises(TypeError, geometry.rectangle, "a", 1, 1, 1)
- self.assertRaises(TypeError, geometry.rectangle, 1, "a", 1, 1)
- self.assertRaises(TypeError, geometry.rectangle, 1, 1, "a", 1)
- self.assertRaises(TypeError, geometry.rectangle, 1, 1, 1, "a")
- self.assertEquals(geometry.rectangle(0, 0, 0, 0), [(0, 0)])
- self.assertCountEqual(geometry.rectangle(0, 0, 1, 1), [(0, 0), (0, 1), (1, 1), (1, 0)])
- self.assertCountEqual(geometry.rectangle(1, 1, 0, 0), [(0, 0), (0, 1), (1, 1), (1, 0)])
- self.assertCountEqual(geometry.rectangle(4, 3, 7, 5), [(4, 3), (4, 4), (4, 5), (5, 5), (6, 5), (7, 5), (7, 4), (7, 3), (6, 3), (5, 3), (6, 4), (5, 4)])
- self.assertCountEqual(geometry.rectangle(3, 3, 9, 9), [(3, 3), (9, 9), (9, 8), (9, 7), (9, 5), (9, 6), (9, 4), (9, 3), (8, 4), (7, 3), (6, 4), (4, 4),
- (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 9), (5, 9), (6, 9), (7, 9), (8, 9), (4, 5),
- (5, 4), (6, 5), (7, 4), (8, 5), (4, 6), (5, 5), (6, 6), (7, 5), (8, 6), (4, 7), (5, 6), (6, 7),
- (7, 6), (8, 7), (4, 8), (5, 7), (6, 8), (7, 7), (8, 8), (7, 8), (5, 8), (8, 3), (6, 3), (4, 3),
- (5, 3)])
- def test_hollow_rectangle(self):
- """ test for geometry.hollow_rectangle """
- self.assertRaises(TypeError, geometry.hollow_rectangle, "a", 1, 1, 1)
- self.assertRaises(TypeError, geometry.hollow_rectangle, 1, "a", 1, 1)
- self.assertRaises(TypeError, geometry.hollow_rectangle, 1, 1, "a", 1)
- self.assertRaises(TypeError, geometry.hollow_rectangle, 1, 1, 1, "a")
- self.assertEquals(geometry.hollow_rectangle(0, 0, 0, 0), [(0, 0)])
- self.assertCountEqual(geometry.hollow_rectangle(0, 0, 1, 1), [(0, 0), (0, 1), (1, 1), (1, 0)])
- self.assertCountEqual(geometry.hollow_rectangle(1, 1, 0, 0), [(0, 0), (0, 1), (1, 1), (1, 0)])
- self.assertCountEqual(geometry.hollow_rectangle(4, 3, 7, 5), [(4, 3), (4, 4), (4, 5), (5, 5), (6, 5), (7, 5), (7, 4), (7, 3), (6, 3), (5, 3)])
- self.assertCountEqual(geometry.hollow_rectangle(3, 3, 9, 9), [(3, 3), (9, 9), (9, 8), (9, 7), (9, 5), (9, 6), (9, 4), (9, 3), (7, 3), (3, 4),
- (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 9), (5, 9), (6, 9), (7, 9), (8, 9),
- (8, 3), (6, 3), (4, 3), (5, 3)])
- # # Triangles
- def test_triangle(self):
- """ test for geometry.triangle """
- for cell_shape in (geometry.FLAT_HEX, geometry.SQUARE):
- self.assertRaises(TypeError, geometry.triangle, cell_shape, "a", 1, 1, 1, 1)
- self.assertRaises(TypeError, geometry.triangle, cell_shape, 1, "a", 1, 1, 1)
- self.assertRaises(TypeError, geometry.triangle, cell_shape, 1, 1, "a", 1, 1)
- self.assertRaises(TypeError, geometry.triangle, cell_shape, 1, 1, 1, "a", 1)
- self.assertRaises(ValueError, geometry.triangle, cell_shape, 1, 1, 1, 1, -1)
- self.assertRaises(ValueError, geometry.triangle, 0, 1, 1, 1, 1, 1)
- for i in geometry.ANGLES:
- self.assertCountEqual(geometry.triangle(cell_shape, 0, 0, 0, 0, i), [(0, 0)])
- def test_triangle3d(self):
- """ test for geometry.triangle3d """
- for cell_shape in (geometry.FLAT_HEX, geometry.SQUARE):
- self.assertRaises(TypeError, geometry.triangle3d, cell_shape, "a", 1, 1, 1, 1, 1, 1)
- self.assertRaises(TypeError, geometry.triangle3d, cell_shape, 1, "a", 1, 1, 1, 1, 1)
- self.assertRaises(TypeError, geometry.triangle3d, cell_shape, 1, 1, "a", 1, 1, 1, 1)
- self.assertRaises(TypeError, geometry.triangle3d, cell_shape, 1, 1, 1, "a", 1, 1, 1)
- self.assertRaises(TypeError, geometry.triangle3d, cell_shape, 1, 1, 1, 1, "a", 1, 1)
- self.assertRaises(TypeError, geometry.triangle3d, cell_shape, 1, 1, 1, 1, 1, "a", 1)
- self.assertRaises(ValueError, geometry.triangle3d, cell_shape, 1, 1, 1, 1, 1, 1, -1)
- self.assertRaises(ValueError, geometry.triangle3d, 0, 1, 1, 1, 1, 1, 1, 1)
- def test_squ2_triangle(self):
- """ test for geometry.squ2_triangle """
- cell_shape = geometry.SQUARE
- # TODO: check and validate
- # # left to right
- # # TODO: complete
- #
- # # top to bottom
- # # TODO: complete
- #
- # # right to left
- # # TODO: complete
- #
- # # bottom to top
- # # TODO: complete
- #
- # # top left to bottom right
- # # TODO: complete
- #
- # # bottom right to top left
- # # TODO: complete
- #
- # # top right to bottom left
- # # TODO: complete
- #
- # # bottom right to top left
- # # TODO: complete
- def test_fhex2_triangle(self):
- """ test for geometry.fhex2_triangle """
- cell_shape = geometry.FLAT_HEX
- # left to right
- 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)])
- 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)])
- 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)])
- # TODO: check and validate
- # # top to bottom
- # # TODO: complete
- # right to left
- 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)])
- 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)])
- 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)])
- # # bottom to top
- # # TODO: complete
- # # top left to bottom right
- # # TODO: complete
- # # bottom right to top left
- # # TODO: complete
- # # top right to bottom left
- # # TODO: complete
- # # bottom right to top left
- # # TODO: complete
- def test_squ3_triangle(self):
- """ test for geometry.squ3_triangle """
- cell_shape = geometry.SQUARE
- # TODO: complete
- def test_fhex3_triangle(self):
- """ test for geometry.fhex3_triangle """
- cell_shape = geometry.FLAT_HEX
- # TODO: complete
- # # Translations, rotations
- def test_pivot(self):
- """ test for geometry.pivot """
- self.assertRaises(ValueError, geometry.pivot, 0, (0, 0), [(0, 0)], 1)
- self.assertRaises(TypeError, geometry.pivot, 0, "a" , [(0, 0)], 1)
- self.assertRaises(ValueError, geometry.pivot, 0, ("a", 0), [(0, 0)], 1)
- self.assertRaises(TypeError, geometry.pivot, 0, (0, 0), 0, 1)
- self.assertRaises(ValueError, geometry.pivot, 0, (0, 0), ["a", (0, 0)], 1)
- self.assertRaises(ValueError, geometry.pivot, 0, (0, 0), [("a", 0), (0, 0)], 1)
- self.assertRaises(TypeError, geometry.pivot, 0, (0, 0), 1, "a")
- def test_fhex2_pivot(self):
- """ test for geometry.fhex2_pivot """
- attended = [
- [(5, 5), (4, 5), (6, 6)],
- [(5, 6), (4, 7), (6, 6)],
- [(6, 7), (6, 8), (6, 6)],
- [(7, 6), (8, 7), (6, 6)],
- [(7, 5), (8, 5), (6, 6)],
- [(6, 5), (6, 4), (6, 6)],
- [(5, 5), (4, 5), (6, 6)]
- ]
- for i in range(len(attended)):
- self.assertCountEqual(geometry.pivot(geometry.FLAT_HEX, (6, 6), [(6, 6)], i), [(6, 6)])
- result = geometry.pivot(geometry.FLAT_HEX, (6, 6), [(5, 5), (4, 5), (6, 6)], i)
- self.assertCountEqual(result, attended[i])
- def test_squ2_pivot(self):
- """ test for geometry.squ2_pivot """
- attended = [
- [(6, 6), (6, 5), (5, 5), (5, 6)],
- [(6, 6), (5, 6), (5, 7), (6, 7)],
- [(6, 6), (6, 7), (7, 7), (7, 6)],
- [(6, 6), (7, 6), (7, 5), (6, 5)],
- [(6, 6), (6, 5), (5, 5), (5, 6)]
- ]
- for i in range(len(attended)):
- self.assertCountEqual(geometry.pivot(geometry.SQUARE, (6, 6), [(6, 6)], i), [(6, 6)])
- result = geometry.pivot(geometry.SQUARE, (6, 6), [(6, 6), (6, 5), (5, 5), (5, 6)], i)
- self.assertCountEqual(result, attended[i])
- # # cubic coordinates
- def test_cv_cube_off(self):
- """ test for geometry.cv_cube_off """
- pass
- def test_cv_off_cube(self):
- """ test for geometry.cv_off_cube """
- pass
- if __name__ == "__main__":
- unittest.main()
|