public void CopyToWorks() { var arr = new[] { "a", "b", "c", "d" }; var wc = new WeakCollection <string>(arr); var target = new string[5]; wc.CopyTo(target, 0); Assert.True(arr.SequenceEqual(target.Take(4))); Assert.Null(target[4]); target[0] = null; wc.CopyTo(target, 1); Assert.True(arr.SequenceEqual(target.Skip(1))); }
public void CopyToWorksAfterCollect() { var arr = new[] { "a", "b" }; var wc = new WeakCollection <string>(arr); { wc.Add(new string('c', 1)); wc.Add(new string('d', 1)); } GCEx.CollectAndWait(); var target = new string[5]; wc.CopyTo(target, 1); Assert.True(arr.SequenceEqual(target.Skip(1).Take(2))); Assert.Null(target[0]); Assert.Null(target[3]); Assert.Null(target[4]); }
public void TestBasics() { WeakCollection<object> c = new WeakCollection<object>(); c.Add(new object()); c.Add(new object()); c.Add(new object()); c.Add(new object()); c.Add(this); Assert.AreEqual(5, c.Count); Assert.IsTrue(c.Contains(this)); int n = 0; foreach (object o in c) { Assert.IsTrue(o.GetType() == typeof(object) || o.GetType() == this.GetType()); n++; } Assert.AreEqual(5, n); GC.Collect(); GC.WaitForPendingFinalizers(); Assert.AreEqual(1, c.Count); Assert.IsTrue(c.Contains(this)); n = 0; foreach (object o in c) { Assert.IsTrue(o.GetType() == this.GetType()); Assert.IsTrue(o == this); n++; } Assert.AreEqual(1, n); c.CopyTo(new object[1], 0); }