public void SolveErratic2X2VacuumWorldWithDfs() { var initialState = new VacuumWorldState(2); initialState.MakeSquareDirty(1, 1); var problem = new ErraticVacuumWorldSearchProblem(); var solver = new NonDeterministicDfsSearch <VacuumWorldState, VacuumWorldAction>(problem, initialState); var solution = solver.GetSolution(); var actionCounter = 0; const int actionLimit = 1000; var erraticWorld = VacuumWorld.CreateErraticVacuumWorld(initialState); while (!problem.IsGoal(erraticWorld.State)) { var action = solution.NextAction(erraticWorld.State); erraticWorld.DoAction(action); if (++actionCounter > actionLimit) { Assert.Fail($"failed to reach goal after {actionCounter} actions"); } } }
public void DoAction_ShouldCallActionHandler() { var actionHandler = A.Fake <IVacuumWorldActionHandler>(); var vacuumWorld = new VacuumWorld(new VacuumWorldState(3), actionHandler); const VacuumWorldAction action = VacuumWorldAction.Up; vacuumWorld.DoAction(action); A.CallTo(() => actionHandler.DoAction(A <VacuumWorldState> ._, action)).MustHaveHappened(); }
private static void InteractivelyDisplaySolution( VacuumWorldState initialState, IEnumerable <VacuumWorldAction> solution) { var renderer = new Renderer(); var machine = new VacuumWorld(initialState, VacuumWorldActionHandler.CreateDeterministicActionHandler()); foreach (var action in solution) { renderer.Render(machine.State); var key = Console.ReadKey(); if (key.Key == ConsoleKey.Escape) { break; } machine.DoAction(action); } renderer.Render(machine.State); }