public void ChainDoesNotEnumerateSourceFurtherThanItNeedsTo() { var yieldCount = 0; var sequence = new ObservableSequence(onYield: _ => { yieldCount++; }, count: 10); var chain = new Chain <int>(sequence); foreach (var _ in chain.Take(5)) { } Assert.That(yieldCount, Is.EqualTo(5)); }
public void CallCountIsRecordedWhenEnumeratingObservableSequenceMultipleTimes() { var callCount = 0; var sequence = new ObservableSequence(onGetEnumerator: () => { callCount++; }); foreach (var item in sequence) { } foreach (var item in sequence) { } Assert.That(callCount, Is.EqualTo(2)); }
public void EnumeratingChainMultipleTimesEnumeratesSourceOnlyOnce() { var callCount = 0; var sequence = new ObservableSequence(onGetEnumerator: () => { callCount++; }); var chain = new Chain <int>(sequence); foreach (var item in chain) { } foreach (var item in chain) { } Assert.That(callCount, Is.EqualTo(1)); }
public void EnumeratingChainMultipleTimesYieldsEachItemOnlyOnce() { var yieldedItems = new List <int>(); var sequence = new ObservableSequence(onYield: i => yieldedItems.Add(i)); var chain = new Chain <int>(sequence); foreach (var _ in chain) { } var yieldedItemsCopy = yieldedItems.ToList(); foreach (var _ in chain) { } Assert.That(yieldedItemsCopy, Is.EquivalentTo(yieldedItems)); }