public void ReducerCopiesArray()
        {
            var initialArray = new ImageBox[] { new ImageBox.Empty() };

            var newArray = DeleteImageSlotReducer.Reduce(initialArray, new DeleteImageSlotAction(0));

            Assert.That(!ReferenceEquals(initialArray, newArray), "Reducer did not produce new array object");
        }
        public void ReducerDeletesCorrectElementEndOfArray()
        {
            var initialArray = new ImageBox[] { new ImageBox.Empty(), new ImageBox.Empty(), new ImageBox.Empty(), new ImageBox.Empty(), new ImageBox.Empty() };

            var newArray = DeleteImageSlotReducer.Reduce(initialArray, new DeleteImageSlotAction(4));

            CheckElements(initialArray, newArray, 0, 0);
            CheckElements(initialArray, newArray, 1, 1);
            CheckElements(initialArray, newArray, 2, 2);
            CheckElements(initialArray, newArray, 3, 3);
        }
        public void EmptyInitialArrayThrows()
        {
            var initialArray = new ImageBox[0];

            Assert.Throws <ArgumentException>(() => DeleteImageSlotReducer.Reduce(initialArray, new DeleteImageSlotAction(0)), "Reducer did not throw when attempting to delete slot from empty array");
        }
        public void InvalidIndexThrows()
        {
            var initialArray = new ImageBox[] { new ImageBox.Empty() };

            Assert.Throws <IndexOutOfRangeException>(() => DeleteImageSlotReducer.Reduce(initialArray, new DeleteImageSlotAction(2)), "Reducer did not throw when index was out of range");
        }