grid_test.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # -*- coding: utf-8 -*-
  2. from pathfinding.core.diagonal_movement import DiagonalMovement
  3. from pathfinding.core.grid import Grid
  4. from pathfinding.finder.a_star import AStarFinder
  5. import numpy as np
  6. BORDERLESS_GRID = """
  7. xxx
  8. xxx
  9. """
  10. BORDER_GRID = """
  11. +---+
  12. | |
  13. | |
  14. +---+
  15. """
  16. WALKED_GRID = """
  17. +---+
  18. |s# |
  19. |xe |
  20. +---+
  21. """
  22. SIMPLE_MATRIX = [
  23. [1, 1, 1],
  24. [1, 0, 1],
  25. [1, 1, 1]
  26. ]
  27. SIMPLE_WALKED = """
  28. +---+
  29. |sx |
  30. | #x|
  31. | e|
  32. +---+
  33. """
  34. def test_str():
  35. """
  36. test printing the grid
  37. """
  38. grid = Grid(height=2, width=3)
  39. assert grid.grid_str(border=False, empty_chr='x') == BORDERLESS_GRID[1:-1]
  40. assert grid.grid_str(border=True) == BORDER_GRID[1:-1]
  41. grid.nodes[0][1].walkable = False
  42. start = grid.nodes[0][0]
  43. end = grid.nodes[1][1]
  44. path = [(0, 1)]
  45. assert grid.grid_str(path, start, end) == WALKED_GRID[1:-1]
  46. def test_empty():
  47. """
  48. special test for empty values
  49. """
  50. matrix = ()
  51. grid = Grid(matrix=matrix)
  52. assert grid.grid_str() == '++\n||\n++'
  53. matrix = np.array(matrix)
  54. grid = Grid(matrix=matrix)
  55. assert grid.grid_str() == '++\n||\n++'
  56. def test_numpy():
  57. """
  58. test grid from numpy array
  59. """
  60. matrix = np.array(SIMPLE_MATRIX)
  61. grid = Grid(matrix=matrix)
  62. start = grid.node(0, 0)
  63. end = grid.node(2, 2)
  64. finder = AStarFinder(diagonal_movement=DiagonalMovement.always)
  65. path, runs = finder.find_path(start, end, grid)
  66. assert grid.grid_str(path, start, end) == SIMPLE_WALKED[1:-1]
  67. if __name__ == '__main__':
  68. test_str()