public void Test1()
        {
            // Arrange
            BoardState state = new BoardState(3, 3, new[] { 1, 2, 0, 4, 5, 3, 7, 8, 6 });
            BoardGoal goal = BoardGoal.CreateCompleted(3, 3);
            IBoardSolverService solver = new BoardSolverService();

            // Act
            Step[] steps = solver.GetSolution(state, goal, CancellationToken.None)[0];

            // Assert
            CollectionAssert.AreEqual(new[] { Step.Up, Step.Up }, steps);
        }
        public void RandomTests()
        {
            BoardTemplate template = BoardTemplate.CreateEmpty(3, 3);
            BoardGoal goal = BoardGoal.CreateCompleted(3, 3);

            IBoardGeneratorService generator = new BoardGeneratorService();
            IBoardSolverService solver = new BoardSolverService();

            for (int i = 0; i < 100; i++)
            {
                BoardState state = generator.Generate(template);
                Step[] solution = solver.GetSolution(state, goal, CancellationToken.None)[0];
                foreach (Step step in solution)
                {
                    switch (step)
                    {
                        case Step.Left:
                            state = state.SlideLeft();
                            break;
                        case Step.Up:
                            state = state.SlideUp();
                            break;
                        case Step.Right:
                            state = state.SlideRight();
                            break;
                        case Step.Down:
                            state = state.SlideDown();
                            break;
                        default:
                            throw new ArgumentOutOfRangeException();
                    }
                }

                Assert.IsTrue(state.Satisfies(goal));
            }
        }
 new = SolverService(MessageBus, GameService, BoardSolverService, Dispatcher);