package aima.test.core.unit.search.uninformed;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import aima.core.agent.Action;
import aima.core.environment.nqueens.NQueensBoard;
import aima.core.environment.nqueens.NQueensFunctionFactory;
import aima.core.environment.nqueens.NQueensGoalTest;
import aima.core.search.framework.Problem;
import aima.core.search.framework.Search;
import aima.core.search.framework.SearchAgent;
import aima.core.search.uninformed.IterativeDeepeningSearch;
public class IterativeDeepeningSearchTest {
@Test
public void testIterativeDeepeningSearch() {
try {
Problem problem = new Problem(new NQueensBoard(8),
NQueensFunctionFactory.getIActionsFunction(),
NQueensFunctionFactory.getResultFunction(),
new NQueensGoalTest());
Search search = new IterativeDeepeningSearch();
SearchAgent agent = new SearchAgent(problem, search);
List<Action> actions = agent.getActions();
assertCorrectPlacement(actions);
Assert.assertEquals("3656",
agent.getInstrumentation().getProperty("nodesExpanded"));
} catch (Exception e) {
e.printStackTrace();
Assert.fail("Exception should not occur");
}
}
private void assertCorrectPlacement(List<Action> actions) {
Assert.assertEquals(8, actions.size());
Assert.assertEquals(
"Action[name==placeQueenAt, location== ( 0 , 0 ) ]", actions
.get(0).toString());
Assert.assertEquals(
"Action[name==placeQueenAt, location== ( 1 , 4 ) ]", actions
.get(1).toString());
Assert.assertEquals(
"Action[name==placeQueenAt, location== ( 2 , 7 ) ]", actions
.get(2).toString());
Assert.assertEquals(
"Action[name==placeQueenAt, location== ( 3 , 5 ) ]", actions
.get(3).toString());
Assert.assertEquals(
"Action[name==placeQueenAt, location== ( 4 , 2 ) ]", actions
.get(4).toString());
Assert.assertEquals(
"Action[name==placeQueenAt, location== ( 5 , 6 ) ]", actions
.get(5).toString());
Assert.assertEquals(
"Action[name==placeQueenAt, location== ( 6 , 1 ) ]", actions
.get(6).toString());
Assert.assertEquals(
"Action[name==placeQueenAt, location== ( 7 , 3 ) ]", actions
.get(7).toString());
}
}