Something went wrong. Try again.
A functional toolkit for authoring resource-leveling algorithms — compose constraint and scoring blocks, enumerate feasible schedules
Something went wrong. Try again.
2.4 kB · 68 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869// The standard registry: versioned codes, valid shadows, family coverage.
import { describe, expect, test } from "bun:test";
import { STANDARD_CODES, standardRegistry,} from "../../src/level-blocks/standard.ts";import type { BlockDef } from "../../src/level-blocks/registry.ts";
describe("standardRegistry", () => { test("registers every standard code under the levelset.<Name>.v<N> convention", () => { const registry = standardRegistry(); for (const code of Object.values(STANDARD_CODES)) { expect(code).toMatch(/^levelset\.[A-Za-z]+\.v\d+$/); expect(registry.get(code)).toBeDefined(); } expect(registry.list()).toHaveLength(Object.values(STANDARD_CODES).length); });
test("covers all four families with exactly one search", () => { const registry = standardRegistry(); expect( registry.list({ family: "constraint" }).length, ).toBeGreaterThanOrEqual(5); expect(registry.list({ family: "scorer" }).length).toBeGreaterThanOrEqual( 5, ); expect(registry.list({ family: "search" }).map((d) => d.code)).toEqual([ STANDARD_CODES.serialSGS, ]); });
test("defaultShadows apply cleanly through each block", () => { // register() already parse-validates shadows; also confirm apply() // accepts them so shadow blocks are runnable, not just parseable. for (const def of standardRegistry().list()) { const parsed = def.block.schema.input.parse(def.defaultShadow); expect(() => (def.block as { apply(input: unknown): unknown }).apply(parsed), ).not.toThrow(); } });
test("extends with extra defs without disturbing the standard set", () => { const extra: BlockDef = { code: "myapp.Probe.v1", family: "collector", tier: "engineer", block: { id: "Probe", schema: { input: standardRegistry().get(STANDARD_CODES.makespan)!.block.schema .input, output: standardRegistry().get(STANDARD_CODES.makespan)!.block.schema .output, }, apply: () => ({ tag: "probe" }), toMiniZinc: () => ({ text: "% probe" }), doc: { nl: "probe", pseudocode: "probe" }, }, defaultShadow: {}, }; const registry = standardRegistry([extra]); expect(registry.get("myapp.Probe.v1")).toBeDefined(); expect(registry.get(STANDARD_CODES.serialSGS)).toBeDefined(); });});