package aima.test.core.unit.agent.impl.aprog; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import aima.core.agent.Action; import aima.core.agent.Percept; import aima.core.agent.impl.AbstractAgent; import aima.core.agent.impl.DynamicAction; import aima.core.agent.impl.DynamicPercept; import aima.core.agent.impl.NoOpAction; import aima.core.agent.impl.aprog.TableDrivenAgentProgram; import aima.test.core.unit.agent.impl.MockAgent; /** * @author Ciaran O'Reilly * */ public class TableDrivenAgentProgramTest { private static final Action ACTION_1 = new DynamicAction("action1"); private static final Action ACTION_2 = new DynamicAction("action2"); private static final Action ACTION_3 = new DynamicAction("action3"); private AbstractAgent agent; @Before public void setUp() { Map<List<Percept>, Action> perceptSequenceActions = new HashMap<List<Percept>, Action>(); perceptSequenceActions.put(createPerceptSequence(new DynamicPercept( "key1", "value1")), ACTION_1); perceptSequenceActions.put( createPerceptSequence(new DynamicPercept("key1", "value1"), new DynamicPercept("key1", "value2")), ACTION_2); perceptSequenceActions.put( createPerceptSequence(new DynamicPercept("key1", "value1"), new DynamicPercept("key1", "value2"), new DynamicPercept("key1", "value3")), ACTION_3); agent = new MockAgent(new TableDrivenAgentProgram( perceptSequenceActions)); } @Test public void testExistingSequences() { Assert.assertEquals(ACTION_1, agent.execute(new DynamicPercept("key1", "value1"))); Assert.assertEquals(ACTION_2, agent.execute(new DynamicPercept("key1", "value2"))); Assert.assertEquals(ACTION_3, agent.execute(new DynamicPercept("key1", "value3"))); } @Test public void testNonExistingSequence() { Assert.assertEquals(ACTION_1, agent.execute(new DynamicPercept("key1", "value1"))); Assert.assertEquals(NoOpAction.NO_OP, agent.execute(new DynamicPercept("key1", "value3"))); } private static List<Percept> createPerceptSequence(Percept... percepts) { List<Percept> perceptSequence = new ArrayList<Percept>(); for (Percept p : percepts) { perceptSequence.add(p); } return perceptSequence; } }