@gabrielpotter/lru-lfu-cache
Version:
55 lines (53 loc) • 2.03 kB
text/typescript
import { UnifiedCache } from "../src";
describe("hit rate test", () => {
it("100%", async () => {
const cache = new UnifiedCache<string, string>(100, 1024 * 1024, "LFU");
expect(cache.getStats().absHitRate).toEqual(0)
await cache.set("key1", "data1");
for (let i = 0; i < 100; i++) {
await cache.get("key1");
}
expect(cache.getStats().absHitRate).toEqual(1.0);
expect(cache.getStats().relHitRate).toEqual(1.0);
});
it("50%", async () => {
const cache = new UnifiedCache<string, string>(100, 1024 * 1024, "LFU");
await cache.set("key1", "data1");
for (let i = 0; i < 50; i++) {
await cache.get("key1");
}
for (let i = 0; i < 50; i++) {
await cache.get("key2");
}
expect(cache.getStats().absHitRate).toEqual(0.5);
expect(cache.getStats().relHitRate).toEqual(0.5);
});
it("50%", async () => {
const cache = new UnifiedCache<string, string>(100, 1024 * 1024, "LFU", 10);
await cache.set("key1", "data1");
for (let i = 0; i < 50; i++) {
await cache.get("key1");
}
for (let i = 0; i < 50; i++) {
await cache.get("key2");
}
for (let i = 0; i < 1; i++) {
await cache.get("key1");
}
for (let i = 0; i < 3; i++) {
await cache.get("key2");
}
expect(cache.getStats().absHitRate).toEqual(0.49); // accumulated hits (51 hit 53 fail )
expect(cache.getStats().relHitRate).toEqual(0.25); // 5 reset, then 1 hit 3 fail
cache.clear(); // clear reset both abs and rel hit counters
await cache.set("key1", "data1");
for (let i = 0; i < 5; i++) {
await cache.get("key1");
}
for (let i = 0; i < 5; i++) {
await cache.get("key2");
}
expect(cache.getStats().absHitRate).toEqual(0.5);
expect(cache.getStats().relHitRate).toEqual(0.5);
});
});