feat: add render graph driven renderer architecture
Amp-Thread-ID: https://ampcode.com/threads/T-019f9d91-77c1-7206-a60f-ed6554ce92ab Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
This commit is contained in:
+71
@@ -0,0 +1,71 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import {
|
||||
clampNumber,
|
||||
cycleEnum,
|
||||
numericStep,
|
||||
scrubValue,
|
||||
setNumericComponent,
|
||||
snapNumber,
|
||||
} from "@lib/worker/control-edit.js";
|
||||
import type { LayoutControl } from "@lib/layout/types.js";
|
||||
|
||||
const numberControl: LayoutControl = {
|
||||
id: "number",
|
||||
nodeId: "node" as LayoutControl["nodeId"],
|
||||
source: "parameter",
|
||||
key: "value",
|
||||
label: "Value",
|
||||
kind: "number",
|
||||
value: { kind: "number", value: 0 },
|
||||
schema: { type: "number", default: { kind: "number", value: 0 }, minimum: -1, maximum: 1, step: 0.25 },
|
||||
linked: false,
|
||||
bounds: { x: 0, y: 0, width: 10, height: 10 },
|
||||
subfields: [],
|
||||
numericFields: [],
|
||||
};
|
||||
|
||||
test("control edit helpers clamp, snap and apply fine scrub", () => {
|
||||
assert.equal(clampNumber(2, numberControl.schema), 1);
|
||||
assert.equal(snapNumber(0.38, numberControl.schema), 0.5);
|
||||
assert.deepEqual(scrubValue(numberControl, { kind: "number", value: 0 }, 0, 5, true, false), {
|
||||
kind: "number",
|
||||
value: 0.05,
|
||||
});
|
||||
assert.deepEqual(scrubValue(numberControl, { kind: "number", value: 0 }, 0, 3.8, false, true), {
|
||||
kind: "number",
|
||||
value: 0.5,
|
||||
});
|
||||
assert.deepEqual(setNumericComponent(numberControl, { kind: "number", value: 0 }, 0, 2), {
|
||||
kind: "number",
|
||||
value: 1,
|
||||
});
|
||||
assert.equal(numericStep(numberControl, false), 0.25);
|
||||
assert.equal(numericStep(numberControl, true), 0.025);
|
||||
});
|
||||
|
||||
test("vector/color edits preserve other components and enum cycling wraps", () => {
|
||||
const vector = {
|
||||
...numberControl,
|
||||
kind: "vector" as const,
|
||||
schema: { type: "vector" as const, default: { kind: "vector" as const, value: [0, 0, 0] as const } },
|
||||
};
|
||||
assert.deepEqual(scrubValue(vector, { kind: "vector", value: [1, 2, 3] }, 1, 10, false, false), {
|
||||
kind: "vector",
|
||||
value: [1, 3, 3],
|
||||
});
|
||||
assert.deepEqual(setNumericComponent(vector, { kind: "vector", value: [1, 2, 3] }, 1, 4), {
|
||||
kind: "vector",
|
||||
value: [1, 4, 3],
|
||||
});
|
||||
const color = {
|
||||
...numberControl,
|
||||
kind: "color" as const,
|
||||
schema: { type: "color" as const, default: { kind: "color" as const, value: [0, 0, 0, 1] as const } },
|
||||
};
|
||||
assert.deepEqual(scrubValue(color, { kind: "color", value: [0, 0.5, 0, 1] }, 1, 10, false, false), {
|
||||
kind: "color",
|
||||
value: [0, 1, 0, 1],
|
||||
});
|
||||
assert.equal(cycleEnum(["a", "b"], "b", 1), "a");
|
||||
});
|
||||
Reference in New Issue
Block a user