testOneCausalPerBatch

tcmts.store.test.history.testOneCausalPerBatch · #pnlja6qu · term

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);
}

uses