Ejemplo n.º 1
0
        public void Add2()
        {
            var a = new LruDictionary <int, string>(10);

            a.Add(1, "one", 3, onRemove: default);
            a.Add(2, "two", 4, onRemove: default);

            Assert.IsTrue(a.MaxSize == 10);
            Assert.IsTrue(a.CurrentSize == 7);
            Assert.IsTrue(a.Count == 2);
        }
Ejemplo n.º 2
0
        public void Add1_Replace()
        {
            var a = new LruDictionary <int, string>(10);

            a.Add(1, "one", 3, onRemove: default);
            Assert.IsTrue(a.CurrentSize == 3);
            Assert.IsTrue(a.Count == 1);

            a.Add(1, "one", 5, onRemove: default);
            Assert.IsTrue(a.CurrentSize == 5);
            Assert.IsTrue(a.Count == 1);
        }
Ejemplo n.º 3
0
        public void Remove2_Last()
        {
            var a = new LruDictionary <int, string>(15);

            a.Add(1, "one", 3, onRemove: default);
            a.Add(2, "two", 4, onRemove: default);

            Assert.IsTrue(a.Remove(2) == true);
            Assert.IsTrue(a.Count == 1);

            Assert.IsTrue(a.Remove(1) == true);
            Assert.IsTrue(a.Count == 0);
        }
Ejemplo n.º 4
0
        public void Clear3()
        {
            var a = new LruDictionary <int, string>(20);

            a.Add(1, "one", 3, onRemove: default);
            a.Add(2, "two", 4, onRemove: default);
            a.Add(3, "three", 5, onRemove: default);
            Assert.IsTrue(a.CurrentSize == 12);
            Assert.IsTrue(a.Count == 3);

            a.Clear();
            Assert.IsTrue(a.CurrentSize == 0);
            Assert.IsTrue(a.Count == 0);
        }
Ejemplo n.º 5
0
        public void Add3_Overshoot()
        {
            var a = new LruDictionary <int, string>(15);

            a.Add(1, "one", 3, onRemove: default);
            a.Add(2, "two", 4, onRemove: default);
            a.Add(3, "three", 5, onRemove: default);
            Assert.IsTrue(a.CurrentSize == 12);
            Assert.IsTrue(a.Count == 3);

            a.Add(4, "four", 10, onRemove: default);
            Assert.IsTrue(a.CurrentSize == 15);
            Assert.IsTrue(a.Count == 2);
        }
Ejemplo n.º 6
0
        public void Add3_Replace_Middle()
        {
            var a = new LruDictionary <int, string>(20);

            a.Add(1, "one", 3, onRemove: default);
            a.Add(2, "two", 4, onRemove: default);
            a.Add(3, "three", 5, onRemove: default);
            Assert.IsTrue(a.CurrentSize == 12);
            Assert.IsTrue(a.Count == 3);

            a.Add(2, "two", 6, onRemove: default);
            Assert.IsTrue(a.CurrentSize == 14);
            Assert.IsTrue(a.Count == 3);
        }
Ejemplo n.º 7
0
        public void RandomInserts_1M_MultiThreaded()
        {
            var a = new LruDictionary <int, string>(1024 * 1024 * 1024);

            var start = new ManualResetEventSlim(false);
            var ts    = new Task[4];

            for (var i = 0; i < ts.Length; i++)
            {
                ts[i] = new Task(Do, TaskCreationOptions.LongRunning);
                ts[i].Start();
            }
            var sw = new Stopwatch(); sw.Start();

            start.Set();
            Task.WhenAll(ts).Wait();
            sw.Stop();
            Console.WriteLine(sw.Elapsed);

            void Do()
            {
                start.Wait();
                var r = new Random();

                for (var i = 0; i < 1_000_000; i++)
                {
                    a.Add(r.Next(), "foo", r.Next(1, 10 * 1024 * 1024), onRemove: default);
                }
            }
        }
Ejemplo n.º 8
0
        public void Add_Size0()
        {
            var a = new LruDictionary <int, string>(10);

            a.Add(1, "one", 0, onRemove: default);
            Assert.IsTrue(a.CurrentSize == 0);
        }
Ejemplo n.º 9
0
        public void TryGetValue()
        {
            var a = new LruDictionary <int, string>(15);

            a.Add(1, "one", 3, onRemove: default);
            a.Add(2, "two", 4, onRemove: default);

            Assert.IsTrue(a.TryGetValue(1, out string s1) && s1 == "one");
            Assert.IsTrue(a.TryGetValue(2, out string s2) && s2 == "two");
            Assert.IsTrue(!a.TryGetValue(3, out string s3));

            a.Remove(1);
            Assert.IsTrue(!a.TryGetValue(1, out string s1a));

            a.Remove(2);
            Assert.IsTrue(!a.TryGetValue(2, out string s2a));
        }
Ejemplo n.º 10
0
        public void ContainsKey()
        {
            var a = new LruDictionary <int, string>(15);

            a.Add(1, "one", 3, onRemove: default);
            a.Add(2, "two", 4, onRemove: default);

            Assert.IsTrue(a.ContainsKey(1));
            Assert.IsTrue(a.ContainsKey(2));
            Assert.IsTrue(!a.ContainsKey(3));

            a.Remove(1);
            Assert.IsTrue(!a.ContainsKey(1));

            a.Remove(2);
            Assert.IsTrue(!a.ContainsKey(2));
        }
Ejemplo n.º 11
0
        public void Remove3_Middle()
        {
            var a = new LruDictionary <int, string>(15);

            a.Add(1, "one", 3, onRemove: default);
            a.Add(2, "two", 4, onRemove: default);
            a.Add(3, "three", 5, onRemove: default);

            Assert.IsTrue(a.Remove(2) == true);
            Assert.IsTrue(a.Count == 2);

            Assert.IsTrue(a.Remove(1) == true);
            Assert.IsTrue(a.Count == 1);

            Assert.IsTrue(a.Remove(3) == true);
            Assert.IsTrue(a.Count == 0);
        }
Ejemplo n.º 12
0
        public void Add_NegativeSize()
        {
            var a = new LruDictionary <int, string>(10);

            Assert.Catch(() =>
            {
                a.Add(1, "one", -1, onRemove: default);
            });
        }
Ejemplo n.º 13
0
        public void Add_SizeTooBig()
        {
            var a = new LruDictionary <int, string>(10);

            Assert.Catch(() =>
            {
                a.Add(1, "one", 11, onRemove: default);
            });
        }
Ejemplo n.º 14
0
        public void Remove1_Callback_Without()
        {
            var a       = new LruDictionary <int, string>(15);
            var removed = new HashSet <int>();

            a.Add(1, "one", 3, onRemove: (k, v, s) => removed.Add(1));
            Assert.IsTrue(a.Remove(1, false) == true);
            Assert.IsTrue(a.Count == 0);
            Assert.IsTrue(!removed.Contains(1));
        }
Ejemplo n.º 15
0
        public void Add3_Overshoot_WithCallback()
        {
            var a       = new LruDictionary <int, string>(15);
            var removed = new HashSet <int>();

            a.Add(1, "one", 3, onRemove: (k, v, s) => { removed.Add(1); Assert.IsTrue(k == 1 && v == "one" && s == 3); });
            a.Add(2, "two", 4, onRemove: (k, v, s) => { removed.Add(2); Assert.IsTrue(k == 2 && v == "two" && s == 4); });
            a.Add(3, "three", 5, onRemove: (k, v, s) => { removed.Add(3); Assert.IsTrue(k == 3 && v == "three" && s == 5); });
            a.Add(1, "one", 3, onRemove: (k, v, s) => { removed.Add(1); Assert.IsTrue(k == 1 && v == "one" && s == 3); });
            Assert.IsTrue(a.CurrentSize == 12);
            Assert.IsTrue(a.Count == 3);

            a.Add(4, "four", 10, onRemove: (k, v, s) => { removed.Add(4); Assert.IsTrue(k == 4 && v == "four" && s == 10); });
            Assert.IsTrue(a.CurrentSize == 13);
            Assert.IsTrue(a.Count == 2);

            Assert.IsTrue(!removed.Contains(1));
            Assert.IsTrue(removed.Contains(2));
            Assert.IsTrue(removed.Contains(3));
            Assert.IsTrue(!removed.Contains(4));
        }
Ejemplo n.º 16
0
        public void RandomInserts_1M_SingleThreaded()
        {
            var a = new LruDictionary <int, string>(1024 * 1024 * 1024);

            var r  = new Random();
            var sw = new Stopwatch(); sw.Start();

            for (var i = 0; i < 1_000_000; i++)
            {
                a.Add(r.Next(), "foo", r.Next(1, 10 * 1024 * 1024), onRemove: default);
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);
        }