testOneCausalPerBatch
One causal per batch, however many transactions; merge parents and ancestry.
import { ROOT_CAUSAL } from "#codebase/tcmts/store"; import { a, b, open } from "#codebase/tcmts/store/test/history"; import assert from "node:assert/strict"; export const testOneCausalPerBatch = () => { const s = open(); s.transaction(() => s.addName("x", a, "term", "add")); s.transaction(() => s.addName("y", b, "term", "add")); const one = s.causal(s.head())!; assert.deepEqual(one.parents, [ROOT_CAUSAL], "both transactions are this batch's one entry"); assert.equal(s.causalLog().length, 2); s.endBatch(); s.createBranch("side"); s.switchBranch("side"); s.addName("z", a, "term", "add z"); const side = s.head(); s.switchBranch("main"); s.endBatch(); s.removeName("x", a, "rm x"); const main = s.head(); assert.equal(s.mergeBase(main, side), one.hash); assert.ok(s.isAncestor(one.hash, side) && !s.isAncestor(side, main)); s.endBatch(); s.transaction(() => { s.addParent(side); s.addName("z", a, "term", "merge side"); }); const merged = s.causal(s.head())!; assert.deepEqual(merged.parents, [main, side], "this branch's head first"); assert.ok(s.isAncestor(side, merged.hash)); assert.equal(s.mergeBase(merged.hash, side), side); }