Exemplo n.º 1
0
        public void Solve_should_solve_solvable_problem()
        {
            var action1      = new ActionMock("action 1");
            var action2      = new ActionMock("action 2");
            var initialState = new StateMock("initial state");
            var state1       = new StateMock("state 1");
            var state2       = new StateMock("state 2");
            var problem      = A.Fake <ISearchProblem <StateMock, ActionMock> >();

            A.CallTo(() => problem.InitialState).Returns(initialState);
            A.CallTo(() => problem.GetActions(initialState)).Returns(new [] { action1 });
            A.CallTo(() => problem.DoAction(initialState, action1)).Returns(state1);
            A.CallTo(() => problem.GetActions(state1)).Returns(new [] { action2 });
            A.CallTo(() => problem.DoAction(state1, action2)).Returns(state2);
            A.CallTo(() => problem.IsGoal(state2)).Returns(true);

            var bfs = new BreadthFirstSearch <StateMock, ActionMock>(problem);

            bfs.Solve();

            Assert.IsTrue(bfs.IsFinished);
            Assert.IsTrue(bfs.IsSolved);

            var solution = bfs.GetSolutionTo(state2).ToList();

            Assert.AreEqual(new[] { action1, action2 }, solution);
        }