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
This commit is contained in:
1 parent
719370c8f7
commit
6081e3e325
1743 files changed
+205459
-131704
No files matched your search
@@ -0,0 +1,37 @@
|
||||
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]);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user