public void AddTest()
        {
            var q = new TestQ();

            Assert.IsTrue(q.Items.IsEmpty());

            q.Add("a", 0, 10);
            var a = q.Items.First(x => x.Key == "a");

            Assert.AreEqual("a", a.Key);
            Assert.AreEqual(10, a.Value);

            q.Add("b", 0, 25);
            a = q.Items.First(x => x.Key == "a");
            var b = q.Items.First(x => x.Key == "b");

            Assert.AreEqual("a", a.Key);
            Assert.AreEqual(10, a.Value);
            Assert.AreEqual("b", b.Key);
            Assert.AreEqual(25, b.Value);

            q.Add("a", 0, 50);
            a = q.Items.First(x => x.Key == "a");
            b = q.Items.First(x => x.Key == "b");
            Assert.AreEqual("a", a.Key);
            Assert.AreEqual(50, a.Value);
            Assert.AreEqual("b", b.Key);
            Assert.AreEqual(25, b.Value);
        }
        public void RemoveTest()
        {
            var q = new TestQ();

            q.Add("abc", 0, 10);
            Assert.AreEqual("abc", q.Items.First().Key);

            q.Remove("abcd");
            Assert.AreEqual("abc", q.Items.First().Key);
            Assert.AreEqual(1, q.Items.Count());

            q.Remove("abc");
            Assert.IsTrue(q.Items.IsEmpty());
        }
        public void UpdateTest()
        {
            var q = new TestQ();

            q.Add("b", 0, 50);
            q.Add("a", 0, 10);
            q.Add("c", 0, 100);
            Assert.AreEqual(3, q.Items.Count());

            q.Update(0);
            Assert.AreEqual(3, q.Items.Count());
            Assert.IsTrue(q.Items.Any(x => x.Key == "a"));
            Assert.IsTrue(q.Items.Any(x => x.Key == "b"));
            Assert.IsTrue(q.Items.Any(x => x.Key == "c"));
            Assert.IsTrue(q.GetRecentExpired().IsEmpty());

            q.Update(10);
            Assert.AreEqual(2, q.Items.Count());
            Assert.IsTrue(q.Items.Any(x => x.Key == "b"));
            Assert.IsTrue(q.Items.Any(x => x.Key == "c"));
            Assert.IsTrue(q.GetRecentExpired().All(x => x == "a"));
            Assert.IsTrue(q.GetRecentExpired().IsEmpty());

            q.Update(49);
            Assert.AreEqual(2, q.Items.Count());
            Assert.IsTrue(q.Items.Any(x => x.Key == "b"));
            Assert.IsTrue(q.Items.Any(x => x.Key == "c"));
            Assert.IsTrue(q.GetRecentExpired().IsEmpty());

            q.Update(51);
            Assert.AreEqual(1, q.Items.Count());
            Assert.IsTrue(q.GetRecentExpired().All(x => x == "b"));
            Assert.IsTrue(q.Items.Any(x => x.Key == "c"));

            q.Update(99);
            Assert.AreEqual(1, q.Items.Count());
            Assert.IsTrue(q.Items.Any(x => x.Key == "c"));

            q.Update(1000);
            Assert.IsTrue(q.GetRecentExpired().All(x => x == "c"));
            Assert.IsTrue(q.Items.IsEmpty());
        }