public void DynamicAnonList() { var n = 0; var t2 = new AnonymousReadOnlyList<int>(() => n, i => i + 10); t2.Count.AssertEquals(0); t2.AssertSequenceEquals(new int[0]); TestUtil.AssertThrows<ArgumentOutOfRangeException>(() => t2[0]); n = 1; t2.Count.AssertEquals(1); t2[0].AssertEquals(10); t2.AssertSequenceEquals(new[] { 10 }); TestUtil.AssertThrows<ArgumentOutOfRangeException>(() => t2[1]); }
public void AnonListEfficientIterator() { var li = new List<int> {0}; var ri1 = new AnonymousReadOnlyList<int>(() => li.Count, i => li[i]); var ri2 = new AnonymousReadOnlyList<int>(() => li.Count, i => li[i], li); using (var e1 = ri1.GetEnumerator()) { using (var e2 = ri2.GetEnumerator()) { e1.MoveNext().AssertIsTrue(); e2.MoveNext().AssertIsTrue(); li.Add(1); TestUtil.AssertThrows<InvalidOperationException>(() => e2.MoveNext()); // list modified during iteration e1.MoveNext().AssertIsTrue(); // not using list iterator } } }
public void DynamicAnonList() { var n = 0; var t2 = new AnonymousReadOnlyList <int>(() => n, i => i + 10); t2.Count.AssertEquals(0); t2.AssertSequenceEquals(new int[0]); TestUtil.AssertThrows <ArgumentOutOfRangeException>(() => t2[0]); n = 1; t2.Count.AssertEquals(1); t2[0].AssertEquals(10); t2.AssertSequenceEquals(new[] { 10 }); TestUtil.AssertThrows <ArgumentOutOfRangeException>(() => t2[1]); }
public void AnonListEfficientIterator() { var li = new List <int> { 0 }; var ri1 = new AnonymousReadOnlyList <int>(() => li.Count, i => li[i]); var ri2 = new AnonymousReadOnlyList <int>(() => li.Count, i => li[i], li); using (var e1 = ri1.GetEnumerator()) { using (var e2 = ri2.GetEnumerator()) { e1.MoveNext().AssertIsTrue(); e2.MoveNext().AssertIsTrue(); li.Add(1); TestUtil.AssertThrows <InvalidOperationException>(() => e2.MoveNext()); // list modified during iteration e1.MoveNext().AssertIsTrue(); // not using list iterator } } }