test.govlab/patterns/core/aggregators/representation.distribution.aggregator.test.ts
test.govlab/patterns/core/aggregators/representation.distribution.aggregator.test.ts is a file in Codebase Testing. 37 lines of code and 0 definitions.
import { describe, expect, it } from "vitest";
import { DistributionAccumulator } from "@govlab/patterns/core/aggregators/representation.distribution.aggregator.ts";
import { createRng } from "@govlab/patterns/core/factories/seed.factory.ts";
const RECORDS = 10_000;
const DISTINCT = 5;
const STATE_BOUND = 200;
const PRESENT = 2;
const SEED = 3;
const sizeOf = function sizeOf(value: unknown): number {
if (value instanceof Map || value instanceof Set) {
return value.size;
}
return Array.isArray(value) ? value.length : 0;
};
describe("DistributionAccumulator", () => {
it("counts only present, non-null values", () => {
const accumulator = new DistributionAccumulator("color");
accumulator.update([{ color: "red" }, { color: "blue" }, { color: null }, {}]);
expect(accumulator.result().count).toBe(PRESENT);
expect(accumulator.result().top.map(([value]) => value)).toStrictEqual(["blue", "red"]);
});
it("keeps retained state proportional to distinct values, not records", () => {
const accumulator = new DistributionAccumulator("f");
for (let i = 0; i < RECORDS; i += 1) {
accumulator.update([{ f: i % DISTINCT }]);
}
expect(accumulator.result().distinct).toBe(DISTINCT);
expect(Object.values(accumulator).reduce((total: number, value) => total + sizeOf(value), 0)).toBeLessThan(
STATE_BOUND,
);
});
it("samples a value it has seen", () => {
const accumulator = new DistributionAccumulator("color");
accumulator.update([{ color: "red" }]);
expect(accumulator.sample(createRng(SEED))).toBe("red");
});
});