Files
claude-code/src/utils/__tests__/CircularBuffer.test.ts
2026-04-02 14:44:56 +08:00

103 lines
2.7 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { CircularBuffer } from "../CircularBuffer";
describe("CircularBuffer", () => {
test("starts empty", () => {
const buf = new CircularBuffer<number>(5);
expect(buf.length()).toBe(0);
expect(buf.toArray()).toEqual([]);
});
test("adds items up to capacity", () => {
const buf = new CircularBuffer<number>(3);
buf.add(1);
buf.add(2);
buf.add(3);
expect(buf.length()).toBe(3);
expect(buf.toArray()).toEqual([1, 2, 3]);
});
test("evicts oldest when full", () => {
const buf = new CircularBuffer<number>(3);
buf.add(1);
buf.add(2);
buf.add(3);
buf.add(4);
expect(buf.length()).toBe(3);
expect(buf.toArray()).toEqual([2, 3, 4]);
});
test("evicts multiple oldest items", () => {
const buf = new CircularBuffer<number>(2);
buf.add(1);
buf.add(2);
buf.add(3);
buf.add(4);
buf.add(5);
expect(buf.toArray()).toEqual([4, 5]);
});
test("addAll adds multiple items", () => {
const buf = new CircularBuffer<number>(5);
buf.addAll([1, 2, 3]);
expect(buf.toArray()).toEqual([1, 2, 3]);
});
test("addAll with overflow", () => {
const buf = new CircularBuffer<number>(3);
buf.addAll([1, 2, 3, 4, 5]);
expect(buf.toArray()).toEqual([3, 4, 5]);
});
test("getRecent returns last N items", () => {
const buf = new CircularBuffer<number>(5);
buf.addAll([1, 2, 3, 4, 5]);
expect(buf.getRecent(3)).toEqual([3, 4, 5]);
});
test("getRecent returns fewer when not enough items", () => {
const buf = new CircularBuffer<number>(5);
buf.add(1);
buf.add(2);
expect(buf.getRecent(5)).toEqual([1, 2]);
});
test("getRecent works after wraparound", () => {
const buf = new CircularBuffer<number>(3);
buf.addAll([1, 2, 3, 4, 5]);
expect(buf.getRecent(2)).toEqual([4, 5]);
});
test("clear resets buffer", () => {
const buf = new CircularBuffer<number>(5);
buf.addAll([1, 2, 3]);
buf.clear();
expect(buf.length()).toBe(0);
expect(buf.toArray()).toEqual([]);
});
test("works with string type", () => {
const buf = new CircularBuffer<string>(2);
buf.add("a");
buf.add("b");
buf.add("c");
expect(buf.toArray()).toEqual(["b", "c"]);
});
test("capacity=1 keeps only the most recent item", () => {
const buf = new CircularBuffer<number>(1);
buf.add(10);
expect(buf.toArray()).toEqual([10]);
buf.add(20);
expect(buf.toArray()).toEqual([20]);
buf.add(30);
expect(buf.toArray()).toEqual([30]);
expect(buf.getRecent(1)).toEqual([30]);
});
test("getRecent on empty buffer returns empty array", () => {
const buf = new CircularBuffer<number>(5);
expect(buf.getRecent(3)).toEqual([]);
});
});