@graphprotocol/grc-20 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -0
- package/dist/abis.d.ts +2 -0
- package/dist/abis.d.ts.map +1 -0
- package/dist/abis.js +2 -0
- package/dist/abis.js.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +3 -0
- package/dist/constants.js.map +1 -0
- package/dist/contracts.d.ts +7 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +10 -0
- package/dist/contracts.js.map +1 -0
- package/dist/error.d.ts +2 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +8 -0
- package/dist/error.js.map +1 -0
- package/dist/example.d.ts +2 -0
- package/dist/example.d.ts.map +1 -0
- package/dist/example.js +27 -0
- package/dist/example.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/proto.d.ts +3 -0
- package/dist/proto.d.ts.map +1 -0
- package/dist/proto.js +3 -0
- package/dist/proto.js.map +1 -0
- package/dist/run.d.ts +2 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +4 -0
- package/dist/run.js.map +1 -0
- package/dist/src/abis/dao.d.ts +899 -0
- package/dist/src/abis/dao.d.ts.map +1 -0
- package/dist/src/abis/dao.js +1159 -0
- package/dist/src/abis/dao.js.map +1 -0
- package/dist/src/abis/governance-setup.d.ts +351 -0
- package/dist/src/abis/governance-setup.d.ts.map +1 -0
- package/dist/src/abis/governance-setup.js +461 -0
- package/dist/src/abis/governance-setup.js.map +1 -0
- package/dist/src/abis/index.d.ts +10 -0
- package/dist/src/abis/index.d.ts.map +1 -0
- package/dist/src/abis/index.js +10 -0
- package/dist/src/abis/index.js.map +1 -0
- package/dist/src/abis/main-voting.d.ts +1443 -0
- package/dist/src/abis/main-voting.d.ts.map +1 -0
- package/dist/src/abis/main-voting.js +1866 -0
- package/dist/src/abis/main-voting.js.map +1 -0
- package/dist/src/abis/member-access.d.ts +567 -0
- package/dist/src/abis/member-access.d.ts.map +1 -0
- package/dist/src/abis/member-access.js +735 -0
- package/dist/src/abis/member-access.js.map +1 -0
- package/dist/src/abis/personal-space-admin-setup.d.ts +259 -0
- package/dist/src/abis/personal-space-admin-setup.d.ts.map +1 -0
- package/dist/src/abis/personal-space-admin-setup.js +340 -0
- package/dist/src/abis/personal-space-admin-setup.js.map +1 -0
- package/dist/src/abis/personal-space-admin.d.ts +408 -0
- package/dist/src/abis/personal-space-admin.d.ts.map +1 -0
- package/dist/src/abis/personal-space-admin.js +526 -0
- package/dist/src/abis/personal-space-admin.js.map +1 -0
- package/dist/src/abis/plugin-setup-processor.d.ts +998 -0
- package/dist/src/abis/plugin-setup-processor.d.ts.map +1 -0
- package/dist/src/abis/plugin-setup-processor.js +1293 -0
- package/dist/src/abis/plugin-setup-processor.js.map +1 -0
- package/dist/src/abis/space-setup.d.ts +294 -0
- package/dist/src/abis/space-setup.d.ts.map +1 -0
- package/dist/src/abis/space-setup.js +387 -0
- package/dist/src/abis/space-setup.js.map +1 -0
- package/dist/src/abis/space.d.ts +263 -0
- package/dist/src/abis/space.d.ts.map +1 -0
- package/dist/src/abis/space.js +340 -0
- package/dist/src/abis/space.js.map +1 -0
- package/dist/src/account.d.ts +2 -0
- package/dist/src/account.d.ts.map +1 -0
- package/dist/src/account.js +2 -0
- package/dist/src/account.js.map +1 -0
- package/dist/src/base58.d.ts +36 -0
- package/dist/src/base58.d.ts.map +1 -0
- package/dist/src/base58.js +62 -0
- package/dist/src/base58.js.map +1 -0
- package/dist/src/base58.test.d.ts +2 -0
- package/dist/src/base58.test.d.ts.map +1 -0
- package/dist/src/base58.test.js +2 -0
- package/dist/src/base58.test.js.map +1 -0
- package/dist/src/blocks.d.ts +4 -0
- package/dist/src/blocks.d.ts.map +1 -0
- package/dist/src/blocks.js +4 -0
- package/dist/src/blocks.js.map +1 -0
- package/dist/src/core/account.d.ts +8 -0
- package/dist/src/core/account.d.ts.map +1 -0
- package/dist/src/core/account.js +50 -0
- package/dist/src/core/account.js.map +1 -0
- package/dist/src/core/base58.d.ts +37 -0
- package/dist/src/core/base58.d.ts.map +1 -0
- package/dist/src/core/base58.js +62 -0
- package/dist/src/core/base58.js.map +1 -0
- package/dist/src/core/base58.test.d.ts +2 -0
- package/dist/src/core/base58.test.d.ts.map +1 -0
- package/dist/src/core/base58.test.js +15 -0
- package/dist/src/core/base58.test.js.map +1 -0
- package/dist/src/core/blocks/data.d.ts +11 -0
- package/dist/src/core/blocks/data.d.ts.map +1 -0
- package/dist/src/core/blocks/data.js +48 -0
- package/dist/src/core/blocks/data.js.map +1 -0
- package/dist/src/core/blocks/image.d.ts +9 -0
- package/dist/src/core/blocks/image.d.ts.map +1 -0
- package/dist/src/core/blocks/image.js +9 -0
- package/dist/src/core/blocks/image.js.map +1 -0
- package/dist/src/core/blocks/text.d.ts +9 -0
- package/dist/src/core/blocks/text.d.ts.map +1 -0
- package/dist/src/core/blocks/text.js +30 -0
- package/dist/src/core/blocks/text.js.map +1 -0
- package/dist/src/core/get-checksum-address.d.ts +10 -0
- package/dist/src/core/get-checksum-address.d.ts.map +1 -0
- package/dist/src/core/get-checksum-address.js +20 -0
- package/dist/src/core/get-checksum-address.js.map +1 -0
- package/dist/src/core/ids/content.d.ts +59 -0
- package/dist/src/core/ids/content.d.ts.map +1 -0
- package/dist/src/core/ids/content.js +59 -0
- package/dist/src/core/ids/content.js.map +1 -0
- package/dist/src/core/ids/generate.d.ts +2 -0
- package/dist/src/core/ids/generate.d.ts.map +1 -0
- package/dist/src/core/ids/generate.js +4 -0
- package/dist/src/core/ids/generate.js.map +1 -0
- package/dist/src/core/ids/network.d.ts +4 -0
- package/dist/src/core/ids/network.d.ts.map +1 -0
- package/dist/src/core/ids/network.js +4 -0
- package/dist/src/core/ids/network.js.map +1 -0
- package/dist/src/core/ids/system.d.ts +212 -0
- package/dist/src/core/ids/system.d.ts.map +1 -0
- package/dist/src/core/ids/system.js +220 -0
- package/dist/src/core/ids/system.js.map +1 -0
- package/dist/src/core/image.d.ts +13 -0
- package/dist/src/core/image.d.ts.map +1 -0
- package/dist/src/core/image.js +33 -0
- package/dist/src/core/image.js.map +1 -0
- package/dist/src/core/position-strings/cursors.d.ts +56 -0
- package/dist/src/core/position-strings/cursors.d.ts.map +1 -0
- package/dist/src/core/position-strings/cursors.js +69 -0
- package/dist/src/core/position-strings/cursors.js.map +1 -0
- package/dist/src/core/position-strings/find-position.d.ts +24 -0
- package/dist/src/core/position-strings/find-position.d.ts.map +1 -0
- package/dist/src/core/position-strings/find-position.js +38 -0
- package/dist/src/core/position-strings/find-position.js.map +1 -0
- package/dist/src/core/position-strings/ids.d.ts +37 -0
- package/dist/src/core/position-strings/ids.d.ts.map +1 -0
- package/dist/src/core/position-strings/ids.js +79 -0
- package/dist/src/core/position-strings/ids.js.map +1 -0
- package/dist/src/core/position-strings/index.d.ts +5 -0
- package/dist/src/core/position-strings/index.d.ts.map +1 -0
- package/dist/src/core/position-strings/index.js +6 -0
- package/dist/src/core/position-strings/index.js.map +1 -0
- package/dist/src/core/position-strings/position-source.d.ts +128 -0
- package/dist/src/core/position-strings/position-source.d.ts.map +1 -0
- package/dist/src/core/position-strings/position-source.js +314 -0
- package/dist/src/core/position-strings/position-source.js.map +1 -0
- package/dist/src/core/position-strings/test/cursors.test.d.ts +2 -0
- package/dist/src/core/position-strings/test/cursors.test.d.ts.map +1 -0
- package/dist/src/core/position-strings/test/cursors.test.js +104 -0
- package/dist/src/core/position-strings/test/cursors.test.js.map +1 -0
- package/dist/src/core/position-strings/test/find-position.test.d.ts +2 -0
- package/dist/src/core/position-strings/test/find-position.test.d.ts.map +1 -0
- package/dist/src/core/position-strings/test/find-position.test.js +48 -0
- package/dist/src/core/position-strings/test/find-position.test.js.map +1 -0
- package/dist/src/core/position-strings/test/fuzz.test.d.ts +2 -0
- package/dist/src/core/position-strings/test/fuzz.test.d.ts.map +1 -0
- package/dist/src/core/position-strings/test/fuzz.test.js +78 -0
- package/dist/src/core/position-strings/test/fuzz.test.js.map +1 -0
- package/dist/src/core/position-strings/test/ids.test.d.ts +2 -0
- package/dist/src/core/position-strings/test/ids.test.d.ts.map +1 -0
- package/dist/src/core/position-strings/test/ids.test.js +17 -0
- package/dist/src/core/position-strings/test/ids.test.js.map +1 -0
- package/dist/src/core/position-strings/test/manual.test.d.ts +2 -0
- package/dist/src/core/position-strings/test/manual.test.d.ts.map +1 -0
- package/dist/src/core/position-strings/test/manual.test.js +307 -0
- package/dist/src/core/position-strings/test/manual.test.js.map +1 -0
- package/dist/src/core/position-strings/test/util.d.ts +6 -0
- package/dist/src/core/position-strings/test/util.d.ts.map +1 -0
- package/dist/src/core/position-strings/test/util.js +26 -0
- package/dist/src/core/position-strings/test/util.js.map +1 -0
- package/dist/src/core/position-strings/util.d.ts +8 -0
- package/dist/src/core/position-strings/util.d.ts.map +1 -0
- package/dist/src/core/position-strings/util.js +26 -0
- package/dist/src/core/position-strings/util.js.map +1 -0
- package/dist/src/core/position.d.ts +7 -0
- package/dist/src/core/position.d.ts.map +1 -0
- package/dist/src/core/position.js +7 -0
- package/dist/src/core/position.js.map +1 -0
- package/dist/src/core/relation.d.ts +30 -0
- package/dist/src/core/relation.d.ts.map +1 -0
- package/dist/src/core/relation.js +40 -0
- package/dist/src/core/relation.js.map +1 -0
- package/dist/src/core/scheme.d.ts +10 -0
- package/dist/src/core/scheme.d.ts.map +1 -0
- package/dist/src/core/scheme.js +21 -0
- package/dist/src/core/scheme.js.map +1 -0
- package/dist/src/core/triple.d.ts +14 -0
- package/dist/src/core/triple.d.ts.map +1 -0
- package/dist/src/core/triple.js +20 -0
- package/dist/src/core/triple.js.map +1 -0
- package/dist/src/encodings/get-accept-editor-arguments.d.ts +11 -0
- package/dist/src/encodings/get-accept-editor-arguments.d.ts.map +1 -0
- package/dist/src/encodings/get-accept-editor-arguments.js +23 -0
- package/dist/src/encodings/get-accept-editor-arguments.js.map +1 -0
- package/dist/src/encodings/get-accept-subspace-arguments.d.ts +11 -0
- package/dist/src/encodings/get-accept-subspace-arguments.d.ts.map +1 -0
- package/dist/src/encodings/get-accept-subspace-arguments.js +23 -0
- package/dist/src/encodings/get-accept-subspace-arguments.js.map +1 -0
- package/dist/src/encodings/get-calldata-for-space-governance-type.d.ts +8 -0
- package/dist/src/encodings/get-calldata-for-space-governance-type.d.ts.map +1 -0
- package/dist/src/encodings/get-calldata-for-space-governance-type.js +19 -0
- package/dist/src/encodings/get-calldata-for-space-governance-type.js.map +1 -0
- package/dist/src/encodings/get-process-geo-proposal-arguments.d.ts +7 -0
- package/dist/src/encodings/get-process-geo-proposal-arguments.d.ts.map +1 -0
- package/dist/src/encodings/get-process-geo-proposal-arguments.js +23 -0
- package/dist/src/encodings/get-process-geo-proposal-arguments.js.map +1 -0
- package/dist/src/encodings/get-remove-editor-arguments.d.ts +11 -0
- package/dist/src/encodings/get-remove-editor-arguments.d.ts.map +1 -0
- package/dist/src/encodings/get-remove-editor-arguments.js +23 -0
- package/dist/src/encodings/get-remove-editor-arguments.js.map +1 -0
- package/dist/src/encodings/get-remove-subspace-arguments.d.ts +11 -0
- package/dist/src/encodings/get-remove-subspace-arguments.d.ts.map +1 -0
- package/dist/src/encodings/get-remove-subspace-arguments.js +23 -0
- package/dist/src/encodings/get-remove-subspace-arguments.js.map +1 -0
- package/dist/src/encodings/index.d.ts +7 -0
- package/dist/src/encodings/index.d.ts.map +1 -0
- package/dist/src/encodings/index.js +7 -0
- package/dist/src/encodings/index.js.map +1 -0
- package/dist/src/id.d.ts +15 -0
- package/dist/src/id.d.ts.map +1 -0
- package/dist/src/id.js +21 -0
- package/dist/src/id.js.map +1 -0
- package/dist/src/image.d.ts +2 -0
- package/dist/src/image.d.ts.map +1 -0
- package/dist/src/image.js +2 -0
- package/dist/src/image.js.map +1 -0
- package/dist/src/position.d.ts +2 -0
- package/dist/src/position.d.ts.map +1 -0
- package/dist/src/position.js +2 -0
- package/dist/src/position.js.map +1 -0
- package/dist/src/proto/create-edit-proposal.d.ts +9 -0
- package/dist/src/proto/create-edit-proposal.d.ts.map +1 -0
- package/dist/src/proto/create-edit-proposal.js +54 -0
- package/dist/src/proto/create-edit-proposal.js.map +1 -0
- package/dist/src/proto/create-edit-proposal.test.d.ts +2 -0
- package/dist/src/proto/create-edit-proposal.test.d.ts.map +1 -0
- package/dist/src/proto/create-edit-proposal.test.js +140 -0
- package/dist/src/proto/create-edit-proposal.test.js.map +1 -0
- package/dist/src/proto/create-membership-proposal.d.ts +7 -0
- package/dist/src/proto/create-membership-proposal.d.ts.map +1 -0
- package/dist/src/proto/create-membership-proposal.js +26 -0
- package/dist/src/proto/create-membership-proposal.js.map +1 -0
- package/dist/src/proto/create-subspace-proposal.d.ts +7 -0
- package/dist/src/proto/create-subspace-proposal.d.ts.map +1 -0
- package/dist/src/proto/create-subspace-proposal.js +12 -0
- package/dist/src/proto/create-subspace-proposal.js.map +1 -0
- package/dist/src/proto/edit.d.ts +9 -0
- package/dist/src/proto/edit.d.ts.map +1 -0
- package/dist/src/proto/edit.js +54 -0
- package/dist/src/proto/edit.js.map +1 -0
- package/dist/src/proto/edit.test.d.ts +2 -0
- package/dist/src/proto/edit.test.d.ts.map +1 -0
- package/dist/src/proto/edit.test.js +140 -0
- package/dist/src/proto/edit.test.js.map +1 -0
- package/dist/src/proto/gen/src/proto/ipfs_pb.d.ts +404 -0
- package/dist/src/proto/gen/src/proto/ipfs_pb.d.ts.map +1 -0
- package/dist/src/proto/gen/src/proto/ipfs_pb.js +602 -0
- package/dist/src/proto/gen/src/proto/ipfs_pb.js.map +1 -0
- package/dist/src/proto/index.d.ts +2 -0
- package/dist/src/proto/index.d.ts.map +1 -0
- package/dist/src/proto/index.js +2 -0
- package/dist/src/proto/index.js.map +1 -0
- package/dist/src/relation.d.ts +2 -0
- package/dist/src/relation.d.ts.map +1 -0
- package/dist/src/relation.js +2 -0
- package/dist/src/relation.js.map +1 -0
- package/dist/src/scheme.d.ts +2 -0
- package/dist/src/scheme.d.ts.map +1 -0
- package/dist/src/scheme.js +2 -0
- package/dist/src/scheme.js.map +1 -0
- package/dist/src/system-ids.d.ts +4 -0
- package/dist/src/system-ids.d.ts.map +1 -0
- package/dist/src/system-ids.js +4 -0
- package/dist/src/system-ids.js.map +1 -0
- package/dist/src/triple.d.ts +2 -0
- package/dist/src/triple.d.ts.map +1 -0
- package/dist/src/triple.js +2 -0
- package/dist/src/triple.js.map +1 -0
- package/dist/src/types.d.ts +86 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +13 -0
- package/dist/src/types.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position-source.js","sourceRoot":"","sources":["../../../../src/core/position-strings/position-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursors.test.d.ts","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/cursors.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { assert } from "chai";
|
|
2
|
+
import seedrandom from "seedrandom";
|
|
3
|
+
import { Cursors, IDs, PositionSource } from "../src";
|
|
4
|
+
describe("Cursors", () => {
|
|
5
|
+
let rng;
|
|
6
|
+
let source;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
rng = seedrandom("42");
|
|
9
|
+
source = new PositionSource({ ID: IDs.pseudoRandom(rng) });
|
|
10
|
+
});
|
|
11
|
+
function testLength(len) {
|
|
12
|
+
let list;
|
|
13
|
+
describe(`length ${len}`, () => {
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
list = [];
|
|
16
|
+
for (let i = 0; i < len; i++) {
|
|
17
|
+
list.push(source.createBetween(list.at(-1), undefined));
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
it("present", () => {
|
|
21
|
+
for (let i = 0; i <= list.length; i++) {
|
|
22
|
+
const cursor = Cursors.fromIndex(i, list);
|
|
23
|
+
assert.strictEqual(Cursors.toIndex(cursor, list), i);
|
|
24
|
+
if (i !== 0) {
|
|
25
|
+
// Insert a char in the next gap to the left, shifting the cursor.
|
|
26
|
+
const list2 = [
|
|
27
|
+
...list.slice(0, i - 1),
|
|
28
|
+
source.createBetween(list[i - 2], list[i - 1]),
|
|
29
|
+
...list.slice(i - 1),
|
|
30
|
+
];
|
|
31
|
+
assert.strictEqual(Cursors.toIndex(cursor, list2), i + 1);
|
|
32
|
+
}
|
|
33
|
+
if (i !== list.length) {
|
|
34
|
+
// Insert a char in the next gap to the right, which shouldn't shift the cursor.
|
|
35
|
+
const list3 = [
|
|
36
|
+
...list.slice(0, i + 1),
|
|
37
|
+
source.createBetween(list[i], list[i + 1]),
|
|
38
|
+
...list.slice(i),
|
|
39
|
+
];
|
|
40
|
+
assert.strictEqual(Cursors.toIndex(cursor, list3), i);
|
|
41
|
+
}
|
|
42
|
+
// Insert a char in the cursor's gap, which
|
|
43
|
+
// still shouldn't shift the cursor, since we
|
|
44
|
+
// bind to the left char.
|
|
45
|
+
const list4 = [
|
|
46
|
+
...list.slice(0, i),
|
|
47
|
+
source.createBetween(list[i - 1], list[i]),
|
|
48
|
+
...list.slice(i),
|
|
49
|
+
];
|
|
50
|
+
assert.strictEqual(Cursors.toIndex(cursor, list4), i);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
it("not present", () => {
|
|
54
|
+
for (let i = 0; i <= list.length; i++) {
|
|
55
|
+
// Set the cursor to a new position that we "delete"
|
|
56
|
+
// (actually just leave not-present) in list.
|
|
57
|
+
const listExtended = [
|
|
58
|
+
...list.slice(0, i),
|
|
59
|
+
source.createBetween(list[i - 1], list[i]),
|
|
60
|
+
...list.slice(i),
|
|
61
|
+
];
|
|
62
|
+
const cursor = Cursors.fromIndex(i + 1, listExtended);
|
|
63
|
+
// In list, the index falls back by 1 to i.
|
|
64
|
+
assert.strictEqual(Cursors.toIndex(cursor, list), i);
|
|
65
|
+
if (i !== 0) {
|
|
66
|
+
// Insert a char in the next gap to the left, shifting the cursor.
|
|
67
|
+
const list2 = [
|
|
68
|
+
...list.slice(0, i - 1),
|
|
69
|
+
source.createBetween(list[i - 2], list[i - 1]),
|
|
70
|
+
...list.slice(i - 1),
|
|
71
|
+
];
|
|
72
|
+
assert.strictEqual(Cursors.toIndex(cursor, list2), i + 1);
|
|
73
|
+
}
|
|
74
|
+
if (i !== list.length) {
|
|
75
|
+
// Insert a char in the next gap to the right, which shouldn't shift the cursor.
|
|
76
|
+
const list3 = [
|
|
77
|
+
...list.slice(0, i + 1),
|
|
78
|
+
source.createBetween(list[i], list[i + 1]),
|
|
79
|
+
...list.slice(i),
|
|
80
|
+
];
|
|
81
|
+
assert.strictEqual(Cursors.toIndex(cursor, list3), i);
|
|
82
|
+
}
|
|
83
|
+
// Insert a char in the cursor's gap, which
|
|
84
|
+
// may or may not shift the cursor, depending on how
|
|
85
|
+
// the new position compares to the cursor's.
|
|
86
|
+
const list4 = [
|
|
87
|
+
...list.slice(0, i),
|
|
88
|
+
source.createBetween(list[i - 1], list[i]),
|
|
89
|
+
...list.slice(i),
|
|
90
|
+
];
|
|
91
|
+
const index4 = Cursors.toIndex(cursor, list4);
|
|
92
|
+
assert(i <= index4 && index4 <= i + 1);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
testLength(32);
|
|
98
|
+
testLength(31);
|
|
99
|
+
testLength(33);
|
|
100
|
+
testLength(23);
|
|
101
|
+
testLength(1);
|
|
102
|
+
testLength(0);
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=cursors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursors.test.js","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/cursors.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAEtD,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,IAAI,GAAqB,CAAC;IAC1B,IAAI,MAAuB,CAAC;IAE5B,UAAU,CAAC,GAAG,EAAE;QACd,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,SAAS,UAAU,CAAC,GAAW;QAC7B,IAAI,IAAe,CAAC;QAEpB,QAAQ,CAAC,UAAU,GAAG,EAAE,EAAE,GAAG,EAAE;YAC7B,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,GAAG,EAAE,CAAC;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC1C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;oBACrD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;wBACZ,kEAAkE;wBAClE,MAAM,KAAK,GAAG;4BACZ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;4BACvB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC9C,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;yBACrB,CAAC;wBACF,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC5D,CAAC;oBACD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;wBACtB,gFAAgF;wBAChF,MAAM,KAAK,GAAG;4BACZ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;4BACvB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC1C,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;yBACjB,CAAC;wBACF,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxD,CAAC;oBACD,2CAA2C;oBAC3C,6CAA6C;oBAC7C,yBAAyB;oBACzB,MAAM,KAAK,GAAG;wBACZ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC1C,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;qBACjB,CAAC;oBACF,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,oDAAoD;oBACpD,6CAA6C;oBAC7C,MAAM,YAAY,GAAG;wBACnB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC1C,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;qBACjB,CAAC;oBACF,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;oBAEtD,2CAA2C;oBAC3C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;oBACrD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;wBACZ,kEAAkE;wBAClE,MAAM,KAAK,GAAG;4BACZ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;4BACvB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC9C,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;yBACrB,CAAC;wBACF,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC5D,CAAC;oBACD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;wBACtB,gFAAgF;wBAChF,MAAM,KAAK,GAAG;4BACZ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;4BACvB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC1C,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;yBACjB,CAAC;wBACF,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxD,CAAC;oBACD,2CAA2C;oBAC3C,oDAAoD;oBACpD,6CAA6C;oBAC7C,MAAM,KAAK,GAAG;wBACZ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC1C,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;qBACjB,CAAC;oBACF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAC9C,MAAM,CAAC,CAAC,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,CAAC,CAAC,CAAC;IACd,UAAU,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-position.test.d.ts","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/find-position.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { assert } from 'chai';
|
|
2
|
+
import { beforeEach, describe, it } from 'vitest';
|
|
3
|
+
import { findPosition } from '../find-position.js';
|
|
4
|
+
import { IDs } from '../ids.js';
|
|
5
|
+
import { PositionSource } from '../position-source.js';
|
|
6
|
+
describe('findPosition', () => {
|
|
7
|
+
let source;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
source = new PositionSource({ ID: IDs.random() });
|
|
10
|
+
});
|
|
11
|
+
function testLength(len) {
|
|
12
|
+
let list;
|
|
13
|
+
describe(`length ${len}`, () => {
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
list = [];
|
|
16
|
+
for (let i = 0; i < len; i++) {
|
|
17
|
+
list.push(source.createBetween(list.at(-1), undefined));
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
it('present', () => {
|
|
21
|
+
for (let i = 0; i < list.length; i++) {
|
|
22
|
+
assert.deepStrictEqual(findPosition(list[i], list), {
|
|
23
|
+
index: i,
|
|
24
|
+
isPresent: true,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
it('not present', () => {
|
|
29
|
+
for (let i = 0; i <= list.length; i++) {
|
|
30
|
+
const newPos = source.createBetween(list[i - 1], list[i]);
|
|
31
|
+
// newPos would be at index i if present (between the current
|
|
32
|
+
// i - 1 & i).
|
|
33
|
+
assert.deepStrictEqual(findPosition(newPos, list), {
|
|
34
|
+
index: i,
|
|
35
|
+
isPresent: false,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
testLength(32);
|
|
42
|
+
testLength(31);
|
|
43
|
+
testLength(33);
|
|
44
|
+
testLength(23);
|
|
45
|
+
testLength(1);
|
|
46
|
+
testLength(0);
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=find-position.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-position.test.js","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/find-position.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,MAAuB,CAAC;IAE5B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,SAAS,UAAU,CAAC,GAAW;QAC7B,IAAI,IAAe,CAAC;QAEpB,QAAQ,CAAC,UAAU,GAAG,EAAE,EAAE,GAAG,EAAE;YAC7B,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,GAAG,EAAE,CAAC;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE,IAAI,CAAC,EAAE;wBAC5D,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE,IAAI;qBAChB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,6DAA6D;oBAC7D,cAAc;oBACd,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;wBACjD,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,CAAC,CAAC,CAAC;IACd,UAAU,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzz.test.d.ts","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/fuzz.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import seedrandom from "seedrandom";
|
|
2
|
+
import { assertIsOrdered, newSources, testUniqueAfterDelete } from "./util";
|
|
3
|
+
describe("fuzz", () => {
|
|
4
|
+
describe("sequential", () => {
|
|
5
|
+
describe("1 user", () => sequential(1));
|
|
6
|
+
describe("10 users", () => sequential(10));
|
|
7
|
+
});
|
|
8
|
+
});
|
|
9
|
+
function sequential(numUsers) {
|
|
10
|
+
let rng;
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
rng = seedrandom("42");
|
|
13
|
+
});
|
|
14
|
+
it("random", () => {
|
|
15
|
+
const sources = newSources(rng, numUsers);
|
|
16
|
+
// Randomly create positions in a single list, simulating sequential access.
|
|
17
|
+
const list = [];
|
|
18
|
+
for (let i = 0; i < 1000; i++) {
|
|
19
|
+
const source = sources[Math.floor(rng() * sources.length)];
|
|
20
|
+
const index = Math.floor(rng() * (list.length + 1));
|
|
21
|
+
// Out-of-bounds okay.
|
|
22
|
+
const newPosition = source.createBetween(list[index - 1], list[index]);
|
|
23
|
+
list.splice(index, 0, newPosition);
|
|
24
|
+
}
|
|
25
|
+
assertIsOrdered(list);
|
|
26
|
+
testUniqueAfterDelete(list, sources[0]);
|
|
27
|
+
});
|
|
28
|
+
it("random LtR runs", () => {
|
|
29
|
+
const sources = newSources(rng, numUsers);
|
|
30
|
+
// Randomly create positions in a single list, simulating sequential access.
|
|
31
|
+
// This time, create short LtR runs at a time.
|
|
32
|
+
const list = [];
|
|
33
|
+
for (let i = 0; i < 200; i++) {
|
|
34
|
+
const source = sources[Math.floor(rng() * sources.length)];
|
|
35
|
+
const index = Math.floor(rng() * (list.length + 1));
|
|
36
|
+
// Out-of-bounds okay.
|
|
37
|
+
for (let j = 0; j < 5; j++) {
|
|
38
|
+
const newPosition = source.createBetween(list[index - 1 + j], list[index + j]);
|
|
39
|
+
list.splice(index + j, 0, newPosition);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
assertIsOrdered(list);
|
|
43
|
+
testUniqueAfterDelete(list, sources[0]);
|
|
44
|
+
});
|
|
45
|
+
it("random RtL runs", () => {
|
|
46
|
+
const sources = newSources(rng, numUsers);
|
|
47
|
+
// Randomly create positions in a single list, simulating sequential access.
|
|
48
|
+
// This time, create short RtL runs at a time.
|
|
49
|
+
const list = [];
|
|
50
|
+
for (let i = 0; i < 200; i++) {
|
|
51
|
+
const source = sources[Math.floor(rng() * sources.length)];
|
|
52
|
+
const index = Math.floor(rng() * (list.length + 1));
|
|
53
|
+
// Out-of-bounds okay.
|
|
54
|
+
for (let j = 0; j < 5; j++) {
|
|
55
|
+
const newPosition = source.createBetween(list[index - 1], list[index]);
|
|
56
|
+
list.splice(index, 0, newPosition);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
assertIsOrdered(list);
|
|
60
|
+
testUniqueAfterDelete(list, sources[0]);
|
|
61
|
+
});
|
|
62
|
+
it("biased", () => {
|
|
63
|
+
const sources = newSources(rng, numUsers);
|
|
64
|
+
// Randomly create positions in a single list, simulating sequential access.
|
|
65
|
+
// This time, bias towards smaller indices using a sqrt.
|
|
66
|
+
const list = [];
|
|
67
|
+
for (let i = 0; i < 1000; i++) {
|
|
68
|
+
const source = sources[Math.floor(Math.sqrt(rng() * sources.length * sources.length))];
|
|
69
|
+
const index = Math.floor(rng() * (list.length + 1));
|
|
70
|
+
// Out-of-bounds okay.
|
|
71
|
+
const newPosition = source.createBetween(list[index - 1], list[index]);
|
|
72
|
+
list.splice(index, 0, newPosition);
|
|
73
|
+
}
|
|
74
|
+
assertIsOrdered(list);
|
|
75
|
+
testUniqueAfterDelete(list, sources[0]);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=fuzz.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzz.test.js","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/fuzz.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids.test.d.ts","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/ids.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { assert } from "chai";
|
|
2
|
+
import { PositionSource } from "../src";
|
|
3
|
+
describe("IDs", () => {
|
|
4
|
+
describe("validate", () => {
|
|
5
|
+
it("rejects period", () => {
|
|
6
|
+
assert.throws(() => new PositionSource({ ID: "ali.ce" }));
|
|
7
|
+
});
|
|
8
|
+
it("rejects comma", () => {
|
|
9
|
+
assert.throws(() => new PositionSource({ ID: "ali,ce" }));
|
|
10
|
+
});
|
|
11
|
+
it("rejects LAST or greater", () => {
|
|
12
|
+
assert.throws(() => new PositionSource({ ID: PositionSource.LAST }));
|
|
13
|
+
assert.throws(() => new PositionSource({ ID: PositionSource.LAST + "alice" }));
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=ids.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids.test.js","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/ids.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACrE,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC,CAChE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual.test.d.ts","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/manual.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { assert } from "chai";
|
|
2
|
+
import seedrandom from "seedrandom";
|
|
3
|
+
import { IDs, PositionSource } from "../src";
|
|
4
|
+
import { assertIsOrdered, testUniqueAfterDelete } from "./util";
|
|
5
|
+
describe("manual", () => {
|
|
6
|
+
const rng = seedrandom("42");
|
|
7
|
+
const randomName = IDs.pseudoRandom(rng);
|
|
8
|
+
const randomAlice = IDs.pseudoRandom(rng);
|
|
9
|
+
const randomBobby = IDs.pseudoRandom(rng);
|
|
10
|
+
const randomBob = IDs.pseudoRandom(rng, { length: 5 });
|
|
11
|
+
describe("single user", () => {
|
|
12
|
+
describe("random ID", () => {
|
|
13
|
+
testSingleUser(randomName);
|
|
14
|
+
});
|
|
15
|
+
describe("alphabetic ID", () => {
|
|
16
|
+
testSingleUser("alice");
|
|
17
|
+
});
|
|
18
|
+
describe("numeric ID", () => {
|
|
19
|
+
testSingleUser("0");
|
|
20
|
+
});
|
|
21
|
+
describe("empty ID", () => {
|
|
22
|
+
testSingleUser("");
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe("two users", () => {
|
|
26
|
+
describe("random IDs", () => {
|
|
27
|
+
testTwoUsers(randomAlice, randomBobby);
|
|
28
|
+
});
|
|
29
|
+
describe("random IDs, unequal lengths", () => {
|
|
30
|
+
testTwoUsers(randomAlice, randomBob);
|
|
31
|
+
});
|
|
32
|
+
describe("random IDs, prefixes", () => {
|
|
33
|
+
testTwoUsers(randomBobby, randomBob);
|
|
34
|
+
});
|
|
35
|
+
describe("numeric IDs", () => {
|
|
36
|
+
testTwoUsers("57834", "00143");
|
|
37
|
+
});
|
|
38
|
+
describe("random and empty IDs", () => {
|
|
39
|
+
testTwoUsers(randomAlice, "");
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
function testSingleUser(ID) {
|
|
44
|
+
let alice;
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
alice = new PositionSource({ ID });
|
|
47
|
+
});
|
|
48
|
+
it("LtR", () => {
|
|
49
|
+
let previous = PositionSource.FIRST;
|
|
50
|
+
const list = [];
|
|
51
|
+
for (let i = 0; i < 20; i++) {
|
|
52
|
+
previous = alice.createBetween(previous, PositionSource.LAST);
|
|
53
|
+
list.push(previous);
|
|
54
|
+
}
|
|
55
|
+
assertIsOrdered(list);
|
|
56
|
+
});
|
|
57
|
+
it("RtL", () => {
|
|
58
|
+
let previous = PositionSource.LAST;
|
|
59
|
+
const list = [];
|
|
60
|
+
for (let i = 0; i < 20; i++) {
|
|
61
|
+
previous = alice.createBetween(PositionSource.FIRST, previous);
|
|
62
|
+
list.unshift(previous);
|
|
63
|
+
}
|
|
64
|
+
assertIsOrdered(list);
|
|
65
|
+
});
|
|
66
|
+
it("restart", () => {
|
|
67
|
+
const list = [];
|
|
68
|
+
for (let j = 0; j < 5; j++) {
|
|
69
|
+
let previous = PositionSource.FIRST;
|
|
70
|
+
let after = list[0]; // Out-of-bounds okay
|
|
71
|
+
for (let i = 0; i < 10; i++) {
|
|
72
|
+
previous = alice.createBetween(previous, after);
|
|
73
|
+
list.splice(i, 0, previous);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
assertIsOrdered(list);
|
|
77
|
+
});
|
|
78
|
+
it("LtR long", () => {
|
|
79
|
+
let previous = PositionSource.FIRST;
|
|
80
|
+
const list = [];
|
|
81
|
+
for (let i = 0; i < 1000; i++) {
|
|
82
|
+
previous = alice.createBetween(previous, PositionSource.LAST);
|
|
83
|
+
list.push(previous);
|
|
84
|
+
}
|
|
85
|
+
assertIsOrdered(list);
|
|
86
|
+
// Efficiency check.
|
|
87
|
+
assert.isBelow(list.at(-1).length, 30);
|
|
88
|
+
});
|
|
89
|
+
it("RtL long", () => {
|
|
90
|
+
let previous = PositionSource.LAST;
|
|
91
|
+
const list = [];
|
|
92
|
+
for (let i = 0; i < 1000; i++) {
|
|
93
|
+
previous = alice.createBetween(PositionSource.FIRST, previous);
|
|
94
|
+
list.unshift(previous);
|
|
95
|
+
}
|
|
96
|
+
assertIsOrdered(list);
|
|
97
|
+
});
|
|
98
|
+
it("LtR, mid LtR", () => {
|
|
99
|
+
let previous = PositionSource.FIRST;
|
|
100
|
+
const list = [];
|
|
101
|
+
for (let i = 0; i < 20; i++) {
|
|
102
|
+
previous = alice.createBetween(previous, PositionSource.LAST);
|
|
103
|
+
list.push(previous);
|
|
104
|
+
}
|
|
105
|
+
const midRight = list[10];
|
|
106
|
+
previous = list[9];
|
|
107
|
+
for (let i = 0; i < 20; i++) {
|
|
108
|
+
previous = alice.createBetween(previous, midRight);
|
|
109
|
+
list.splice(10 + i, 0, previous);
|
|
110
|
+
}
|
|
111
|
+
assertIsOrdered(list);
|
|
112
|
+
});
|
|
113
|
+
it("LtR, mid RtL", () => {
|
|
114
|
+
let previous = PositionSource.FIRST;
|
|
115
|
+
const list = [];
|
|
116
|
+
for (let i = 0; i < 20; i++) {
|
|
117
|
+
previous = alice.createBetween(previous, PositionSource.LAST);
|
|
118
|
+
list.push(previous);
|
|
119
|
+
}
|
|
120
|
+
const midLeft = list[9];
|
|
121
|
+
previous = list[10];
|
|
122
|
+
for (let i = 0; i < 20; i++) {
|
|
123
|
+
previous = alice.createBetween(midLeft, previous);
|
|
124
|
+
list.splice(10, 0, previous);
|
|
125
|
+
}
|
|
126
|
+
assertIsOrdered(list);
|
|
127
|
+
});
|
|
128
|
+
it("unique after delete", () => {
|
|
129
|
+
let previous = PositionSource.FIRST;
|
|
130
|
+
const list = [];
|
|
131
|
+
for (let i = 0; i < 20; i++) {
|
|
132
|
+
previous = alice.createBetween(previous, PositionSource.LAST);
|
|
133
|
+
list.push(previous);
|
|
134
|
+
}
|
|
135
|
+
const midLeft = list[9];
|
|
136
|
+
previous = list[10];
|
|
137
|
+
for (let i = 0; i < 20; i++) {
|
|
138
|
+
previous = alice.createBetween(midLeft, previous);
|
|
139
|
+
list.splice(10, 0, previous);
|
|
140
|
+
}
|
|
141
|
+
testUniqueAfterDelete(list, alice);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function testTwoUsers(ID1, ID2) {
|
|
145
|
+
let alice;
|
|
146
|
+
let bob;
|
|
147
|
+
beforeEach(() => {
|
|
148
|
+
alice = new PositionSource({ ID: ID1 });
|
|
149
|
+
bob = new PositionSource({ ID: ID2 });
|
|
150
|
+
});
|
|
151
|
+
it("LtR sequential", () => {
|
|
152
|
+
let previous = PositionSource.FIRST;
|
|
153
|
+
const list = [];
|
|
154
|
+
for (let i = 0; i < 40; i++) {
|
|
155
|
+
const user = i >= 20 ? bob : alice;
|
|
156
|
+
previous = user.createBetween(previous, PositionSource.LAST);
|
|
157
|
+
list.push(previous);
|
|
158
|
+
}
|
|
159
|
+
assertIsOrdered(list);
|
|
160
|
+
});
|
|
161
|
+
it("LtR alternating", () => {
|
|
162
|
+
let previous = PositionSource.FIRST;
|
|
163
|
+
const list = [];
|
|
164
|
+
for (let i = 0; i < 40; i++) {
|
|
165
|
+
const user = i % 2 == 0 ? bob : alice;
|
|
166
|
+
previous = user.createBetween(previous, PositionSource.LAST);
|
|
167
|
+
list.push(previous);
|
|
168
|
+
}
|
|
169
|
+
assertIsOrdered(list);
|
|
170
|
+
});
|
|
171
|
+
it("RtL sequential", () => {
|
|
172
|
+
let previous = PositionSource.LAST;
|
|
173
|
+
const list = [];
|
|
174
|
+
for (let i = 0; i < 40; i++) {
|
|
175
|
+
const user = i >= 20 ? bob : alice;
|
|
176
|
+
previous = user.createBetween(PositionSource.FIRST, previous);
|
|
177
|
+
list.unshift(previous);
|
|
178
|
+
}
|
|
179
|
+
assertIsOrdered(list);
|
|
180
|
+
});
|
|
181
|
+
it("RtL alternating", () => {
|
|
182
|
+
let previous = PositionSource.LAST;
|
|
183
|
+
const list = [];
|
|
184
|
+
for (let i = 0; i < 40; i++) {
|
|
185
|
+
const user = i % 2 == 0 ? bob : alice;
|
|
186
|
+
previous = user.createBetween(PositionSource.FIRST, previous);
|
|
187
|
+
list.unshift(previous);
|
|
188
|
+
}
|
|
189
|
+
assertIsOrdered(list);
|
|
190
|
+
});
|
|
191
|
+
it("restart alternating", () => {
|
|
192
|
+
const list = [];
|
|
193
|
+
for (let j = 0; j < 5; j++) {
|
|
194
|
+
let previous = PositionSource.FIRST;
|
|
195
|
+
let after = list[0]; // out-of-bounds okay
|
|
196
|
+
for (let i = 0; i < 10; i++) {
|
|
197
|
+
const user = i % 2 === 0 ? bob : alice;
|
|
198
|
+
previous = user.createBetween(previous, after);
|
|
199
|
+
list.splice(i, 0, previous);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
assertIsOrdered(list);
|
|
203
|
+
});
|
|
204
|
+
it("LtR concurrent", () => {
|
|
205
|
+
let previous = undefined;
|
|
206
|
+
const list1 = [];
|
|
207
|
+
for (let i = 0; i < 20; i++) {
|
|
208
|
+
previous = alice.createBetween(previous, undefined);
|
|
209
|
+
list1.push(previous);
|
|
210
|
+
}
|
|
211
|
+
previous = undefined;
|
|
212
|
+
const list2 = [];
|
|
213
|
+
for (let i = 0; i < 20; i++) {
|
|
214
|
+
previous = bob.createBetween(previous, undefined);
|
|
215
|
+
list2.push(previous);
|
|
216
|
+
}
|
|
217
|
+
// list1 and list2 should be sorted one after the other, according
|
|
218
|
+
// to their first element (non-interleaving).
|
|
219
|
+
let list;
|
|
220
|
+
if (list1[0] < list2[0]) {
|
|
221
|
+
// list1 < list2
|
|
222
|
+
list = [...list1, ...list2];
|
|
223
|
+
}
|
|
224
|
+
else
|
|
225
|
+
list = [...list2, ...list1];
|
|
226
|
+
assertIsOrdered(list);
|
|
227
|
+
});
|
|
228
|
+
it("RtL concurrent", () => {
|
|
229
|
+
let previous = undefined;
|
|
230
|
+
const list1 = [];
|
|
231
|
+
for (let i = 0; i < 20; i++) {
|
|
232
|
+
previous = alice.createBetween(undefined, previous);
|
|
233
|
+
list1.unshift(previous);
|
|
234
|
+
}
|
|
235
|
+
previous = undefined;
|
|
236
|
+
const list2 = [];
|
|
237
|
+
for (let i = 0; i < 20; i++) {
|
|
238
|
+
previous = bob.createBetween(undefined, previous);
|
|
239
|
+
list2.unshift(previous);
|
|
240
|
+
}
|
|
241
|
+
// list1 and list2 should be sorted one after the other, according
|
|
242
|
+
// to their first element (non-interleaving).
|
|
243
|
+
let list;
|
|
244
|
+
if (list1[0] < list2[0]) {
|
|
245
|
+
// list1 < list2
|
|
246
|
+
list = [...list1, ...list2];
|
|
247
|
+
}
|
|
248
|
+
else
|
|
249
|
+
list = [...list2, ...list1];
|
|
250
|
+
assertIsOrdered(list);
|
|
251
|
+
});
|
|
252
|
+
it("insert between concurrent", () => {
|
|
253
|
+
// "Hard case" from the blog post - see
|
|
254
|
+
// https://mattweidner.com/2022/10/05/basic-list-crdt.html#between-concurrent
|
|
255
|
+
const a = alice.createBetween(undefined, undefined);
|
|
256
|
+
const b = alice.createBetween(a, undefined);
|
|
257
|
+
let c = alice.createBetween(a, b);
|
|
258
|
+
let d = bob.createBetween(a, b);
|
|
259
|
+
// Order so c < d.
|
|
260
|
+
if (d < c)
|
|
261
|
+
[c, d] = [d, c];
|
|
262
|
+
// Try making e on both alice and bob.
|
|
263
|
+
let e1 = alice.createBetween(c, d);
|
|
264
|
+
let e2 = bob.createBetween(c, d);
|
|
265
|
+
assert.notEqual(e1, e2);
|
|
266
|
+
assertIsOrdered([a, c, e1, d, b]);
|
|
267
|
+
assertIsOrdered([a, c, e2, d, b]);
|
|
268
|
+
});
|
|
269
|
+
it("unique after delete", () => {
|
|
270
|
+
const list = [];
|
|
271
|
+
for (let j = 0; j < 5; j++) {
|
|
272
|
+
let previous = PositionSource.FIRST;
|
|
273
|
+
let after = list[0]; // out-of-bounds okay
|
|
274
|
+
for (let i = 0; i < 10; i++) {
|
|
275
|
+
const user = i % 2 === 0 ? bob : alice;
|
|
276
|
+
previous = user.createBetween(previous, after);
|
|
277
|
+
list.splice(i, 0, previous);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
assertIsOrdered(list);
|
|
281
|
+
testUniqueAfterDelete(list, alice);
|
|
282
|
+
testUniqueAfterDelete(list, bob);
|
|
283
|
+
});
|
|
284
|
+
it("left children", () => {
|
|
285
|
+
const gParent = alice.createBetween();
|
|
286
|
+
// Each parent is a child of gParent with the same waypoint but
|
|
287
|
+
// a range of valueIndex's.
|
|
288
|
+
const parents = [];
|
|
289
|
+
let previous = gParent;
|
|
290
|
+
for (let i = 0; i < 500; i++) {
|
|
291
|
+
previous = bob.createBetween(previous, PositionSource.LAST);
|
|
292
|
+
parents.push(previous);
|
|
293
|
+
}
|
|
294
|
+
const list = [gParent, ...parents];
|
|
295
|
+
// Create positions between gParent and the parents; since parent
|
|
296
|
+
// starts with gParent, they'll be left children of parent.
|
|
297
|
+
// This checks that leftVersion() works on those valueSeq's.
|
|
298
|
+
for (let i = 0; i < parents.length; i++) {
|
|
299
|
+
const child = bob.createBetween(gParent, parents[i]);
|
|
300
|
+
list.splice(2 * i + 1, 0, child);
|
|
301
|
+
}
|
|
302
|
+
assertIsOrdered(list);
|
|
303
|
+
testUniqueAfterDelete(list, alice);
|
|
304
|
+
testUniqueAfterDelete(list, bob);
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=manual.test.js.map
|