TestDirection.py 6.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. from os import getcwd
  2. from sys import path as ppath
  3. ppath.insert(1,getcwd()+'/modules') # TODO: win32 compatibilite (python path)
  4. # TODO: load et launch des tests auto (avec bootstrap contenant ci dessus)
  5. from intelligine.tests.simulation.pheromone.Base import Base
  6. from intelligine.simulation.pheromone.DirectionPheromone import DirectionPheromone
  7. from intelligine.core.Context import Context
  8. from intelligine.cst import PHEROMON_DIRECTION, PHEROMON_DIR_EXPLO
  9. class TestDirection(Base):
  10. def __init__(self, *args, **kwargs):
  11. super().__init__(*args, **kwargs)
  12. self._context = Context()
  13. def setUp(self):
  14. self._context = Context()
  15. def _set_up_pheromones(self, pheromones, re_init=True):
  16. if re_init:
  17. self._context = Context()
  18. for position in pheromones:
  19. self._context.pheromones().set_pheromones(position, pheromones[position])
  20. def _test_direction_for_point(self, pheromones, direction, pheromone_type=PHEROMON_DIR_EXPLO,
  21. reference_point=(0, 0, 0)):
  22. """
  23. :param pheromones:
  24. :param direction:
  25. :param pheromone_type:
  26. :param reference_point:
  27. :return:
  28. """
  29. self._set_up_pheromones(pheromones)
  30. direction_tested = DirectionPheromone.get_direction_for_point(self._context, reference_point, pheromone_type)
  31. self.assertEqual(direction, direction_tested, "Direction must be %s" % direction)
  32. def _test_direction_for_points(self, pheromones, direction, pheromone_type=PHEROMON_DIR_EXPLO,
  33. reference_point=(0, 0, 0)):
  34. """
  35. :param pheromones:
  36. :param direction:
  37. :param pheromone_type:
  38. :param reference_point:
  39. :return:
  40. """
  41. self._set_up_pheromones(pheromones)
  42. around_points = self._context.get_arround_points_of(reference_point)
  43. direction_tested = DirectionPheromone.get_best_pheromone_direction_in(self._context,
  44. reference_point,
  45. around_points,
  46. pheromone_type)
  47. self.assertEqual(direction, direction_tested, "Direction must be %s" % direction)
  48. def test_route_direct_route(self):
  49. """
  50. Test easy direction with 1 best pheromones just near actual position
  51. :return:
  52. """
  53. test_data = {
  54. 10: {
  55. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
  56. (0, -1, -1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
  57. },
  58. 11: {
  59. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
  60. (0, 0, -1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
  61. },
  62. 12: {
  63. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
  64. (0, 1, -1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
  65. },
  66. 13: {
  67. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
  68. (0, -1, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
  69. },
  70. 15: {
  71. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
  72. (0, 1, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
  73. },
  74. 16: {
  75. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
  76. (0, -1, 1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
  77. },
  78. 17: {
  79. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
  80. (0, 0, 1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
  81. },
  82. 18: {
  83. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
  84. (0, 1, 1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
  85. }
  86. }
  87. for direction_wanted in test_data:
  88. self._test_direction_for_point(test_data[direction_wanted], direction_wanted)
  89. def test_route_with_multiple_same_intensity(self):
  90. """
  91. Test find route in middle of multiple pheromones
  92. :return:
  93. """
  94. test_data = {
  95. 10: {
  96. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
  97. (0, -1, -1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}},
  98. (0, 1, 1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (12, 1)}}
  99. },
  100. 10: {
  101. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
  102. (0, -1, -1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}},
  103. (0, 1, 1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (12, 1)}},
  104. (0, 0, 1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (12, 1)}}
  105. },
  106. }
  107. for direction_wanted in test_data:
  108. self._test_direction_for_point(test_data[direction_wanted], direction_wanted)
  109. def test_route_with_multiple_different_intensity(self):
  110. """
  111. Test find route in middle of multiple pheromones
  112. :return:
  113. """
  114. test_data = {
  115. 10: {
  116. (0, 0, 0): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 2)}},
  117. (0, -1, -1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 2)}},
  118. (0, 1, 1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (8, 1)}}
  119. }
  120. }
  121. for direction_wanted in test_data:
  122. self._test_direction_for_point(test_data[direction_wanted], direction_wanted)
  123. def test_direction_direct(self):
  124. test_data = {
  125. 11: {
  126. (0, 0, -1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 2)}}
  127. }
  128. }
  129. self._test_direction_for_points({(0, 0, -1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 2)}}},
  130. 11)
  131. def test_direction_with_multiple_intensity(self):
  132. self._test_direction_for_points({(0, 0, -1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 5)}},
  133. (0, 1, 1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 4)}},
  134. (0, -1, -1): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 4)}}},
  135. 11)