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
         }
     }
 }
Exemplo n.º 3
0
    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]);
    }
Exemplo n.º 4
0
    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
            }
        }
    }