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 }
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)); }
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); }
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"); }
private void PrintCache(LFUCache <int, string> cache) { PrintList("Cache table:", cache.GetAllCache()); }
private void PrintCount(LFUCache <int, string> cache) { PrintList("Count table:", cache.GetAllCount()); }
private void PrintNode(LFUCache <int, string> cache) { PrintList("Node table:", cache.GetAllNode()); }
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); }