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