public void ShouldMatrixStateManagerRestoreToPreviousStates()
        {
            var matrix             = new Matrix <TestStateValue>(GetTestMatrixValues());
            var matrixStateManager = new MatrixStateManager <TestStateValue>(matrix, 2);

            matrixStateManager.Save();
            matrix.ForEach((item, x, y) => item.Value = (int)(2 * x));

            matrixStateManager.Save();
            matrix.ForEach((item, x, y) => item.Value = (int)(3 * x));

            matrixStateManager.Save();
            matrix.ForEach((item, x, y) => item.Value = (int)(4 * x));

            matrix.ForEach((item, x, y) => item.Value.ShouldBe((int)(4 * x)));

            var result = matrixStateManager.BackToPrevious();

            result.ShouldBeTrue();
            matrix.ForEach((item, x, y) => item.Value.ShouldBe((int)(3 * x)));

            result = matrixStateManager.BackToPrevious();
            result.ShouldBeTrue();
            matrix.ForEach((item, x, y) => item.Value.ShouldBe((int)(2 * x)));

            result = matrixStateManager.BackToPrevious();
            result.ShouldBeFalse();
            matrix.ForEach((item, x, y) => item.Value.ShouldBe((int)(2 * x)));
        }
        public void ShouldMatrixStateManagerNotChangeMatrixValuesIfNotSavedStates()
        {
            var matrix             = new Matrix <TestStateValue>(GetTestMatrixValues());
            var matrixStateManager = new MatrixStateManager <TestStateValue>(matrix, 2);

            var result = matrixStateManager.BackToPrevious();

            result.ShouldBeFalse();

            matrix.ForEach((item, x, y) => item.Value.ShouldBe((int)x));
        }
Example #3
0
        protected SideField(ISquare[,] items, MoveDirection direction, int maxSavedStatesCount) : base(items)
        {
            ThrowDirection = direction;

            StateManager = new MatrixStateManager <SideFieldSquare>(MatrixUpcast(),
                                                                    maxSavedStatesCount);

            _lazyReadOnlyMatrix = new Lazy <Matrix <ISquare> >(() =>
            {
                var items = new ISquare[Width, Height];
                ForEach((item, x, y) => items[x, y] = item);

                return(new Matrix <ISquare>(items));
            });

            Generate();
        }
        public void ShouldCreateMatrixStateManager()
        {
            var matrixStateManager = new MatrixStateManager <TestStateValue>(new Matrix <TestStateValue>(GetTestMatrixValues()), 2);

            matrixStateManager.ShouldNotBeNull();
        }