UNPKG

@gabrielpotter/lru-lfu-cache

Version:
94 lines (89 loc) 4.91 kB
import { UnifiedCache } from "../src"; describe("LRU test", () => { it("simple set,get", async () => { const cache = new UnifiedCache<string, string>(100, 1024 * 1024, "LRU"); await cache.set("key1", "data1"); const data = await cache.get("key1"); expect(data).toEqual("data1"); }); it("delete the lru item cache item limit", async () => { const cache = new UnifiedCache<string, string>(3, 1024 * 1024, "LRU"); await cache.set("key1", "data1"); await cache.set("key2", "data2"); await cache.set("key3", "data3"); // key3 -> key2 -> key1 : insert to head const data2 = await cache.get("key2"); // key2 -> key3 -> key1 : move to head expect(data2).toEqual("data2"); await cache.set("key4", "data4"); //size limit key4 -> key2 -> key3 : insert head remove tail const data1 = await cache.get("key1"); expect(data1).toEqual(undefined); await cache.set("key5", "data5"); //size limit key5 -> key4 -> key2 : insert head remove tail const data3 = await cache.get("key3"); expect(data3).toEqual(undefined); await cache.get("key2"); await cache.get("key5"); // key5 -> key2 -> key4 await cache.set("key6", "data6"); // key6 -> key5 -> key2 const data4 = await cache.get("key4"); expect(data4).toEqual(undefined); }); it("delete the lru item cache memory limit", async () => { const cache = new UnifiedCache<string, string>(10, 100, "LRU"); await cache.set("key1", "data112345678"); await cache.set("key2", "data212345678"); await cache.set("key3", "data312345678"); // key3 -> key2 -> key1 : insert to head const data2 = await cache.get("key2"); // key2 -> key3 -> key1 : move to head await cache.set("key4", "data412345678"); //size limit key4 -> key2 -> key3 : insert head remove tail const data1 = await cache.get("key1"); await cache.set("key5", "data512345678"); //size limit key5 -> key4 -> key2 : insert head remove tail const data3 = await cache.get("key3"); await cache.get("key2"); await cache.get("key5"); // key5 -> key2 -> key4 await cache.set("key6", "data612345678"); // key6 -> key5 -> key2 const data4 = await cache.get("key4"); expect(data2).toEqual("data212345678"); expect(data1).toEqual(undefined); expect(data3).toEqual(undefined); expect(data4).toEqual(undefined); const stat = cache.getStats(); expect(stat).toEqual({ strategy: "LRU", currentNodes: 3, maxNodes: 10, currentMemory: 78, maxMemory: 100,absHitRate:0.5,relHitRate:0.5 }); }); it("delete the lru item cache item limit", async () => { const cache = new UnifiedCache<string, string>(3, 1024 * 1024, "LRU"); await cache.set("key1", "data1"); await cache.set("key2", "data2"); await cache.set("key3", "data3"); // key3 -> key2 -> key1 : insert to head const data2 = await cache.get("key2"); // key2 -> key3 -> key1 : move to head expect(data2).toEqual("data2"); await cache.set("key4", "data4"); //size limit key4 -> key2 -> key3 : insert head remove tail const data1 = await cache.get("key1"); expect(data1).toEqual(undefined); await cache.set("key5", "data5"); //size limit key5 -> key4 -> key2 : insert head remove tail const data3 = await cache.get("key3"); expect(data3).toEqual(undefined); await cache.get("key2"); await cache.get("key5"); // key5 -> key2 -> key4 await cache.set("key6", "data6"); // key6 -> key5 -> key2 const data4 = await cache.get("key4"); expect(data4).toEqual(undefined); }); it("remove specified cache item", async () => { const cache = new UnifiedCache<string, string>(3, 1024 * 1024, "LRU"); await cache.set("key1", "data1"); await cache.set("key2", "data2"); await cache.set("key3", "data3"); // key3 -> key2 -> key1 : insert to head const data2 = await cache.get("key2"); // key2 -> key3 -> key1 : move to head expect(data2).toEqual("data2"); await cache.remove("key2"); // key3 -> key1 const data1 = await cache.get("key1"); //key1 -> key3 expect(data1).toEqual("data1"); const data3 = await cache.get("key2") expect(data3).toEqual(undefined); // await cache.set("key5", "data5"); //size limit key5 -> key4 -> key2 : insert head remove tail // const data3 = await cache.get("key3"); // expect(data3).toEqual(undefined); // await cache.get("key2"); // await cache.get("key5"); // key5 -> key2 -> key4 // await cache.set("key6", "data6"); // key6 -> key5 -> key2 // const data4 = await cache.get("key4"); // expect(data4).toEqual(undefined); }); });