public void DynamicAnonCollection() { var n = 0; var t2 = new AnonymousReadOnlyCollection<int>(() => n, () => n.CRange().Select(i => i + 10).GetEnumerator()); t2.Count.AssertEquals(0); t2.AssertSequenceEquals(new int[0]); n = 1; t2.Count.AssertEquals(1); t2.AssertSequenceEquals(new[] { 10 }); }
public void DynamicAnonCollection() { var n = 0; var t2 = new AnonymousReadOnlyCollection <int>(() => n, () => n.CRange().Select(i => i + 10).GetEnumerator()); t2.Count.AssertEquals(0); t2.AssertSequenceEquals(new int[0]); n = 1; t2.Count.AssertEquals(1); t2.AssertSequenceEquals(new[] { 10 }); }
public void AnonCollectionEfficientIterator() { var li = new List<int> {0}; var ri1 = new AnonymousReadOnlyCollection<int>(() => li.Count, () => li.ToArray().AsEnumerable().GetEnumerator()); var ri2 = new AnonymousReadOnlyCollection<int>(() => li.Count, ((IEnumerable<int>)li).GetEnumerator); using (var e1 = ri1.GetEnumerator()) { using (var e2 = ri2.GetEnumerator()) { e1.MoveNext().AssertIsTrue(); e2.MoveNext().AssertIsTrue(); li.Add(1); TestUtil.AssertThrows<InvalidOperationException>(() => e2.MoveNext()); // collection modified during iteration e1.MoveNext(); // not using collection iterator } } }
public void AnonCollectionEfficientIterator() { var li = new List <int> { 0 }; var ri1 = new AnonymousReadOnlyCollection <int>(() => li.Count, () => li.ToArray().AsEnumerable().GetEnumerator()); var ri2 = new AnonymousReadOnlyCollection <int>(() => li.Count, ((IEnumerable <int>)li).GetEnumerator); using (var e1 = ri1.GetEnumerator()) { using (var e2 = ri2.GetEnumerator()) { e1.MoveNext().AssertIsTrue(); e2.MoveNext().AssertIsTrue(); li.Add(1); TestUtil.AssertThrows <InvalidOperationException>(() => e2.MoveNext()); // collection modified during iteration e1.MoveNext(); // not using collection iterator } } }