Buckets:
| 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) | |
| }) | |
| }) | |
Xet Storage Details
- Size:
- 1.94 kB
- Xet hash:
- efe887de32ddb0a1aa8615d77c04e2bf73096a9f46dddab3b1e6be1fa91faf4d
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.