import { describe, expect, it } from 'vitest'; import { ScalarRingBuffer } from './ScalarRingBuffer'; const point = (step: number, value = step) => ({ step, wallTime: step / 10, value }); describe('ScalarRingBuffer', () => { it('固定容量覆盖最旧点并保持按 step 排序', () => { const buffer = new ScalarRingBuffer(3); buffer.appendMany([point(2), point(1), point(3), point(4)]); expect(buffer.size).toBe(3); expect(buffer.snapshot().map((value) => value.step)).toEqual([1, 3, 4]); expect(buffer.latestStep).toBe(4); }); it('按 step 去重更新且忽略非有限数据', () => { const buffer = new ScalarRingBuffer(4); expect(buffer.append(point(1, 2))).toBe(true); expect(buffer.append(point(1, 2))).toBe(false); expect(buffer.append(point(1, 3))).toBe(true); expect(buffer.append({ step: 2, wallTime: 0, value: Number.NaN })).toBe(false); expect(buffer.snapshot()).toEqual([{ step: 1, wallTime: 0.1, value: 3 }]); }); });