示例#1
0
    def test03(self):
        """ one moving bug """

        grid = Grid(5, 5)
        bug = Bug(grid, pheromoneKind=PHEROMONE, pheromoneValue=4)

        grid.put(2, 2, bug)
        grid.diffuse()
        self.assertEquals(4, grid.scent(2, 2, PHEROMONE))

        grid.remove(2, 2, bug)
        grid.put(2, 3, bug)
        grid.diffuse()
        self.assertEquals(0.5, grid.scent(1, 1, PHEROMONE))
        self.assertEquals(0  , grid.scent(2, 2, PHEROMONE))
        self.assertEquals(4.5, grid.scent(2, 3, PHEROMONE))

        grid.remove(2, 3, bug)
        grid.put(3, 3, bug)
        grid.diffuse()
        self.assertEquals(0.0625, grid.scent(0, 0, PHEROMONE))
        self.assertEquals(0.125 , grid.scent(0, 1, PHEROMONE))
        self.assertEquals(0.1875, grid.scent(0, 2, PHEROMONE))
        self.assertEquals(0.125 , grid.scent(1, 1, PHEROMONE))
        self.assertEquals(1     , grid.scent(2, 2, PHEROMONE))
        self.assertEquals(0.25  , grid.scent(2, 3, PHEROMONE))
        self.assertEquals(4.625 , grid.scent(3, 3, PHEROMONE))
示例#2
0
    def test02(self):
        """ two bugs with the same scent """

        grid = Grid(5, 5)
        bug1 = Bug(grid, pheromoneKind=PHEROMONE, pheromoneValue=4)
        bug2 = Bug(grid, pheromoneKind=PHEROMONE, pheromoneValue=2)
        grid.put(2, 2, bug1)
        grid.put(1, 1, bug2)

        grid.diffuse()
        self.assertEquals(2, grid.scent(1, 1, PHEROMONE))
        self.assertEquals(4, grid.scent(2, 2, PHEROMONE))

        grid.diffuse()
        self.assertEquals(2.5 , grid.scent(1, 1, PHEROMONE))
        self.assertEquals(4.25, grid.scent(2, 2, PHEROMONE))

        grid.diffuse()
        self.assertEquals(2.875 , grid.scent(1, 1, PHEROMONE))
        self.assertEquals(4.8125, grid.scent(2, 2, PHEROMONE))
示例#3
0
    def test05(self):
        """ one bug, one pond """

        grid = Grid(5, 5)
        bug = Bug(grid, pheromoneKind=PHEROMONE, pheromoneValue=4)
        pond1 = Pond(grid, pheromoneKind=PHEROMONE)
        pond2 = Pond(grid, pheromoneKind=PHEROMONE)
        pond3 = Pond(grid, pheromoneKind=PHEROMONE)
        pond4 = Pond(grid, pheromoneKind=PHEROMONE)
        pond5 = Pond(grid, pheromoneKind=PHEROMONE)

        grid.put(2, 2, bug)
        grid.put(1, 0, pond1)
        grid.put(1, 1, pond2)
        grid.put(1, 2, pond3)
        grid.put(1, 3, pond4)
        grid.put(1, 4, pond5)

        grid.diffuse()
        self.assertEquals(0, grid.scent(1, 1, PHEROMONE))
        self.assertEquals(4, grid.scent(2, 2, PHEROMONE))

        grid.diffuse()
        self.assertEquals(0    , grid.scent(0, 0, PHEROMONE))
        self.assertEquals(0    , grid.scent(0, 1, PHEROMONE))
        self.assertEquals(0    , grid.scent(0, 2, PHEROMONE))
        self.assertEquals(0.125, grid.scent(1, 1, PHEROMONE))
        self.assertEquals(0.5  , grid.scent(2, 1, PHEROMONE))
        self.assertEquals(0    , grid.scent(2, 0, PHEROMONE))
        self.assertEquals(4    , grid.scent(2, 2, PHEROMONE))

        grid.diffuse()
        self.assertEquals(0.015625  , grid.scent(0, 0, PHEROMONE))
        self.assertEquals(0.03125   , grid.scent(0, 1, PHEROMONE))
        self.assertEquals(0.046875  , grid.scent(0, 2, PHEROMONE))
        self.assertEquals(0.14453125, grid.scent(1, 1, PHEROMONE))
        self.assertEquals(0.65625   , grid.scent(2, 1, PHEROMONE))
        self.assertEquals(0.140625  , grid.scent(2, 0, PHEROMONE))
        self.assertEquals(4.359375  , grid.scent(2, 2, PHEROMONE))
示例#4
0
    def test04(self):
        """ one bug, one wall """

        grid = Grid(5, 5)
        bug = Bug(grid, pheromoneKind=PHEROMONE, pheromoneValue=4)
        wall1 = Wall(grid, pheromoneKind=PHEROMONE)
        wall2 = Wall(grid, pheromoneKind=PHEROMONE)
        wall3 = Wall(grid, pheromoneKind=PHEROMONE)
        wall4 = Wall(grid, pheromoneKind=PHEROMONE)
        wall5 = Wall(grid, pheromoneKind=PHEROMONE)

        grid.put(2, 2, bug)
        grid.put(1, 0, wall1)
        grid.put(1, 1, wall2)
        grid.put(1, 2, wall3)
        grid.put(1, 3, wall4)
        grid.put(1, 4, wall5)

        grid.diffuse()
        self.assertEquals(0, grid.scent(1, 1, PHEROMONE))
        self.assertEquals(4, grid.scent(2, 2, PHEROMONE))

        grid.diffuse()
        self.assertEquals(0   , grid.scent(0, 0, PHEROMONE))
        self.assertEquals(0   , grid.scent(0, 1, PHEROMONE))
        self.assertEquals(0   , grid.scent(0, 2, PHEROMONE))
        self.assertEquals(0   , grid.scent(1, 1, PHEROMONE))
        self.assertEquals(0.5 , grid.scent(2, 1, PHEROMONE))
        self.assertEquals(0   , grid.scent(2, 0, PHEROMONE))
        self.assertEquals(4   , grid.scent(2, 2, PHEROMONE))

        grid.diffuse()
        self.assertEquals(0     , grid.scent(0, 0, PHEROMONE))
        self.assertEquals(0     , grid.scent(0, 1, PHEROMONE))
        self.assertEquals(0     , grid.scent(0, 2, PHEROMONE))
        self.assertEquals(0     , grid.scent(1, 1, PHEROMONE))
        self.assertEquals(0.625 , grid.scent(2, 1, PHEROMONE))
        self.assertEquals(0.125 , grid.scent(2, 0, PHEROMONE))
        self.assertEquals(4.3125, grid.scent(2, 2, PHEROMONE))
示例#5
0
class AntWorkerTestCase(unittest.TestCase):
    from net.cadrian.microcosmos.model.bugs.antWorkers import TRAIL_HILL, TRAIL_FOOD, TRAIL_LICE

    def setUp(self):
        self.grid = Grid(5, 5)
        self.queen = AntQueen(self.grid, NO_SPRITE)
        self.ant = AntWorker(self.grid, NO_SPRITE, randomizer=DeterministRandomizer())

    def test01a(self):
        """ an ant moving from the hill leaves a trail -- note: the hill is the square around the queen """
        self.grid.put(2, 2, self.queen)
        self.grid.put(1, 1, self.ant)
        self.ant.prepareToMove()
        self.grid.diffuse()
        self.assertEquals(32, self.grid.scent(1, 1, self.TRAIL_HILL))

    def test01b(self):
        """ an ant moving from the hill leaves a trail -- the ant far from the hill """
        self.grid.put(2, 2, self.queen)
        self.grid.put(0, 0, self.ant)
        self.ant.prepareToMove()
        self.grid.diffuse()
        self.assertEquals(0, self.grid.scent(0, 0, self.TRAIL_HILL))

    def test01c(self):
        """ an ant moving from the hill leaves a trail -- the ant is far from the hill but marked as coming from it """
        self.ant._setLeavingHill()
        self.grid.put(2, 2, self.queen)
        self.grid.put(0, 0, self.ant)
        self.ant.prepareToMove()
        self.grid.diffuse()
        self.assertEquals(32, self.grid.scent(0, 0, self.TRAIL_HILL))

    def test01d(self):
        """ an ant moving from the hill leaves a trail -- the ant is getting far from the hill but moves from it """
        self.grid.put(2, 2, self.queen)
        self.grid.put(1, 1, self.ant)
        self.ant.prepareToMove()
        self.grid.diffuse()
        self.assertEquals(32, self.grid.scent(1, 1, self.TRAIL_HILL))

        self.ant.move()
        self.assertFalse(self.grid.has(1, 1, self.ant))
        self.assertTrue(self.grid.has(self.ant.x, self.ant.y, self.ant))

        self.ant.prepareToMove()
        self.grid.diffuse()
        self.assertEquals(36, self.grid.scent(self.ant.x, self.ant.y, self.TRAIL_HILL))

    def test02a(self):
        """ when leaving hill, an ant will choose to explore by default """
        self.ant._setLeavingHill()
        self.grid.put(2, 2, self.queen)
        self.grid.put(1, 1, self.ant)
        self.ant.prepareToMove()
        self.assertEquals("exploration", str(self.ant.state))

    def test02b(self):
        """ when leaving hill, an ant will choose to follow a trail to food if there is one """
        self.ant._setLeavingHill()
        self.grid.put(2, 2, self.queen)
        self.grid.put(1, 1, self.ant)
        self.grid._ensurePheromone(1, 2, self.TRAIL_FOOD, 8)
        self.assertEquals(8, self.grid.scent(1, 2, self.TRAIL_FOOD))
        self.ant.prepareToMove()
        self.assertEquals("following food", str(self.ant.state))
        self.ant.move()
        self.assertFalse(self.grid.has(1, 1, self.ant))
        self.assertTrue(self.grid.has(1, 2, self.ant))

    def test02c(self):
        """ when leaving hill, an ant will choose to follow a trail to lice if there is one """
        self.ant._setLeavingHill()
        self.grid.put(2, 2, self.queen)
        self.grid.put(1, 1, self.ant)
        self.grid._ensurePheromone(1, 2, self.TRAIL_LICE, 8)
        self.assertEquals(8, self.grid.scent(1, 2, self.TRAIL_LICE))
        self.ant.prepareToMove()
        self.assertEquals("following lice", str(self.ant.state))
        self.ant.move()
        self.assertFalse(self.grid.has(1, 1, self.ant))
        self.assertTrue(self.grid.has(1, 2, self.ant))

    def test02d(self):
        """ when leaving hill, an ant will choose to follow the strongest trail is there are both a food and a lice trails """
        self.ant._setLeavingHill()
        self.grid.put(2, 2, self.queen)
        self.grid.put(1, 1, self.ant)
        self.grid._ensurePheromone(1, 2, self.TRAIL_LICE, 8)
        self.grid._ensurePheromone(1, 0, self.TRAIL_FOOD, 16)
        self.assertEquals(8, self.grid.scent(1, 2, self.TRAIL_LICE))
        self.ant.prepareToMove()
        self.assertEquals("following food", str(self.ant.state))
        self.ant.move()
        self.assertFalse(self.grid.has(1, 1, self.ant))
        self.assertFalse(self.grid.has(1, 2, self.ant))
        self.assertTrue(self.grid.has(1, 0, self.ant))

    def test02e(self):
        """ when leaving hill, an ant will choose to follow the lice trail over the food trail if both trails have the same strength """
        self.ant._setLeavingHill()
        self.grid.put(2, 2, self.queen)
        self.grid.put(1, 1, self.ant)
        self.grid._ensurePheromone(1, 2, self.TRAIL_LICE, 8)
        self.grid._ensurePheromone(1, 0, self.TRAIL_FOOD, 8)
        self.assertEquals(8, self.grid.scent(1, 2, self.TRAIL_LICE))
        self.ant.prepareToMove()
        self.assertEquals("following lice", str(self.ant.state))
        self.ant.move()
        self.assertFalse(self.grid.has(1, 1, self.ant))
        self.assertFalse(self.grid.has(1, 0, self.ant))
        self.assertTrue(self.grid.has(1, 2, self.ant))

    def test03a(self):
        """ when finding food, the ant takes some of it """
        self.ant._setLeavingHill()
        self.grid.put(2, 2, self.queen)
        self.grid.put(0, 0, self.ant)
        self.grid._ensurePheromone(1, 1, self.TRAIL_HILL, 8)
        food = Food(self.grid, store=5)
        self.grid.put(0, 0, food)
        self.ant.prepareToMove()
        self.assertEquals("storing food", str(self.ant.state))
        self.ant.move()
        self.assertTrue(self.grid.has(0, 0, self.ant))
        self.assertTrue(self.ant._hasFood())
        self.assertEquals(4, food.store)
        self.ant.prepareToMove()
        self.assertEquals("following hill", str(self.ant.state))
        self.ant.move()
        self.assertFalse(self.grid.has(0, 0, self.ant))
        self.assertTrue(self.grid.has(1, 1, self.ant))

    def test03b(self):
        """ when finding lice, the ant milks them """
        self.ant._setLeavingHill()
        self.grid.put(2, 2, self.queen)
        self.grid.put(0, 0, self.ant)
        self.grid._ensurePheromone(1, 1, self.TRAIL_HILL, 8)
        louse = Louse(self.grid, milk=5)
        self.grid.put(0, 0, louse)
        self.ant.prepareToMove()
        self.assertEquals("storing milk", str(self.ant.state))
        self.ant.move()
        self.assertTrue(self.grid.has(0, 0, self.ant))
        self.assertTrue(self.ant._hasFood())
        self.assertEquals(4, louse.milk)
        self.ant.prepareToMove()
        self.assertEquals("following hill", str(self.ant.state))
        self.ant.move()
        self.assertFalse(self.grid.has(0, 0, self.ant))
        self.assertTrue(self.grid.has(1, 1, self.ant))

    def test04(self):
        """ an ant tries to go home even when there is no trail to follow -- and it leaves a trail"""
        self.grid.put(2, 2, self.queen)
        self.grid.put(0, 0, self.ant)
        self.grid.diffuse()
        self.ant._setFood(SCENT_FOOD)
        self.grid.diffuse()
        self.ant.prepareToMove()
        self.assertEquals("following queen", str(self.ant.state))
        self.ant.move()
        self.assertFalse(self.grid.has(0, 0, self.ant))
        self.assertTrue(self.grid.has(1, 1, self.ant))
        self.assertEquals(16, self.grid.scent(0, 0, SCENT_FOOD.kind))