Example #1
0
        public void GetSnapshotAndGC()
        {
            var dict = new MultiVersionDictionary <V>();

            dict.AddOrUpdate("a", 1, new V(1));
            dict.AddOrUpdate("b", 2, new V(2));
            dict.AddOrUpdate("c", 3, new V(3));
            dict.AddOrUpdate("a", 4, new V(4));
            dict.AddOrUpdate("a", 5, new V(5));
            dict.TryRemove("b", 6);
            dict.AddOrUpdate("c", 7, new V(7));
            dict.AddOrUpdate("b", 8, new V(8));

            var ss0 = dict.GetSnapshot(0).ToArray();

            Assert.AreEqual(0, ss0.Length);

            var ss1 = dict.GetSnapshot(1).ToArray();

            Assert.AreEqual(1, ss1.Length);
            Assert.AreEqual(1, ss1[0].Item1);
            Assert.AreEqual("a", ss1[0].Item2);

            var ss3 = dict.GetSnapshot(3).ToArray();

            Assert.AreEqual(3, ss3.Length);

            var ss5 = dict.GetSnapshot(5).OrderBy(x => x.Item2).ToArray();

            Assert.AreEqual(3, ss5.Length);

            var ss6 = dict.GetSnapshot(6).OrderBy(x => x.Item2).ToArray();

            Assert.AreEqual(2, ss6.Length);

            var ss8 = dict.GetSnapshot(8).OrderBy(x => x.Item2).ToArray();

            Assert.AreEqual(3, ss8.Length);

            dict.RemoveOldVersionValues(6);
        }