public void CloneableBackingCollection()
        {
            List <Cloneable> values = new List <Cloneable>(new Cloneable[] { new Cloneable(), new Cloneable(), new Cloneable() });

            CopyOnReadEnumerable <Cloneable> enumerable = new CopyOnReadEnumerable <Cloneable>(values, values);

            using (IEnumerator <Cloneable> enumerator = values.GetEnumerator())
            {
                foreach (Cloneable i in enumerable)
                {
                    enumerator.MoveNext();
                    Assert.False(Object.ReferenceEquals(i, enumerator.Current)); // "Enumerator copied references."
                }
            }
        }
        public void NonCloneableBackingCollection()
        {
            List <int> values = new List <int>(new int[] { 1, 2, 3 });

            CopyOnReadEnumerable <int> enumerable = new CopyOnReadEnumerable <int>(values, values);

            using (IEnumerator <int> enumerator = values.GetEnumerator())
            {
                foreach (int i in enumerable)
                {
                    enumerator.MoveNext();
                    Assert.Equal(i, enumerator.Current);
                }
            }
        }
Ejemplo n.º 3
0
        public void EnumeratesBackingCollection()
        {
            List <int> values = new List <int>(new int[] { 1, 2, 3 });

            CopyOnReadEnumerable <int, string> enumerable = new CopyOnReadEnumerable <int, string>(values, values, i => i.ToString());

            using (IEnumerator <int> enumerator = values.GetEnumerator())
            {
                foreach (string s in enumerable)
                {
                    enumerator.MoveNext();
                    enumerator.Current.ToString().ShouldBe(s);
                }
                enumerator.MoveNext().ShouldBeFalse();
            }
        }
Ejemplo n.º 4
0
        public void CopiesBackingCollection()
        {
            List <string> values = new List <string>(new string[] { "a", "b", "c" });

            CopyOnReadEnumerable <string, string> enumerable = new CopyOnReadEnumerable <string, string>(values, values, s => s);

            int expectedCount = values.Count;
            var enumerator    = enumerable.GetEnumerator();

            // The list has been copied and adding to it has no effect on the enumerable.
            values.Add("d");

            int actualCount = 0;

            while (enumerator.MoveNext())
            {
                actualCount++;
            }
            actualCount.ShouldBe(expectedCount);
        }