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

            // Act.
            var target = new SimulatedInfiniteSequence(seedTerms);

            // Assert.
            target.CalculatedTermCount.Should().Be(3);
            target.ToArray(0, 3).Should().OnlyContain(term => seedTerms.Contains(term));
        }
        public void ToArray_ShouldReturnValidResult_ForValidRangeArguments()
        {
            // Arrange.
            var seedTerm   = 5;
            var startIndex = 3;
            var count      = 5;
            var target     = new SimulatedInfiniteSequence(seedTerm);

            // Act.
            var result = target.ToArray(startIndex, count);

            // Assert.
            result.Should().BeEquivalentTo(8, 9, 10, 11, 12);
            target.CalculatedTermCount.Should().Be(8);
        }
        public void ToArray_ShouldRaiseArgumentOutOfRangeException_ForNegativeStartIndexArgument()
        {
            // Arrange.
            var seedTerm   = 5;
            var startIndex = -1;
            var count      = 3;
            var target     = new SimulatedInfiniteSequence(seedTerm);

            // Act.
            var action = new Action(() =>
            {
                var result = target.ToArray(startIndex, count);
            });

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