import { expect, test } from "vitest"; import { createActorID, Dot, LWWMapCRDT, LWWRegisterCRDT, SequenceCRDT, } from "./crdt"; test("Add items to a sequence", () => { const actorA = createActorID("A"); let crdtA = new SequenceCRDT< Map<"char", string>, LWWMapCRDT<"char", string> >(); let prevId: Dot | null = null; [crdtA, prevId] = crdtA.insert( actorA, prevId, new LWWMapCRDT( new Map([["char", new LWWRegisterCRDT("a", new Dot(actorA, 1))]]), ), ); [crdtA, prevId] = crdtA.insert( actorA, prevId, new LWWMapCRDT( new Map([["char", new LWWRegisterCRDT("b", new Dot(actorA, 1))]]), ), ); [crdtA, prevId] = crdtA.insert( actorA, prevId, new LWWMapCRDT( new Map([["char", new LWWRegisterCRDT("c", new Dot(actorA, 1))]]), ), ); const sequence = crdtA.getValue(); expect(sequence.map((item) => item.value.get("char"))).toEqual([ "a", "b", "c", ]); });