66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
import { afterEach, describe, expect, test } from "bun:test"
|
|
import {
|
|
evictContentLru,
|
|
getFileContentBytesTotal,
|
|
getFileContentEntryCount,
|
|
removeFileContentBytes,
|
|
resetFileContentLru,
|
|
setFileContentBytes,
|
|
touchFileContent,
|
|
} from "./file/content-cache"
|
|
|
|
describe("file content eviction accounting", () => {
|
|
afterEach(() => {
|
|
resetFileContentLru()
|
|
})
|
|
|
|
test("updates byte totals incrementally for set, overwrite, remove, and reset", () => {
|
|
setFileContentBytes("a", 10)
|
|
setFileContentBytes("b", 15)
|
|
expect(getFileContentBytesTotal()).toBe(25)
|
|
expect(getFileContentEntryCount()).toBe(2)
|
|
|
|
setFileContentBytes("a", 5)
|
|
expect(getFileContentBytesTotal()).toBe(20)
|
|
expect(getFileContentEntryCount()).toBe(2)
|
|
|
|
touchFileContent("a")
|
|
expect(getFileContentBytesTotal()).toBe(20)
|
|
|
|
removeFileContentBytes("b")
|
|
expect(getFileContentBytesTotal()).toBe(5)
|
|
expect(getFileContentEntryCount()).toBe(1)
|
|
|
|
resetFileContentLru()
|
|
expect(getFileContentBytesTotal()).toBe(0)
|
|
expect(getFileContentEntryCount()).toBe(0)
|
|
})
|
|
|
|
test("evicts by entry cap using LRU order", () => {
|
|
for (const i of Array.from({ length: 41 }, (_, n) => n)) {
|
|
setFileContentBytes(`f-${i}`, 1)
|
|
}
|
|
|
|
const evicted: string[] = []
|
|
evictContentLru(undefined, (path) => evicted.push(path))
|
|
|
|
expect(evicted).toEqual(["f-0"])
|
|
expect(getFileContentEntryCount()).toBe(40)
|
|
expect(getFileContentBytesTotal()).toBe(40)
|
|
})
|
|
|
|
test("evicts by byte cap while preserving protected entries", () => {
|
|
const chunk = 8 * 1024 * 1024
|
|
setFileContentBytes("a", chunk)
|
|
setFileContentBytes("b", chunk)
|
|
setFileContentBytes("c", chunk)
|
|
|
|
const evicted: string[] = []
|
|
evictContentLru(new Set(["a"]), (path) => evicted.push(path))
|
|
|
|
expect(evicted).toEqual(["b"])
|
|
expect(getFileContentEntryCount()).toBe(2)
|
|
expect(getFileContentBytesTotal()).toBe(chunk * 2)
|
|
})
|
|
})
|