package aima.test.core.unit.environment.map;
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.map.ExtendableMap;
import aima.core.environment.map.MapFunctionFactory;
import aima.core.environment.map.MoveToAction;
import aima.core.search.framework.ActionsFunction;
import aima.core.search.framework.ResultFunction;
/**
* @author Ciaran O'Reilly
*
*/
public class MapFunctionFactoryTest {
ActionsFunction af;
ResultFunction rf;
@Before
public void setUp() {
ExtendableMap aMap = new ExtendableMap();
aMap.addBidirectionalLink("A", "B", 5.0);
aMap.addBidirectionalLink("A", "C", 6.0);
aMap.addBidirectionalLink("B", "C", 4.0);
aMap.addBidirectionalLink("C", "D", 7.0);
aMap.addUnidirectionalLink("B", "E", 14.0);
af = MapFunctionFactory.getActionsFunction(aMap);
rf = MapFunctionFactory.getResultFunction();
}
@Test
public void testSuccessors() {
ArrayList<String> locations = new ArrayList<String>();
// A
locations.clear();
locations.add("B");
locations.add("C");
for (Action a : af.actions("A")) {
Assert.assertTrue(locations.contains(((MoveToAction) a)
.getToLocation()));
Assert.assertTrue(locations.contains(rf.result("A", a)));
}
// B
locations.clear();
locations.add("A");
locations.add("C");
locations.add("E");
for (Action a : af.actions("B")) {
Assert.assertTrue(locations.contains(((MoveToAction) a)
.getToLocation()));
Assert.assertTrue(locations.contains(rf.result("B", a)));
}
// C
locations.clear();
locations.add("A");
locations.add("B");
locations.add("D");
for (Action a : af.actions("C")) {
Assert.assertTrue(locations.contains(((MoveToAction) a)
.getToLocation()));
Assert.assertTrue(locations.contains(rf.result("C", a)));
}
// D
locations.clear();
locations.add("C");
for (Action a : af.actions("D")) {
Assert.assertTrue(locations.contains(((MoveToAction) a)
.getToLocation()));
Assert.assertTrue(locations.contains(rf.result("D", a)));
}
// E
locations.clear();
Assert.assertTrue(0 == af.actions("E").size());
}
}