A world-class math input for the web
1import { expect, test } from "vitest";
2import {
3 createActorID,
4 Dot,
5 LWWMapCRDT,
6 LWWRegisterCRDT,
7 SequenceCRDT,
8} from "./crdt";
9
10test("Add items to a sequence", () => {
11 const actorA = createActorID("A");
12 let crdtA = new SequenceCRDT<
13 Map<"char", string>,
14 LWWMapCRDT<"char", string>
15 >();
16 let prevId: Dot | null = null;
17 [crdtA, prevId] = crdtA.insert(
18 actorA,
19 prevId,
20 new LWWMapCRDT(
21 new Map([["char", new LWWRegisterCRDT("a", new Dot(actorA, 1))]]),
22 ),
23 );
24 [crdtA, prevId] = crdtA.insert(
25 actorA,
26 prevId,
27 new LWWMapCRDT(
28 new Map([["char", new LWWRegisterCRDT("b", new Dot(actorA, 1))]]),
29 ),
30 );
31 [crdtA, prevId] = crdtA.insert(
32 actorA,
33 prevId,
34 new LWWMapCRDT(
35 new Map([["char", new LWWRegisterCRDT("c", new Dot(actorA, 1))]]),
36 ),
37 );
38
39 const sequence = crdtA.getValue();
40
41 expect(sequence.map((item) => item.value.get("char"))).toEqual([
42 "a",
43 "b",
44 "c",
45 ]);
46});