public async Task CollectDisposedSnapshots() { var d = new SnapDictionary <int, string>(); d.Test.CollectAuto = false; // gen 1 d.Set(1, "one"); Assert.AreEqual(1, d.Test.GetValues(1).Length); Assert.AreEqual(1, d.Test.LiveGen); Assert.IsTrue(d.Test.NextGen); SnapDictionary <int, string> .Snapshot s1 = d.CreateSnapshot(); Assert.AreEqual(1, d.Test.LiveGen); Assert.IsFalse(d.Test.NextGen); // gen 2 d.Set(1, "two"); Assert.AreEqual(2, d.Test.GetValues(1).Length); Assert.AreEqual(2, d.Test.LiveGen); Assert.IsTrue(d.Test.NextGen); SnapDictionary <int, string> .Snapshot s2 = d.CreateSnapshot(); Assert.AreEqual(2, d.Test.LiveGen); Assert.IsFalse(d.Test.NextGen); // gen 3 d.Set(1, "three"); Assert.AreEqual(3, d.Test.GetValues(1).Length); Assert.AreEqual(3, d.Test.LiveGen); Assert.IsTrue(d.Test.NextGen); SnapDictionary <int, string> .Snapshot s3 = d.CreateSnapshot(); Assert.AreEqual(3, d.Test.LiveGen); Assert.IsFalse(d.Test.NextGen); Assert.AreEqual(3, d.SnapCount); s1.Dispose(); await d.CollectAsync(); Assert.AreEqual(2, d.SnapCount); Assert.AreEqual(2, d.Test.GetValues(1).Length); s2.Dispose(); await d.CollectAsync(); Assert.AreEqual(1, d.SnapCount); Assert.AreEqual(1, d.Test.GetValues(1).Length); s3.Dispose(); await d.CollectAsync(); Assert.AreEqual(0, d.SnapCount); Assert.AreEqual(1, d.Test.GetValues(1).Length); }