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
            }
        }
    }