Files
dev/third_party/pi/packages/chord/test/state-value.test.ts
alexion 6081e3e325 chore(vendor): import pi 1.3.0
Imported as a linear vendor commit so forge rebases do not replay the upstream root tree.

git-subtree-dir: third_party/pi

git-subtree-split: 71023aec1546d6d677a65669c5665c0927ce0dd0
2026-10-15 17:58:48 -04:00

38 lines
1.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { track } from "../src/delta/index.ts";
describe("immutable revision ownership", () => {
it("takes ownership of an alias-free mutable JSON root without freezing", () => {
const input = { left: { value: 1 }, right: { value: 1 } };
const tracker = track(input);
expect(tracker.value).toBe(input);
expect(tracker.value.left).not.toBe(tracker.value.right);
expect(Object.isFrozen(tracker.value)).toBe(false);
expect(Object.isFrozen(tracker.value.left)).toBe(false);
});
it("commits transaction copies in place while sharing unchanged branches", () => {
const tracker = track({ changed: { value: 1 }, retained: { value: 2 } });
const base = tracker.value;
const baseSnapshot = structuredClone(base);
const change = tracker.beginChange();
change.state.changed.value = 3;
const prepared = change.prepare();
expect(prepared.value.changed).not.toBe(base.changed);
expect(prepared.value.retained).toBe(base.retained);
expect(Object.isFrozen(prepared.value.changed)).toBe(false);
tracker.adopt(prepared);
expect(base).toEqual(baseSnapshot);
expect(tracker.value).toBe(prepared.value);
});
it("makes repeated placements independent", () => {
const tracker = track({ values: [] as { value: number }[] });
const change = tracker.beginChange();
const shared = { value: 1 };
change.state.values.push(shared, shared);
const prepared = change.prepare();
expect(prepared.value.values[0]).not.toBe(prepared.value.values[1]);
});
});