Skip to content

Commit

Permalink
feat: added tests for RGA
Browse files Browse the repository at this point in the history
  • Loading branch information
JanLewDev committed Aug 3, 2024
1 parent df44186 commit ad3d057
Showing 1 changed file with 114 additions and 0 deletions.
114 changes: 114 additions & 0 deletions packages/crdt/tests/RGA.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import { describe, test, expect, beforeEach } from "vitest";
import { RGA } from "../src/builtins/RGA"; // Adjust the import path according to your project structure

describe("Replicable Growable Array Tests", () => {
let rga: RGA<string>;
let peerRGA: RGA<string>;

beforeEach(() => {
rga = new RGA<string>("node1");
peerRGA = new RGA<string>("node2");
});

test("Test Insert", () => {
rga.insert(0, "A");
rga.insert(1, "B");
rga.insert(1, "C");
rga.insert(0, "D");

expect(rga.getElements()).toEqual(["D", "A", "C", "B"]);
});

test("Test Read", () => {
rga.insert(0, "A");
rga.insert(1, "B");
rga.insert(1, "C");
rga.delete(1);

expect(rga.read(0)).toBe("A");
expect(rga.read(1)).toBe("B");
});

test("Test Insert and Delete", () => {
rga.insert(0, "A");
rga.insert(1, "B");
rga.insert(1, "C");
rga.delete(0);
rga.delete(0);
expect(rga.getElements()).toEqual(["B"]);

rga.clear();

rga.insert(0, "A");
rga.insert(1, "B");
rga.delete(0);

expect(rga.getElements()).toEqual(["B"]);

rga.insert(0, "C");
rga.insert(1, "D");
expect(rga.getElements()).toEqual(["C", "D", "B"]);

rga.delete(1);
expect(rga.getElements()).toEqual(["C", "B"]);

rga.delete(1);
expect(rga.getElements()).toEqual(["C"]);

peerRGA.insert(0, "E");
peerRGA.insert(0, "F");
peerRGA.insert(2, "G");
peerRGA.insert(3, "H");
peerRGA.delete(1);
peerRGA.delete(1);
peerRGA.delete(1);
expect(peerRGA.getElements()).toEqual(["F"]);
});

test("Test Update", () => {
rga.insert(0, "A");
rga.insert(1, "B");
rga.update(0, "C");
rga.update(1, "D");

expect(rga.getElements()).toEqual(["C", "D"]);
});

test("Test Merge Order", () => {
rga.insert(0, "A");
rga.insert(1, "B");

peerRGA.insert(0, "C");
peerRGA.insert(1, "D");

rga.merge(peerRGA);

expect(rga.getElements()).toEqual(["A", "C", "B", "D"]);

Check failure on line 86 in packages/crdt/tests/RGA.test.ts

View workflow job for this annotation

GitHub Actions / tests

packages/crdt/tests/RGA.test.ts > Replicable Growable Array Tests > Test Merge Order

AssertionError: expected [ 'A', 'C', 'D', 'B' ] to deeply equal [ 'A', 'C', 'B', 'D' ] - Expected + Received Array [ "A", "C", - "B", "D", + "B", ] ❯ packages/crdt/tests/RGA.test.ts:86:35
});

test("Test Merge with Delete", () => {
rga.insert(0, 'A1');
peerRGA.insert(0, 'B1');

// Sync both replicas, both should be ["A1", "B1"]
rga.merge(peerRGA);
peerRGA.merge(rga);


// console.log(rga.elements());
// console.log(peerRGA.elements());
rga.insert(1, 'A2');
peerRGA.delete(1);
// console.log(rga.elements());
// console.log(peerRGA.elements());

expect(rga.getElements()).toEqual(['A1', 'A2', 'B1']);
expect(peerRGA.getElements()).toEqual(['A1']);

Check failure on line 106 in packages/crdt/tests/RGA.test.ts

View workflow job for this annotation

GitHub Actions / tests

packages/crdt/tests/RGA.test.ts > Replicable Growable Array Tests > Test Merge with Delete

AssertionError: expected [ 'B1', 'B1' ] to deeply equal [ 'A1' ] - Expected + Received Array [ - "A1", + "B1", + "B1", ] ❯ packages/crdt/tests/RGA.test.ts:106:39

rga.merge(peerRGA);
peerRGA.merge(rga);

expect(rga.getElements()).toEqual(peerRGA.getElements());
});

});

0 comments on commit ad3d057

Please sign in to comment.