123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- from os import getcwd
- from sys import path as ppath
- from intelligine.core.exceptions import NoPheromone
- from intelligine.simulation.pheromone.Pheromone import Pheromone
- from intelligine.simulation.pheromone.PheromoneFlavour import PheromoneFlavour
-
- ppath.insert(1,getcwd()+'/modules')
-
- from intelligine.tests.simulation.pheromone.Base import Base
- from intelligine.simulation.pheromone.DirectionPheromone import DirectionPheromone
- from intelligine.core.Context import Context
- from intelligine.cst import PHEROMON_DIRECTION, PHEROMON_DIR_EXPLO, PHEROMON_DIR_HOME
- from intelligine.synergy.event.move.direction import NORTH, NORTH_EST, EST, SOUTH_EST, SOUTH, SOUTH_WEST, WEST, \
- NORTH_WEST, CENTER
- from intelligine.synergy.event.move.direction import get_position_with_direction_decal as _p
-
-
- class TestDirection(Base):
-
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self._context = Context()
-
- def setUp(self):
- self._context = Context()
-
- def _set_up_pheromones(self, pheromones, re_init=True):
- if re_init:
- self._context = Context()
- for position in pheromones:
- self._context.pheromones().set_flavour(position, PheromoneFlavour(pheromones[position]))
-
- def _test_direction_for_point(self, pheromones, direction, pheromone_type=PHEROMON_DIR_EXPLO,
- reference_point=_p(CENTER), re_init=True):
- """
-
- :param pheromones:
- :param direction:
- :param pheromone_type:
- :param reference_point:
- :return:
- """
- self._set_up_pheromones(pheromones, re_init=re_init)
- direction_tested = DirectionPheromone.get_direction_for_point(self._context, reference_point, pheromone_type)
- self.assertEqual(direction, direction_tested, "Direction must be %s" % direction)
-
- def _test_direction_for_points(self, pheromones, direction, pheromone_type=PHEROMON_DIR_EXPLO,
- reference_point=_p(CENTER), re_init=True):
- """
-
- :param pheromones:
- :param direction:
- :param pheromone_type:
- :param reference_point:
- :return:
- """
- self._set_up_pheromones(pheromones, re_init=re_init)
- around_points = self._context.get_around_points_of(reference_point)
- direction_tested = DirectionPheromone.get_best_pheromone_direction_in(self._context,
- reference_point,
- around_points,
- pheromone_type)
- self.assertEqual(direction, direction_tested, "Direction must be %s" % direction)
-
- def test_route_direct_route(self):
- """
- Test easy direction with 1 best pheromones just near actual position
- :return:
- """
- test_data = {
- NORTH_WEST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(NORTH_WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
- },
- NORTH: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(NORTH): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
- },
- NORTH_EST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(NORTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
- },
- WEST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
- },
- EST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
- },
- SOUTH_WEST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(SOUTH_WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
- },
- SOUTH: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(SOUTH): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
- },
- SOUTH_EST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(SOUTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}}
- }
- }
-
- for direction_wanted in test_data:
- self._test_direction_for_point(test_data[direction_wanted], direction_wanted)
-
- def test_route_with_multiple_same_intensity(self):
- """
- Test find route in middle of multiple pheromones
- :return:
- """
- test_data = {
- NORTH_WEST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(NORTH_WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}},
- _p(SOUTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (12, 1)}}
- },
- NORTH_WEST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(NORTH_WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}},
- _p(SOUTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (12, 1)}},
- _p(SOUTH): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (12, 1)}}
- },
- NORTH_WEST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 1)}},
- _p(NORTH_WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 1)}},
- _p(SOUTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (12, 1)}},
- _p(SOUTH): {PHEROMON_DIRECTION: {PHEROMON_DIR_HOME: (8, 1)}}
- },
- }
-
- for direction_wanted in test_data:
- self._test_direction_for_point(test_data[direction_wanted], direction_wanted)
-
- def test_route_with_multiple_different_intensity(self):
- """
- Test find route in middle of multiple pheromones
- :return:
- """
- test_data = {
- NORTH_WEST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 2)}},
- _p(NORTH_WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 2)}},
- _p(SOUTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (8, 1)}}
- },
- NORTH_WEST: {
- _p(CENTER): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (10, 2)}},
- _p(NORTH_WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 2)}},
- _p(SOUTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (8, 1)}},
- _p(SOUTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_HOME: (5, 10)}} # an other pheromone type
- }
- }
-
- for direction_wanted in test_data:
- self._test_direction_for_point(test_data[direction_wanted], direction_wanted)
-
- def test_direction_direct(self):
- test_data = {
- NORTH: {
- _p(NORTH): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 2)}}
- },
- NORTH: {
- _p(NORTH): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 2)}},
- _p(NORTH_WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_HOME: (9, 500)}} # An other pheromone type
- }
- }
-
- for direction in test_data:
- self._test_direction_for_points(test_data[direction], direction)
-
- def test_direction_with_multiple_intensity(self):
- test_data = {
- NORTH: {
- _p(NORTH): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 5)}},
- _p(SOUTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 4)}},
- _p(NORTH_WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 4)}}
- },
- NORTH: {
- _p(NORTH): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 5)}},
- _p(WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_HOME: (9, 500)}}, # An other pheromone_type
- _p(SOUTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 4)}},
- _p(NORTH_WEST): {PHEROMON_DIRECTION: {PHEROMON_DIR_EXPLO: (9, 4)}}
- }
- }
-
- for direction in test_data:
- self._test_direction_for_points(test_data[direction], direction)
-
- def test_no_pheromones_around(self):
- # No pheromone
- try: # WTF ?
- self.assertRaises(NoPheromone, self._test_direction_for_points({}, -1))
- except NoPheromone:
- self.assertTrue(True)
-
- # Wrong pheromone type
- try: # WTF ?
- self.assertRaises(NoPheromone, self._test_direction_for_points({
- _p(SOUTH_EST): {PHEROMON_DIRECTION: {PHEROMON_DIR_HOME: (9, 5)}}
- }, -1))
- except NoPheromone:
- self.assertTrue(True)
-
- def test_appose(self):
- self._test_point_raise_no_pheromone()
- self._test_points_raise_no_pheromone()
-
- # Une pheromone au centre
- DirectionPheromone.appose(self._context,
- _p(CENTER),
- self._get_pheromone(PHEROMON_DIR_EXPLO, 2))
- # Ne permet pas de trouver une route
- self._test_point_raise_no_pheromone(re_init=False)
- self._test_points_raise_no_pheromone(re_init=False)
-
- # Une pheromone au nord
- DirectionPheromone.appose(self._context,
- _p(NORTH),
- self._get_pheromone(PHEROMON_DIR_EXPLO, 1))
- # le permet
- self._test_direction_for_points({}, NORTH, re_init=False)
- self._test_direction_for_point({}, NORTH, re_init=False)
-
-
- def _test_point_raise_no_pheromone(self, pheromones={}, direction=-1, pheromone_type=PHEROMON_DIR_EXPLO,
- reference_point=_p(CENTER), re_init=True):
- try: # WTF ?
- self._test_direction_for_point(pheromones, direction, re_init=re_init)
- except NoPheromone:
- self.assertTrue(True)
-
- def _test_points_raise_no_pheromone(self, pheromones={}, direction=-1, pheromone_type=PHEROMON_DIR_EXPLO,
- reference_point=_p(CENTER), re_init=True):
- try: # WTF ?
- self._test_direction_for_points(pheromones, direction, re_init=re_init)
- except NoPheromone:
- self.assertTrue(True)
-
- def _get_pheromone(self, type, distance):
- return Pheromone(PHEROMON_DIRECTION, type, distance=distance)
|