Exemplo n.º 1
0
        static void CustomBasedCache()
        {
            MyObject obj1 = new MyObject();
            obj1.var1 = 1;
            obj1.var2 = 1;
            MyObject obj3 = new MyObject();
            obj3.var1 = 2;
            obj3.var2 = 1;
            MyObject obj2 = new MyObject();
            obj2.var1 = 5;
            obj2.var2 = 5;
            LFUCache<MyKey, MyObject> customCache = new LFUCache<MyKey, MyObject>();
            MyKey key = customCache.Add(obj1);
            MyKey key2 = customCache.Add(obj2);
            MyKey key3 = customCache.Add(obj3);

            //........

            //obj1.var1 + obj1.var2
            //OUTPUT: 2
            Console.WriteLine("" + (customCache[key].var1 + customCache[key].var2)); //The frequency count will go up 2, because we access it twice

            MyObject obj = customCache[key3];
            //obj3.var1 + obj3.var2
            //OUTPUT: 3
            Console.WriteLine("" + (obj.var1 + obj.var2)); //The frequency count will go up 1, because we only access it once

            obj = customCache.LeastFrequentlyUsedObject; //The least frequently used object will be obj2 because we haven't requested it yet.
            //obj2.var1 + obj2.var2
            //OUTPUT: 10
            Console.WriteLine("" + (obj.var1 + obj.var2)); //This will be obj2.var1 + obj2.var2
        }
Exemplo n.º 2
0
        public void Example1()
        {
            var lfu = new LFUCache <int, int>(2, @default: -1);

            lfu.Put(1, 1);
            lfu.Put(2, 2);

            Assert.AreEqual(1, lfu.Get(1));

            lfu.Put(3, 3);

            Assert.AreEqual(-1, lfu.Get(2));

            Assert.AreEqual(3, lfu.Get(3));

            lfu.Put(4, 4);

            Assert.AreEqual(-1, lfu.Get(1));
            Assert.AreEqual(3, lfu.Get(3));

            Assert.AreEqual(4, lfu.Get(4));
        }
Exemplo n.º 3
0
        public void LFUCacheTest()
        {
            //    ["LFUCache","put","put","get","put","get","get","put","get","get","get"]
            //      [[2],[1,1],[2,2],[1],[3,3],[2],[3],[4,4],[1],[3],[4]]

            int result;

            LFUCache lfuCache = new LFUCache(2);

            lfuCache.Put(1, 1);
            lfuCache.Put(2, 2);

            result = lfuCache.Get(1);

            lfuCache.Put(3, 3);
            result = lfuCache.Get(2);
            result = lfuCache.Get(3);

            lfuCache.Put(4, 4);

            result = lfuCache.Get(1);
            result = lfuCache.Get(3);
            result = lfuCache.Get(4);
            //result = lfuCache.Get(3);

            //    Test case 2:

            //    ["LFUCache","put","put","put","put","get"]
            //[[2],[3,1],[2,1],[2,2],[4,4],[2]]
            lfuCache = new LFUCache(2);

            lfuCache.Put(3, 1);
            lfuCache.Put(2, 1);
            lfuCache.Put(2, 2);
            lfuCache.Put(2, 4);

            result = lfuCache.Get(2);
        }
Exemplo n.º 4
0
        public static void TestReplace()
        {
            var cache = new LFUCache <string, int>(4, 0.5f);

            cache.Add("a", 1);
            cache.Add("b", 2);
            cache.Add("c", 3);

            int x = default;

            x = cache["a"];
            x = cache["a"];
            x = cache["b"];

            cache.Add("d", 4);

            cache.Add("e", 5);

            Assert.AreEqual(cache["a"], 1, "should get 1");
            Assert.AreEqual(cache["b"], 2, "should get 0");
            Assert.IsFalse(cache.ContainsKey("c"));
            Assert.IsFalse(cache.ContainsKey("d"));
            Assert.AreEqual(cache["e"], 5, "should get 5");
        }
Exemplo n.º 5
0
 private void PrintCache(LFUCache <int, string> cache)
 {
     PrintList("Cache table:", cache.GetAllCache());
 }
Exemplo n.º 6
0
 private void PrintCount(LFUCache <int, string> cache)
 {
     PrintList("Count table:", cache.GetAllCount());
 }
Exemplo n.º 7
0
 private void PrintNode(LFUCache <int, string> cache)
 {
     PrintList("Node table:", cache.GetAllNode());
 }
Exemplo n.º 8
0
        static void Main(string[] args)
        {
            LFUCache cache = new LFUCache(3);

            cache.Put(1, 1);
            int rs = cache.Get(1);

            rs = cache.Get(1);
            rs = cache.Get(1);
            Console.WriteLine($"Result: {rs} - Expect: {1}");
            cache.Put(2, 2);
            cache.Put(3, 3);
            cache.Put(4, 4);
            rs = cache.Get(2);
            Console.WriteLine($"Result: {rs} - Expect: {-1}");
            rs = cache.Get(4);
            Console.WriteLine($"Result: {rs} - Expect: {4}");
            rs = cache.Get(4);
            rs = cache.Get(4);
            rs = cache.Get(3);
            Console.WriteLine($"Result: {rs} - Expect: {3}");
            cache.Put(5, 5);
            rs = cache.Get(2);
            Console.WriteLine($"Result: {rs} - Expect: {-1}");
            rs = cache.Get(5);
            Console.WriteLine($"Result: {rs} - Expect: {5}");

            // phase 2

            cache = new LFUCache(1);
            cache.Put(1, 1);
            rs = cache.Get(1);
            Console.WriteLine($"Result: {rs} - Expect: {1}");
            cache.Put(1, 3);
            rs = cache.Get(1);
            Console.WriteLine($"Result: {rs} - Expect: {3}");
            cache.Put(2, 4);
            rs = cache.Get(2);
            Console.WriteLine($"Result: {rs} - Expect: {4}");
            rs = cache.Get(1);
            Console.WriteLine($"Result: {rs} - Expect: {-1}");

            // phase 3

            cache = new LFUCache(2);
            cache.Put(1, 1);
            cache.Put(2, 2);
            rs = cache.Get(1);
            Console.WriteLine($"Result: {rs} - Expect: {1}");
            cache.Put(3, 3);
            rs = cache.Get(2);
            Console.WriteLine($"Result: {rs} - Expect: {-1}");
            rs = cache.Get(3);
            Console.WriteLine($"Result: {rs} - Expect: {3}");
            cache.Put(4, 4);
            rs = cache.Get(1);
            Console.WriteLine($"Result: {rs} - Expect: {-1}");
            rs = cache.Get(-1);
            Console.WriteLine($"Result: {rs} - Expect: {-1}");
            rs = cache.Get(3);
            Console.WriteLine($"Result: {rs} - Expect: {3}");

            cache = new LFUCache(0);
            cache.Put(0, 0);
            cache.Get(0);
        }