public void CalculateNext_ShouldProduceDesiredResults_ForValidCountArgument()
        {
            // Arrange.
            var seedTerms = new Int32[] { 0, 1, 2 };
            var target    = new SimulatedInfiniteSequence(seedTerms);

            // Act.
            var result = target.CalculateNext(5);

            // Assert.
            result.Should().BeEquivalentTo(3, 4, 5, 6, 7);
            target.CalculatedTermCount.Should().Be(8);
        }
        public void CalculateNext_ShouldProduceDesiredResults_ForParameterlessInvocation()
        {
            // Arrange.
            var seedTerms = new Int32[] { 0, 1, 2 };
            var target    = new SimulatedInfiniteSequence(seedTerms);

            // Act.
            var result = target.CalculateNext();

            // Assert.
            result.Should().Be(3);
            target.CalculatedTermCount.Should().Be(4);
        }
        public void CalculateNext_ShouldRaiseArgumentOutOfRangeException_ForNegativeCountArgument()
        {
            // Arrange.
            var seedTerms = new Int32[] { 0, 1, 2 };
            var target    = new SimulatedInfiniteSequence(seedTerms);

            // Act.
            var action = new Action(() =>
            {
                var result = target.CalculateNext(-1);
            });

            // Assert.
            action.Should().Throw <ArgumentOutOfRangeException>();
        }