public void Should_behave_correctly()
        {
            var items = new[] { 1, 2, 3 };
            var subject = new ReadAheadEnumerable<int>(items);

            var enumerator = (ReadAheadEnumerable<int>.ReadAheadEnumerator)subject.GetEnumerator();

            Action act = () => { int temp = enumerator.Current; };
            act.ShouldThrow<InvalidOperationException>();

            enumerator.MoveNext().Should().BeTrue();
            enumerator.Current.Should().Be(1);
            enumerator.HasNext.Should().BeTrue();

            enumerator.MoveNext().Should().BeTrue();
            enumerator.Current.Should().Be(2);
            enumerator.HasNext.Should().BeTrue();

            enumerator.MoveNext().Should().BeTrue();
            enumerator.Current.Should().Be(3);
            enumerator.HasNext.Should().BeFalse();

            enumerator.MoveNext().Should().BeFalse();

            act = () => { int temp = enumerator.Current; };
            act.ShouldThrow<InvalidOperationException>();
        }
        public void Should_return_all_items()
        {
            var items = new[] { 1, 2, 3 };
            var subject = new ReadAheadEnumerable<int>(items);

            var list = subject.ToList();
            list.Count.Should().Be(3);
            list.Should().ContainInOrder(1, 2, 3);
        }