package aima.test.core.unit.environment.wumpusworld; import java.util.ArrayList; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import aima.core.agent.Action; import aima.core.environment.wumpusworld.WumpusCave; import aima.core.environment.wumpusworld.WumpusFunctionFactory; import aima.core.environment.wumpusworld.AgentPosition; import aima.core.environment.wumpusworld.action.Forward; import aima.core.environment.wumpusworld.action.TurnLeft; import aima.core.environment.wumpusworld.action.TurnRight; import aima.core.search.framework.problem.ActionsFunction; import aima.core.search.framework.problem.ResultFunction; /** * * @author Federico Baron * @author Alessandro Daniele * @author Ciaran O'Reilly */ public class WumpusFunctionFactoryTest { private ActionsFunction actionFunction; private ResultFunction resultFunction; @Before public void setUp() { WumpusCave completeCave = new WumpusCave(4, 4); actionFunction = WumpusFunctionFactory.getActionsFunction(completeCave); resultFunction = WumpusFunctionFactory.getResultFunction(); } @Test public void testSuccessors() { ArrayList<AgentPosition> succPositions = new ArrayList<AgentPosition>(); ArrayList<AgentPosition.Orientation> succOrientation = new ArrayList<AgentPosition.Orientation>(); // From every position the possible actions are: // - Turn right (change orientation, not position) // - Turn left (change orientation, not position) // - Forward (change position, not orientation) AgentPosition P11U = new AgentPosition(1, 1, AgentPosition.Orientation.FACING_NORTH); succPositions.add(new AgentPosition(1, 2, AgentPosition.Orientation.FACING_NORTH)); succOrientation.add(AgentPosition.Orientation.FACING_EAST); succOrientation.add(AgentPosition.Orientation.FACING_WEST); for (Action a : actionFunction.actions(P11U)) { if (a instanceof Forward) { Assert.assertTrue(succPositions.contains(((Forward)a).getToPosition())); Assert.assertTrue(succPositions.contains(resultFunction.result(P11U, a))); } else if (a instanceof TurnLeft) { Assert.assertTrue(succOrientation.contains(((TurnLeft)a).getToOrientation())); Assert.assertEquals("[1,1]->FacingWest", resultFunction.result(P11U, a).toString()); } else if (a instanceof TurnRight) { Assert.assertTrue(succOrientation.contains(((TurnRight)a).getToOrientation())); Assert.assertEquals("[1,1]->FacingEast", resultFunction.result(P11U, a).toString()); } } //If you are in front of a wall forward action is not possible AgentPosition P31D = new AgentPosition(3, 1, AgentPosition.Orientation.FACING_SOUTH); AgentPosition P41R = new AgentPosition(4, 1, AgentPosition.Orientation.FACING_EAST); for (Action a : actionFunction.actions(P31D)) { Assert.assertFalse(a instanceof Forward); } for (Action a : actionFunction.actions(P41R)) { Assert.assertFalse(a instanceof Forward); } } }