@fluidframework/merge-tree 2.118.0 → 3.0.0
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/CHANGELOG.md +34 -4
- package/README.md +53 -50
- package/{api-extractor.json → api-extractor/api-extractor-model.json} +1 -1
- package/dist/MergeTreeTextHelper.js +1 -0
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/attributionCollection.js +6 -4
- package/dist/attributionCollection.js.map +1 -1
- package/dist/attributionPolicy.js +3 -4
- package/dist/attributionPolicy.js.map +1 -1
- package/dist/client.js +27 -10
- package/dist/client.js.map +1 -1
- package/dist/collections/rbTree.d.ts.map +1 -1
- package/dist/collections/rbTree.js +3 -0
- package/dist/collections/rbTree.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +25 -26
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/localReference.js +17 -7
- package/dist/localReference.js.map +1 -1
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +90 -74
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeNodeWalk.js +5 -5
- package/dist/mergeTreeNodeWalk.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +117 -90
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/mergeTreeTracking.js +4 -0
- package/dist/mergeTreeTracking.js.map +1 -1
- package/dist/opBuilder.js +9 -10
- package/dist/opBuilder.js.map +1 -1
- package/dist/ordinal.js +1 -2
- package/dist/ordinal.js.map +1 -1
- package/dist/partialLengths.js +109 -73
- package/dist/partialLengths.js.map +1 -1
- package/dist/perspective.js +31 -11
- package/dist/perspective.js.map +1 -1
- package/dist/properties.js +6 -7
- package/dist/properties.js.map +1 -1
- package/dist/referencePositions.d.ts.map +1 -1
- package/dist/referencePositions.js +7 -7
- package/dist/referencePositions.js.map +1 -1
- package/dist/revertibles.js +4 -5
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentGroupCollection.js +2 -0
- package/dist/segmentGroupCollection.js.map +1 -1
- package/dist/segmentInfos.d.ts.map +1 -1
- package/dist/segmentInfos.js +5 -5
- package/dist/segmentInfos.js.map +1 -1
- package/dist/segmentPropertiesManager.js +3 -5
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/sequencePlace.js +3 -3
- package/dist/sequencePlace.js.map +1 -1
- package/dist/snapshotChunks.js +4 -5
- package/dist/snapshotChunks.js.map +1 -1
- package/dist/snapshotLoader.js +85 -70
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js +34 -14
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +18 -10
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/sortedSet.js +1 -3
- package/dist/sortedSet.js.map +1 -1
- package/dist/stamps.js +11 -12
- package/dist/stamps.js.map +1 -1
- package/dist/test/attributionCollection.spec.js +1 -1
- package/dist/test/attributionCollection.spec.js.map +1 -1
- package/dist/test/beastTest.spec.js +15 -11
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.apis.spec.js +2 -3
- package/dist/test/client.apis.spec.js.map +1 -1
- package/dist/test/client.replay.spec.js +17 -7
- package/dist/test/client.replay.spec.js.map +1 -1
- package/dist/test/clientTestHelper.js +7 -4
- package/dist/test/clientTestHelper.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +26 -16
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/obliterateOperations.d.ts.map +1 -1
- package/dist/test/revertibles.spec.js +1 -2
- package/dist/test/revertibles.spec.js.map +1 -1
- package/dist/test/snapshot.utils.d.ts.map +1 -1
- package/dist/test/snapshot.utils.js +7 -5
- package/dist/test/snapshot.utils.js.map +1 -1
- package/dist/test/stamps.spec.js +17 -7
- package/dist/test/stamps.spec.js.map +1 -1
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +19 -17
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +12 -8
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testServer.js +7 -7
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +0 -1
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +9 -10
- package/dist/test/testUtils.js.map +1 -1
- package/dist/test/text.js +2 -3
- package/dist/test/text.js.map +1 -1
- package/dist/test/wordUnitTests.spec.js +1 -2
- package/dist/test/wordUnitTests.spec.js.map +1 -1
- package/dist/textSegment.js +3 -2
- package/dist/textSegment.js.map +1 -1
- package/dist/zamboni.js +20 -10
- package/dist/zamboni.js.map +1 -1
- package/lib/MergeTreeTextHelper.js +1 -0
- package/lib/MergeTreeTextHelper.js.map +1 -1
- package/lib/attributionCollection.js +4 -2
- package/lib/attributionCollection.js.map +1 -1
- package/lib/client.js +10 -3
- package/lib/client.js.map +1 -1
- package/lib/collections/rbTree.d.ts.map +1 -1
- package/lib/collections/rbTree.js +3 -0
- package/lib/collections/rbTree.js.map +1 -1
- package/lib/endOfTreeSegment.d.ts.map +1 -1
- package/lib/endOfTreeSegment.js +25 -26
- package/lib/endOfTreeSegment.js.map +1 -1
- package/lib/legacy.d.ts +1 -1
- package/lib/localReference.js +12 -2
- package/lib/localReference.js.map +1 -1
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +68 -62
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +111 -84
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/mergeTreeTracking.js +4 -0
- package/lib/mergeTreeTracking.js.map +1 -1
- package/lib/partialLengths.js +89 -63
- package/lib/partialLengths.js.map +1 -1
- package/lib/perspective.js +12 -2
- package/lib/perspective.js.map +1 -1
- package/lib/public.d.ts +1 -1
- package/lib/referencePositions.d.ts.map +1 -1
- package/lib/segmentGroupCollection.js +2 -0
- package/lib/segmentGroupCollection.js.map +1 -1
- package/lib/segmentInfos.d.ts.map +1 -1
- package/lib/segmentPropertiesManager.js +1 -3
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotLoader.js +68 -63
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.d.ts.map +1 -1
- package/lib/snapshotV1.js +17 -7
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js +18 -10
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/sortedSet.js +1 -3
- package/lib/sortedSet.js.map +1 -1
- package/lib/test/attributionCollection.spec.js +1 -1
- package/lib/test/attributionCollection.spec.js.map +1 -1
- package/lib/test/beastTest.spec.js +7 -3
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/clientTestHelper.js +7 -4
- package/lib/test/clientTestHelper.js.map +1 -1
- package/lib/test/obliterateOperations.d.ts.map +1 -1
- package/lib/test/snapshot.utils.d.ts.map +1 -1
- package/lib/test/snapshot.utils.js +5 -3
- package/lib/test/snapshot.utils.js.map +1 -1
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +16 -14
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +10 -6
- package/lib/test/testClientLogger.js.map +1 -1
- package/lib/test/testServer.js +5 -5
- package/lib/test/testServer.js.map +1 -1
- package/lib/test/testUtils.d.ts +0 -1
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/textSegment.js +3 -2
- package/lib/textSegment.js.map +1 -1
- package/package.json +39 -58
- package/tsconfig.json +1 -1
- package/internal.d.ts +0 -11
- package/legacy.d.ts +0 -11
- /package/api-extractor/{api-extractor.current.json → api-extractor-report.current.json} +0 -0
- /package/api-extractor/{api-extractor.legacy.json → api-extractor-report.legacy.json} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributionCollection.spec.js","sourceRoot":"","sources":["../../src/test/attributionCollection.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable unicorn/no-null */\n\nimport { strict as assert } from \"node:assert\";\n\nimport {\n\ttype Generator,\n\ttype IRandom,\n\tcreateWeightedGenerator,\n\tmakeRandom,\n\tperformFuzzActions,\n\ttake,\n} from \"@fluid-private/stochastic-test-utils\";\nimport type { AttributionKey } from \"@fluidframework/runtime-definitions/internal\";\n\nimport {\n\tAttributionCollection,\n\ttype SerializedAttributionCollection,\n} from \"../attributionCollection.js\";\nimport { BaseSegment, type ISegment } from \"../mergeTreeNodes.js\";\nimport type { PropertySet } from \"../properties.js\";\n\nconst opKey = (seq: number): AttributionKey => ({ type: \"op\", seq });\nconst detachedKey: AttributionKey = { type: \"detached\", id: 0 };\n\ndescribe(\"AttributionCollection\", () => {\n\tconst makeCollectionWithChannel = ({\n\t\tlength,\n\t\tseq,\n\t}: {\n\t\tlength: number;\n\t\tseq: number;\n\t}): AttributionCollection => {\n\t\tconst collection = new AttributionCollection(length, null);\n\t\tcollection.update(\"foo\", new AttributionCollection(length, opKey(seq)));\n\t\treturn collection;\n\t};\n\n\tdescribe(\".getAtOffset\", () => {\n\t\tdescribe(\"on a collection with a single entry\", () => {\n\t\t\tconst collection = new AttributionCollection(5, opKey(100));\n\n\t\t\tit(\"returns the entry for offsets within the length range\", () => {\n\t\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(100));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tit(\"throws for queries outside the range\", () => {\n\t\t\t\tassert.throws(() => collection.getAtOffset(-1));\n\t\t\t\tassert.throws(() => collection.getAtOffset(5));\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"on a collection with multiple entries\", () => {\n\t\t\tconst collection = new AttributionCollection(3, opKey(100));\n\t\t\tcollection.append(new AttributionCollection(5, opKey(101)));\n\t\t\tit(\"returns the correct entries\", () => {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(100));\n\t\t\t\t}\n\n\t\t\t\tfor (let i = 3; i < 8; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(101));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tit(\"works on collections with entries in channels\", () => {\n\t\t\tconst collection = makeCollectionWithChannel({ length: 3, seq: 300 });\n\t\t\tfor (const offset of [0, 1, 2]) {\n\t\t\t\tassert.deepEqual(collection.getAtOffset(offset, \"foo\"), opKey(300));\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\".getKeysInOffsetRange\", () => {\n\t\tdescribe(\"on a collection with a single entry\", () => {\n\t\t\tconst collection = new AttributionCollection(5, opKey(100));\n\n\t\t\tit(\"returns the entry for offsets within the length range\", () => {\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tcollection.getKeysInOffsetRange(1),\n\t\t\t\t\t[{ offset: 0, key: opKey(100) }],\n\t\t\t\t\t\"first\",\n\t\t\t\t);\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tcollection.getKeysInOffsetRange(4),\n\t\t\t\t\t[{ offset: 0, key: opKey(100) }],\n\t\t\t\t\t\"second\",\n\t\t\t\t);\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tcollection.getKeysInOffsetRange(1, 4),\n\t\t\t\t\t[{ offset: 0, key: opKey(100) }],\n\t\t\t\t\t\"third\",\n\t\t\t\t);\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tcollection.getKeysInOffsetRange(0, 4),\n\t\t\t\t\t[{ offset: 0, key: opKey(100) }],\n\t\t\t\t\t\"fourth\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"throws for queries outside the range\", () => {\n\t\t\t\tassert.throws(() => collection.getKeysInOffsetRange(-1));\n\t\t\t\tassert.throws(() => collection.getKeysInOffsetRange(7));\n\t\t\t\tassert.throws(() => collection.getKeysInOffsetRange(0, -1));\n\t\t\t\tassert.throws(() => collection.getKeysInOffsetRange(1, 7));\n\t\t\t\tassert.throws(() => collection.getKeysInOffsetRange(2, 1));\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"on a collection with multiple entries\", () => {\n\t\t\tconst collection = new AttributionCollection(10, opKey(10));\n\t\t\tcollection.append(new AttributionCollection(10, opKey(20)));\n\t\t\tcollection.append(new AttributionCollection(10, opKey(30)));\n\t\t\tcollection.append(new AttributionCollection(10, opKey(40)));\n\t\t\tcollection.append(new AttributionCollection(10, opKey(50)));\n\n\t\t\tit(\"returns the correct entries\", () => {\n\t\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(15, 25), [\n\t\t\t\t\t{ offset: 10, key: { type: \"op\", seq: 20 } },\n\t\t\t\t\t{ offset: 20, key: { type: \"op\", seq: 30 } },\n\t\t\t\t]);\n\t\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(15, 19), [\n\t\t\t\t\t{ offset: 10, key: { type: \"op\", seq: 20 } },\n\t\t\t\t]);\n\t\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(15, 49), [\n\t\t\t\t\t{ offset: 10, key: { type: \"op\", seq: 20 } },\n\t\t\t\t\t{ offset: 20, key: { type: \"op\", seq: 30 } },\n\t\t\t\t\t{ offset: 30, key: { type: \"op\", seq: 40 } },\n\t\t\t\t\t{ offset: 40, key: { type: \"op\", seq: 50 } },\n\t\t\t\t]);\n\t\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(15, 40), [\n\t\t\t\t\t{ offset: 10, key: { type: \"op\", seq: 20 } },\n\t\t\t\t\t{ offset: 20, key: { type: \"op\", seq: 30 } },\n\t\t\t\t\t{ offset: 30, key: { type: \"op\", seq: 40 } },\n\t\t\t\t\t{ offset: 40, key: { type: \"op\", seq: 50 } },\n\t\t\t\t]);\n\t\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(0), [\n\t\t\t\t\t{ offset: 0, key: { type: \"op\", seq: 10 } },\n\t\t\t\t\t{ offset: 10, key: { type: \"op\", seq: 20 } },\n\t\t\t\t\t{ offset: 20, key: { type: \"op\", seq: 30 } },\n\t\t\t\t\t{ offset: 30, key: { type: \"op\", seq: 40 } },\n\t\t\t\t\t{ offset: 40, key: { type: \"op\", seq: 50 } },\n\t\t\t\t]);\n\t\t\t});\n\t\t});\n\n\t\tit(\"works on collections with entries in channels\", () => {\n\t\t\tconst collection = makeCollectionWithChannel({ length: 3, seq: 300 });\n\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(1, undefined, \"foo\"), [\n\t\t\t\t{ offset: 0, key: opKey(300) },\n\t\t\t]);\n\t\t});\n\t});\n\n\tdescribe(\".splitAt\", () => {\n\t\tdescribe(\"on a collection with 3 entries\", () => {\n\t\t\tlet collection: AttributionCollection;\n\t\t\tbeforeEach(() => {\n\t\t\t\tcollection = new AttributionCollection(3, opKey(100));\n\t\t\t\tcollection.append(new AttributionCollection(2, opKey(101)));\n\t\t\t\tcollection.append(new AttributionCollection(1, opKey(102)));\n\t\t\t});\n\n\t\t\tit(\"can split on non-breakpoints\", () => {\n\t\t\t\tconst splitCollection = collection.splitAt(4);\n\t\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t\t{ offset: 3, key: opKey(101) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(collection.length, 4);\n\t\t\t\tassert.deepEqual(splitCollection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(101) },\n\t\t\t\t\t{ offset: 1, key: opKey(102) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(splitCollection.length, 2);\n\t\t\t});\n\n\t\t\tit(\"can split on breakpoints\", () => {\n\t\t\t\tconst splitCollection = collection.splitAt(5);\n\t\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t\t{ offset: 3, key: opKey(101) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(collection.length, 5);\n\t\t\t\tassert.deepEqual(splitCollection.getAll().root, [{ offset: 0, key: opKey(102) }]);\n\t\t\t\tassert.equal(splitCollection.length, 1);\n\t\t\t});\n\t\t});\n\n\t\tit(\"can split collection with a single value\", () => {\n\t\t\tconst collection = new AttributionCollection(5, opKey(100));\n\t\t\tconst splitCollection = collection.splitAt(3);\n\t\t\tassert.equal(collection.length, 3);\n\t\t\tassert.equal(splitCollection.length, 2);\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tassert.deepEqual(splitCollection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t});\n\n\t\tit(\"splits channels\", () => {\n\t\t\tconst collection = new AttributionCollection(5, null);\n\t\t\tcollection.update(\"foo\", new AttributionCollection(5, opKey(100)));\n\t\t\tconst splitCollection = collection.splitAt(2);\n\t\t\tassert.deepEqual(collection.getAll().channels, {\n\t\t\t\tfoo: [{ offset: 0, key: opKey(100) }],\n\t\t\t});\n\t\t\tassert.deepEqual(splitCollection.getAll().channels, {\n\t\t\t\tfoo: [{ offset: 0, key: opKey(100) }],\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\".append\", () => {\n\t\tit(\"modifies the receiving collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tcollection.append(new AttributionCollection(1, opKey(101)));\n\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t{ offset: 2, key: opKey(101) },\n\t\t\t]);\n\t\t});\n\n\t\tit(\"does not modify the argument collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tconst appendedCollection = new AttributionCollection(1, opKey(101));\n\t\t\tassert.deepEqual(appendedCollection.getAll().root, [{ offset: 0, key: opKey(101) }]);\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(appendedCollection.getAll().root, [{ offset: 0, key: opKey(101) }]);\n\t\t});\n\n\t\tit(\"coalesces referentially equal values at the join point\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tcollection.append(new AttributionCollection(7, opKey(100)));\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tassert.equal(collection.length, 9);\n\t\t});\n\n\t\tdescribe(\"appends channels\", () => {\n\t\t\tit(\"when both collections have the channel\", () => {\n\t\t\t\tconst appender = makeCollectionWithChannel({ length: 2, seq: 100 });\n\t\t\t\tappender.append(makeCollectionWithChannel({ length: 5, seq: 200 }));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: opKey(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: opKey(200),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit(\"when only appended collection has a channel\", () => {\n\t\t\t\tconst appender = new AttributionCollection(2, null);\n\t\t\t\tappender.append(makeCollectionWithChannel({ length: 5, seq: 200 }));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: opKey(200),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit(\"when only segment being appended to has a channel\", () => {\n\t\t\t\tconst appender = makeCollectionWithChannel({ length: 2, seq: 100 });\n\t\t\t\tappender.append(new AttributionCollection(5, null));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: opKey(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\".channelNames\", () => {\n\t\tit(\"is empty when collection has no channels\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tassert.deepEqual(collection.channelNames, []);\n\t\t});\n\n\t\tit(\"returns all channels with content for collection with channels\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2));\n\t\t\tcollection.update(\"bar\", new AttributionCollection(2));\n\t\t\tassert.deepEqual(collection.channelNames, [\"foo\", \"bar\"]);\n\t\t});\n\t});\n\n\tdescribe(\".populateAttributionCollections\", () => {\n\t\tit(\"correctly splits segment boundaries on breakpoints\", () => {\n\t\t\tconst segments = [{ cachedLength: 5 }, { cachedLength: 4 }] as ISegment[];\n\t\t\tAttributionCollection.populateAttributionCollections(segments, {\n\t\t\t\tlength: 9,\n\t\t\t\tposBreakpoints: [0, 2, 5, 7],\n\t\t\t\tseqs: [10, 12, 15, 17],\n\t\t\t});\n\t\t\tassert.deepEqual(segments[0].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(10) },\n\t\t\t\t{ offset: 2, key: opKey(12) },\n\t\t\t]);\n\n\t\t\tassert.deepEqual(segments[1].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(15) },\n\t\t\t\t{ offset: 2, key: opKey(17) },\n\t\t\t]);\n\n\t\t\tfor (const segment of segments) {\n\t\t\t\tassert.equal(segment.attribution?.length, segment.cachedLength);\n\t\t\t}\n\t\t});\n\n\t\tit(\"correctly splits segment boundaries between breakpoints\", () => {\n\t\t\tconst segments = [{ cachedLength: 4 }, { cachedLength: 5 }] as ISegment[];\n\t\t\tAttributionCollection.populateAttributionCollections(segments, {\n\t\t\t\tlength: 9,\n\t\t\t\tposBreakpoints: [0, 2, 5, 7],\n\t\t\t\tseqs: [10, 12, 15, 17],\n\t\t\t});\n\t\t\tassert.deepEqual(segments[0].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(10) },\n\t\t\t\t{ offset: 2, key: opKey(12) },\n\t\t\t]);\n\n\t\t\tassert.deepEqual(segments[1].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(12) },\n\t\t\t\t{ offset: 1, key: opKey(15) },\n\t\t\t\t{ offset: 3, key: opKey(17) },\n\t\t\t]);\n\n\t\t\tfor (const segment of segments) {\n\t\t\t\tassert.equal(segment.attribution?.length, segment.cachedLength);\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\"serializeAttributionCollections\", () => {\n\t\tit(\"combines equal values on endpoints\", () => {\n\t\t\tconst segments = [\n\t\t\t\t{\n\t\t\t\t\tattribution: new AttributionCollection(4, opKey(0)),\n\t\t\t\t\tcachedLength: 4,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tattribution: new AttributionCollection(5, opKey(0)),\n\t\t\t\t\tcachedLength: 5,\n\t\t\t\t},\n\t\t\t] as unknown as ISegment[];\n\t\t\tconst blob = AttributionCollection.serializeAttributionCollections(segments);\n\t\t\tassert.deepEqual(blob, {\n\t\t\t\tposBreakpoints: [0],\n\t\t\t\tseqs: [0],\n\t\t\t\tlength: 9,\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"serializeAttributionCollections and populateAttributionCollections round-trip\", () => {\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst seg = (length: number): ISegment => ({ cachedLength: length }) as ISegment;\n\t\tconst testCases: {\n\t\t\tname: string;\n\t\t\tblob: SerializedAttributionCollection;\n\t\t\tsegments: ISegment[];\n\t\t}[] = [\n\t\t\t{\n\t\t\t\tname: \"single key\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 3,\n\t\t\t\t\tposBreakpoints: [0],\n\t\t\t\t\tseqs: [51],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"several keys on a single segment\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 1, 3, 5],\n\t\t\t\t\tseqs: [1, 2, 3, 4],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(7)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"key spanning multiple segments\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0],\n\t\t\t\t\tseqs: [1],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"key and segment boundary that align\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 3],\n\t\t\t\t\tseqs: [0, 1],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"detached attribution keys\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 3],\n\t\t\t\t\tseqs: [1, detachedKey],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"entry with channels\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 5],\n\t\t\t\t\tseqs: [3, null],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: {\n\t\t\t\t\t\t\tposBreakpoints: [0, 3, 5],\n\t\t\t\t\t\t\tseqs: [4, null, 5],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t];\n\n\t\tfor (const { name, blob, segments } of testCases) {\n\t\t\tit(name, () => {\n\t\t\t\tAttributionCollection.populateAttributionCollections(segments, blob);\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tAttributionCollection.serializeAttributionCollections(segments),\n\t\t\t\t\tblob,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\n\tdescribe(\".clone\", () => {\n\t\tit(\"copies the original collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tconst appendedCollection = new AttributionCollection(1, opKey(101));\n\t\t\tconst copy = collection.clone();\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t{ offset: 2, key: opKey(101) },\n\t\t\t]);\n\t\t\tassert.deepEqual(copy.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t});\n\n\t\tit(\"copies channels\", () => {\n\t\t\tconst collection = makeCollectionWithChannel({ length: 2, seq: 25 });\n\t\t\tconst appendedCollection = makeCollectionWithChannel({ length: 3, seq: 26 });\n\t\t\tconst copy = collection.clone();\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(collection.getAll().channels?.foo, [\n\t\t\t\t{ offset: 0, key: opKey(25) },\n\t\t\t\t{ offset: 2, key: opKey(26) },\n\t\t\t]);\n\t\t\tassert.deepEqual(copy.getAll().channels?.foo, [{ offset: 0, key: opKey(25) }]);\n\t\t});\n\t});\n\n\tdescribe(\".update\", () => {\n\t\tlet collection: AttributionCollection;\n\t\tbeforeEach(() => {\n\t\t\tcollection = new AttributionCollection(2, null);\n\t\t\tcollection.update(\"bar\", new AttributionCollection(2, opKey(10)));\n\t\t\tassert.deepEqual(\n\t\t\t\tcollection.getAtOffset(0, \"foo\"),\n\t\t\t\tundefined,\n\t\t\t\t\"channel should be undefined on creation\",\n\t\t\t);\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tassert.deepEqual(\n\t\t\t\tcollection.getAtOffset(0, \"bar\"),\n\t\t\t\topKey(10),\n\t\t\t\t\"update should never modify unrelated channels\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"creates a new channel when updating from an undefined state\", () => {\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(5)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0, \"foo\"), opKey(5));\n\t\t});\n\n\t\tit(\"overrides earlier calls with later ones\", () => {\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(3)));\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(5)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0, \"foo\"), opKey(5));\n\t\t});\n\n\t\tit(\"can update the root channel\", () => {\n\t\t\tcollection.update(undefined, new AttributionCollection(2, opKey(3)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0), opKey(3));\n\t\t});\n\n\t\tit(\"doesn't tolerate updates to channels having inconsistent length fields\", () => {\n\t\t\tassert.throws(() => collection.update(\"foo\", new AttributionCollection(3, null)));\n\t\t});\n\t});\n\n\tdescribe(\"serialized structure is independent of segment lengths\", () => {\n\t\tinterface State {\n\t\t\trandom: IRandom;\n\t\t\tsegments: ISegment[];\n\t\t}\n\n\t\tinterface InsertAction {\n\t\t\ttype: \"insert\";\n\t\t\tcollection: AttributionCollection;\n\t\t}\n\n\t\tinterface SplitAction {\n\t\t\ttype: \"split\";\n\t\t\tsegIndex: number;\n\t\t\toffset: number;\n\t\t}\n\n\t\tinterface AppendAction {\n\t\t\ttype: \"append\";\n\t\t\tsegIndex: number;\n\t\t}\n\n\t\tclass Segment extends BaseSegment {\n\t\t\tpublic readonly type = \"testSeg\";\n\t\t\tpublic constructor(length: number) {\n\t\t\t\tsuper();\n\t\t\t\tthis.cachedLength = length;\n\t\t\t}\n\n\t\t\tpublic toJSONObject(): {\n\t\t\t\tlength: number;\n\t\t\t\tprops: PropertySet | undefined;\n\t\t\t} {\n\t\t\t\treturn { length: this.cachedLength, props: this.properties };\n\t\t\t}\n\n\t\t\tpublic clone(): ISegment {\n\t\t\t\tconst seg = new Segment(this.cachedLength);\n\t\t\t\tthis.cloneInto(seg);\n\t\t\t\treturn seg;\n\t\t\t}\n\n\t\t\tprotected createSplitSegmentAt(pos: number): BaseSegment | undefined {\n\t\t\t\tif (pos > 0) {\n\t\t\t\t\tconst leafSegment = new Segment(this.cachedLength - pos);\n\t\t\t\t\tthis.cachedLength = pos;\n\t\t\t\t\treturn leafSegment;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let seed = 0; seed < 10; seed++) {\n\t\t\tconst segmentCount = 100;\n\t\t\tit(`with randomly generated segments, seed ${seed}`, () => {\n\t\t\t\tconst generateAttributionKey = (random: IRandom): AttributionKey | null =>\n\t\t\t\t\trandom.bool(0.8) ? opKey(random.integer(0, 10)) : random.bool() ? detachedKey : null;\n\n\t\t\t\tconst channelNamePool = [\"ch1\", \"ch2\", \"ch3\"];\n\t\t\t\tconst insertGenerator: Generator<InsertAction, State> = take(\n\t\t\t\t\tsegmentCount,\n\t\t\t\t\t({ random }) => {\n\t\t\t\t\t\tconst length = random.integer(1, 20);\n\t\t\t\t\t\tconst collection = new AttributionCollection(\n\t\t\t\t\t\t\tlength,\n\t\t\t\t\t\t\tgenerateAttributionKey(random),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (random.bool(0.25)) {\n\t\t\t\t\t\t\tfor (const channel of channelNamePool) {\n\t\t\t\t\t\t\t\tif (random.bool()) {\n\t\t\t\t\t\t\t\t\tcollection.update(\n\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\tnew AttributionCollection(length, generateAttributionKey(random)),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"insert\",\n\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tconst initialState = performFuzzActions<InsertAction, State>(\n\t\t\t\t\tinsertGenerator,\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: (state, { collection }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tconst seg = new Segment(collection.length);\n\t\t\t\t\t\t\tseg.attribution = collection;\n\t\t\t\t\t\t\tsegments.push(seg);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{ random: makeRandom(seed), segments: [] },\n\t\t\t\t);\n\n\t\t\t\tconst expected = AttributionCollection.serializeAttributionCollections(\n\t\t\t\t\tinitialState.segments,\n\t\t\t\t);\n\n\t\t\t\tconst split: Generator<SplitAction, State> = ({ segments, random }) => {\n\t\t\t\t\tconst validIndices = segments\n\t\t\t\t\t\t.map((seg, i) => (seg.cachedLength > 1 ? i : -1))\n\t\t\t\t\t\t.filter((i) => i >= 0);\n\n\t\t\t\t\tconst segIndex = random.pick(validIndices);\n\t\t\t\t\tconst offset = random.integer(1, segments[segIndex].cachedLength - 1);\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"split\",\n\t\t\t\t\t\tsegIndex,\n\t\t\t\t\t\toffset,\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tconst append: Generator<AppendAction, State> = ({ random, segments }) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"append\",\n\t\t\t\t\t\tsegIndex: random.integer(0, segments.length - 2),\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tconst finalState = performFuzzActions<SplitAction | AppendAction, State>(\n\t\t\t\t\ttake(\n\t\t\t\t\t\tsegmentCount,\n\t\t\t\t\t\t// Note: if playing around with constants in this test, it may be necessary to\n\t\t\t\t\t\t// introduce acceptance criteria here for split.\n\t\t\t\t\t\tcreateWeightedGenerator<SplitAction | AppendAction, State>([\n\t\t\t\t\t\t\t[split, 1],\n\t\t\t\t\t\t\t[append, 1, ({ segments }): boolean => segments.length > 1],\n\t\t\t\t\t\t]),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tsplit: (state, { segIndex, offset }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tconst splitSeg = segments[segIndex].splitAt(offset);\n\t\t\t\t\t\t\tassert(splitSeg !== undefined);\n\t\t\t\t\t\t\tsegments.splice(segIndex + 1, 0, splitSeg);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tappend: (state, { segIndex }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tsegments[segIndex].append(segments[segIndex + 1]);\n\t\t\t\t\t\t\tsegments.splice(segIndex + 1, 1);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tinitialState,\n\t\t\t\t);\n\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tAttributionCollection.serializeAttributionCollections(finalState.segments),\n\t\t\t\t\texpected,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"attributionCollection.spec.js","sourceRoot":"","sources":["../../src/test/attributionCollection.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable unicorn/no-null */\n\nimport { strict as assert } from \"node:assert\";\n\nimport {\n\ttype Generator,\n\ttype IRandom,\n\tcreateWeightedGenerator,\n\tmakeRandom,\n\tperformFuzzActions,\n\ttake,\n} from \"@fluid-private/stochastic-test-utils\";\nimport type { AttributionKey } from \"@fluidframework/runtime-definitions/internal\";\n\nimport {\n\tAttributionCollection,\n\ttype SerializedAttributionCollection,\n} from \"../attributionCollection.js\";\nimport { BaseSegment, type ISegment } from \"../mergeTreeNodes.js\";\nimport type { PropertySet } from \"../properties.js\";\n\nconst opKey = (seq: number): AttributionKey => ({ type: \"op\", seq });\nconst detachedKey: AttributionKey = { type: \"detached\", id: 0 };\n\ndescribe(\"AttributionCollection\", () => {\n\tconst makeCollectionWithChannel = ({\n\t\tlength,\n\t\tseq,\n\t}: {\n\t\tlength: number;\n\t\tseq: number;\n\t}): AttributionCollection => {\n\t\tconst collection = new AttributionCollection(length, null);\n\t\tcollection.update(\"foo\", new AttributionCollection(length, opKey(seq)));\n\t\treturn collection;\n\t};\n\n\tdescribe(\".getAtOffset\", () => {\n\t\tdescribe(\"on a collection with a single entry\", () => {\n\t\t\tconst collection = new AttributionCollection(5, opKey(100));\n\n\t\t\tit(\"returns the entry for offsets within the length range\", () => {\n\t\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(100));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tit(\"throws for queries outside the range\", () => {\n\t\t\t\tassert.throws(() => collection.getAtOffset(-1));\n\t\t\t\tassert.throws(() => collection.getAtOffset(5));\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"on a collection with multiple entries\", () => {\n\t\t\tconst collection = new AttributionCollection(3, opKey(100));\n\t\t\tcollection.append(new AttributionCollection(5, opKey(101)));\n\t\t\tit(\"returns the correct entries\", () => {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(100));\n\t\t\t\t}\n\n\t\t\t\tfor (let i = 3; i < 8; i++) {\n\t\t\t\t\tassert.deepEqual(collection.getAtOffset(i), opKey(101));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tit(\"works on collections with entries in channels\", () => {\n\t\t\tconst collection = makeCollectionWithChannel({ length: 3, seq: 300 });\n\t\t\tfor (const offset of [0, 1, 2]) {\n\t\t\t\tassert.deepEqual(collection.getAtOffset(offset, \"foo\"), opKey(300));\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\".getKeysInOffsetRange\", () => {\n\t\tdescribe(\"on a collection with a single entry\", () => {\n\t\t\tconst collection = new AttributionCollection(5, opKey(100));\n\n\t\t\tit(\"returns the entry for offsets within the length range\", () => {\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tcollection.getKeysInOffsetRange(1),\n\t\t\t\t\t[{ offset: 0, key: opKey(100) }],\n\t\t\t\t\t\"first\",\n\t\t\t\t);\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tcollection.getKeysInOffsetRange(4),\n\t\t\t\t\t[{ offset: 0, key: opKey(100) }],\n\t\t\t\t\t\"second\",\n\t\t\t\t);\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tcollection.getKeysInOffsetRange(1, 4),\n\t\t\t\t\t[{ offset: 0, key: opKey(100) }],\n\t\t\t\t\t\"third\",\n\t\t\t\t);\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tcollection.getKeysInOffsetRange(0, 4),\n\t\t\t\t\t[{ offset: 0, key: opKey(100) }],\n\t\t\t\t\t\"fourth\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"throws for queries outside the range\", () => {\n\t\t\t\tassert.throws(() => collection.getKeysInOffsetRange(-1));\n\t\t\t\tassert.throws(() => collection.getKeysInOffsetRange(7));\n\t\t\t\tassert.throws(() => collection.getKeysInOffsetRange(0, -1));\n\t\t\t\tassert.throws(() => collection.getKeysInOffsetRange(1, 7));\n\t\t\t\tassert.throws(() => collection.getKeysInOffsetRange(2, 1));\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"on a collection with multiple entries\", () => {\n\t\t\tconst collection = new AttributionCollection(10, opKey(10));\n\t\t\tcollection.append(new AttributionCollection(10, opKey(20)));\n\t\t\tcollection.append(new AttributionCollection(10, opKey(30)));\n\t\t\tcollection.append(new AttributionCollection(10, opKey(40)));\n\t\t\tcollection.append(new AttributionCollection(10, opKey(50)));\n\n\t\t\tit(\"returns the correct entries\", () => {\n\t\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(15, 25), [\n\t\t\t\t\t{ offset: 10, key: { type: \"op\", seq: 20 } },\n\t\t\t\t\t{ offset: 20, key: { type: \"op\", seq: 30 } },\n\t\t\t\t]);\n\t\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(15, 19), [\n\t\t\t\t\t{ offset: 10, key: { type: \"op\", seq: 20 } },\n\t\t\t\t]);\n\t\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(15, 49), [\n\t\t\t\t\t{ offset: 10, key: { type: \"op\", seq: 20 } },\n\t\t\t\t\t{ offset: 20, key: { type: \"op\", seq: 30 } },\n\t\t\t\t\t{ offset: 30, key: { type: \"op\", seq: 40 } },\n\t\t\t\t\t{ offset: 40, key: { type: \"op\", seq: 50 } },\n\t\t\t\t]);\n\t\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(15, 40), [\n\t\t\t\t\t{ offset: 10, key: { type: \"op\", seq: 20 } },\n\t\t\t\t\t{ offset: 20, key: { type: \"op\", seq: 30 } },\n\t\t\t\t\t{ offset: 30, key: { type: \"op\", seq: 40 } },\n\t\t\t\t\t{ offset: 40, key: { type: \"op\", seq: 50 } },\n\t\t\t\t]);\n\t\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(0), [\n\t\t\t\t\t{ offset: 0, key: { type: \"op\", seq: 10 } },\n\t\t\t\t\t{ offset: 10, key: { type: \"op\", seq: 20 } },\n\t\t\t\t\t{ offset: 20, key: { type: \"op\", seq: 30 } },\n\t\t\t\t\t{ offset: 30, key: { type: \"op\", seq: 40 } },\n\t\t\t\t\t{ offset: 40, key: { type: \"op\", seq: 50 } },\n\t\t\t\t]);\n\t\t\t});\n\t\t});\n\n\t\tit(\"works on collections with entries in channels\", () => {\n\t\t\tconst collection = makeCollectionWithChannel({ length: 3, seq: 300 });\n\t\t\tassert.deepEqual(collection.getKeysInOffsetRange(1, undefined, \"foo\"), [\n\t\t\t\t{ offset: 0, key: opKey(300) },\n\t\t\t]);\n\t\t});\n\t});\n\n\tdescribe(\".splitAt\", () => {\n\t\tdescribe(\"on a collection with 3 entries\", () => {\n\t\t\tlet collection: AttributionCollection;\n\t\t\tbeforeEach(() => {\n\t\t\t\tcollection = new AttributionCollection(3, opKey(100));\n\t\t\t\tcollection.append(new AttributionCollection(2, opKey(101)));\n\t\t\t\tcollection.append(new AttributionCollection(1, opKey(102)));\n\t\t\t});\n\n\t\t\tit(\"can split on non-breakpoints\", () => {\n\t\t\t\tconst splitCollection = collection.splitAt(4);\n\t\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t\t{ offset: 3, key: opKey(101) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(collection.length, 4);\n\t\t\t\tassert.deepEqual(splitCollection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(101) },\n\t\t\t\t\t{ offset: 1, key: opKey(102) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(splitCollection.length, 2);\n\t\t\t});\n\n\t\t\tit(\"can split on breakpoints\", () => {\n\t\t\t\tconst splitCollection = collection.splitAt(5);\n\t\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t\t{ offset: 3, key: opKey(101) },\n\t\t\t\t]);\n\t\t\t\tassert.equal(collection.length, 5);\n\t\t\t\tassert.deepEqual(splitCollection.getAll().root, [{ offset: 0, key: opKey(102) }]);\n\t\t\t\tassert.equal(splitCollection.length, 1);\n\t\t\t});\n\t\t});\n\n\t\tit(\"can split collection with a single value\", () => {\n\t\t\tconst collection = new AttributionCollection(5, opKey(100));\n\t\t\tconst splitCollection = collection.splitAt(3);\n\t\t\tassert.equal(collection.length, 3);\n\t\t\tassert.equal(splitCollection.length, 2);\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tassert.deepEqual(splitCollection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t});\n\n\t\tit(\"splits channels\", () => {\n\t\t\tconst collection = new AttributionCollection(5, null);\n\t\t\tcollection.update(\"foo\", new AttributionCollection(5, opKey(100)));\n\t\t\tconst splitCollection = collection.splitAt(2);\n\t\t\tassert.deepEqual(collection.getAll().channels, {\n\t\t\t\tfoo: [{ offset: 0, key: opKey(100) }],\n\t\t\t});\n\t\t\tassert.deepEqual(splitCollection.getAll().channels, {\n\t\t\t\tfoo: [{ offset: 0, key: opKey(100) }],\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\".append\", () => {\n\t\tit(\"modifies the receiving collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tcollection.append(new AttributionCollection(1, opKey(101)));\n\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t{ offset: 2, key: opKey(101) },\n\t\t\t]);\n\t\t});\n\n\t\tit(\"does not modify the argument collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tconst appendedCollection = new AttributionCollection(1, opKey(101));\n\t\t\tassert.deepEqual(appendedCollection.getAll().root, [{ offset: 0, key: opKey(101) }]);\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(appendedCollection.getAll().root, [{ offset: 0, key: opKey(101) }]);\n\t\t});\n\n\t\tit(\"coalesces referentially equal values at the join point\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tcollection.append(new AttributionCollection(7, opKey(100)));\n\t\t\tassert.deepEqual(collection.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t\tassert.equal(collection.length, 9);\n\t\t});\n\n\t\tdescribe(\"appends channels\", () => {\n\t\t\tit(\"when both collections have the channel\", () => {\n\t\t\t\tconst appender = makeCollectionWithChannel({ length: 2, seq: 100 });\n\t\t\t\tappender.append(makeCollectionWithChannel({ length: 5, seq: 200 }));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: opKey(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: opKey(200),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit(\"when only appended collection has a channel\", () => {\n\t\t\t\tconst appender = new AttributionCollection(2, null);\n\t\t\t\tappender.append(makeCollectionWithChannel({ length: 5, seq: 200 }));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: opKey(200),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit(\"when only segment being appended to has a channel\", () => {\n\t\t\t\tconst appender = makeCollectionWithChannel({ length: 2, seq: 100 });\n\t\t\t\tappender.append(new AttributionCollection(5, null));\n\t\t\t\tassert.deepEqual(appender.getAll(), {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\troot: [{ offset: 0, key: null }],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t\t\tkey: opKey(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toffset: 2,\n\t\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\".channelNames\", () => {\n\t\tit(\"is empty when collection has no channels\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tassert.deepEqual(collection.channelNames, []);\n\t\t});\n\n\t\tit(\"returns all channels with content for collection with channels\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2));\n\t\t\tcollection.update(\"bar\", new AttributionCollection(2));\n\t\t\tassert.deepEqual(collection.channelNames, [\"foo\", \"bar\"]);\n\t\t});\n\t});\n\n\tdescribe(\".populateAttributionCollections\", () => {\n\t\tit(\"correctly splits segment boundaries on breakpoints\", () => {\n\t\t\tconst segments = [{ cachedLength: 5 }, { cachedLength: 4 }] as ISegment[];\n\t\t\tAttributionCollection.populateAttributionCollections(segments, {\n\t\t\t\tlength: 9,\n\t\t\t\tposBreakpoints: [0, 2, 5, 7],\n\t\t\t\tseqs: [10, 12, 15, 17],\n\t\t\t});\n\t\t\tassert.deepEqual(segments[0].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(10) },\n\t\t\t\t{ offset: 2, key: opKey(12) },\n\t\t\t]);\n\n\t\t\tassert.deepEqual(segments[1].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(15) },\n\t\t\t\t{ offset: 2, key: opKey(17) },\n\t\t\t]);\n\n\t\t\tfor (const segment of segments) {\n\t\t\t\tassert.equal(segment.attribution?.length, segment.cachedLength);\n\t\t\t}\n\t\t});\n\n\t\tit(\"correctly splits segment boundaries between breakpoints\", () => {\n\t\t\tconst segments = [{ cachedLength: 4 }, { cachedLength: 5 }] as ISegment[];\n\t\t\tAttributionCollection.populateAttributionCollections(segments, {\n\t\t\t\tlength: 9,\n\t\t\t\tposBreakpoints: [0, 2, 5, 7],\n\t\t\t\tseqs: [10, 12, 15, 17],\n\t\t\t});\n\t\t\tassert.deepEqual(segments[0].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(10) },\n\t\t\t\t{ offset: 2, key: opKey(12) },\n\t\t\t]);\n\n\t\t\tassert.deepEqual(segments[1].attribution?.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(12) },\n\t\t\t\t{ offset: 1, key: opKey(15) },\n\t\t\t\t{ offset: 3, key: opKey(17) },\n\t\t\t]);\n\n\t\t\tfor (const segment of segments) {\n\t\t\t\tassert.equal(segment.attribution?.length, segment.cachedLength);\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\"serializeAttributionCollections\", () => {\n\t\tit(\"combines equal values on endpoints\", () => {\n\t\t\tconst segments = [\n\t\t\t\t{\n\t\t\t\t\tattribution: new AttributionCollection(4, opKey(0)),\n\t\t\t\t\tcachedLength: 4,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tattribution: new AttributionCollection(5, opKey(0)),\n\t\t\t\t\tcachedLength: 5,\n\t\t\t\t},\n\t\t\t] as unknown as ISegment[];\n\t\t\tconst blob = AttributionCollection.serializeAttributionCollections(segments);\n\t\t\tassert.deepEqual(blob, {\n\t\t\t\tposBreakpoints: [0],\n\t\t\t\tseqs: [0],\n\t\t\t\tlength: 9,\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"serializeAttributionCollections and populateAttributionCollections round-trip\", () => {\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst seg = (length: number): ISegment => ({ cachedLength: length }) as ISegment;\n\t\tconst testCases: {\n\t\t\tname: string;\n\t\t\tblob: SerializedAttributionCollection;\n\t\t\tsegments: ISegment[];\n\t\t}[] = [\n\t\t\t{\n\t\t\t\tname: \"single key\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 3,\n\t\t\t\t\tposBreakpoints: [0],\n\t\t\t\t\tseqs: [51],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"several keys on a single segment\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 1, 3, 5],\n\t\t\t\t\tseqs: [1, 2, 3, 4],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(7)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"key spanning multiple segments\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0],\n\t\t\t\t\tseqs: [1],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"key and segment boundary that align\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 3],\n\t\t\t\t\tseqs: [0, 1],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"detached attribution keys\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 3],\n\t\t\t\t\tseqs: [1, detachedKey],\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"entry with channels\",\n\t\t\t\tblob: {\n\t\t\t\t\tlength: 7,\n\t\t\t\t\tposBreakpoints: [0, 5],\n\t\t\t\t\tseqs: [3, null],\n\t\t\t\t\tchannels: {\n\t\t\t\t\t\tfoo: {\n\t\t\t\t\t\t\tposBreakpoints: [0, 3, 5],\n\t\t\t\t\t\t\tseqs: [4, null, 5],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsegments: [seg(3), seg(4)],\n\t\t\t},\n\t\t];\n\n\t\tfor (const { name, blob, segments } of testCases) {\n\t\t\tit(name, () => {\n\t\t\t\tAttributionCollection.populateAttributionCollections(segments, blob);\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tAttributionCollection.serializeAttributionCollections(segments),\n\t\t\t\t\tblob,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\n\tdescribe(\".clone\", () => {\n\t\tit(\"copies the original collection\", () => {\n\t\t\tconst collection = new AttributionCollection(2, opKey(100));\n\t\t\tconst appendedCollection = new AttributionCollection(1, opKey(101));\n\t\t\tconst copy = collection.clone();\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(collection.getAll().root, [\n\t\t\t\t{ offset: 0, key: opKey(100) },\n\t\t\t\t{ offset: 2, key: opKey(101) },\n\t\t\t]);\n\t\t\tassert.deepEqual(copy.getAll().root, [{ offset: 0, key: opKey(100) }]);\n\t\t});\n\n\t\tit(\"copies channels\", () => {\n\t\t\tconst collection = makeCollectionWithChannel({ length: 2, seq: 25 });\n\t\t\tconst appendedCollection = makeCollectionWithChannel({ length: 3, seq: 26 });\n\t\t\tconst copy = collection.clone();\n\t\t\tcollection.append(appendedCollection);\n\t\t\tassert.deepEqual(collection.getAll().channels?.foo, [\n\t\t\t\t{ offset: 0, key: opKey(25) },\n\t\t\t\t{ offset: 2, key: opKey(26) },\n\t\t\t]);\n\t\t\tassert.deepEqual(copy.getAll().channels?.foo, [{ offset: 0, key: opKey(25) }]);\n\t\t});\n\t});\n\n\tdescribe(\".update\", () => {\n\t\tlet collection: AttributionCollection;\n\t\tbeforeEach(() => {\n\t\t\tcollection = new AttributionCollection(2, null);\n\t\t\tcollection.update(\"bar\", new AttributionCollection(2, opKey(10)));\n\t\t\tassert.deepEqual(\n\t\t\t\tcollection.getAtOffset(0, \"foo\"),\n\t\t\t\tundefined,\n\t\t\t\t\"channel should be undefined on creation\",\n\t\t\t);\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tassert.deepEqual(\n\t\t\t\tcollection.getAtOffset(0, \"bar\"),\n\t\t\t\topKey(10),\n\t\t\t\t\"update should never modify unrelated channels\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"creates a new channel when updating from an undefined state\", () => {\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(5)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0, \"foo\"), opKey(5));\n\t\t});\n\n\t\tit(\"overrides earlier calls with later ones\", () => {\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(3)));\n\t\t\tcollection.update(\"foo\", new AttributionCollection(2, opKey(5)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0, \"foo\"), opKey(5));\n\t\t});\n\n\t\tit(\"can update the root channel\", () => {\n\t\t\tcollection.update(undefined, new AttributionCollection(2, opKey(3)));\n\t\t\tassert.deepEqual(collection.getAtOffset(0), opKey(3));\n\t\t});\n\n\t\tit(\"doesn't tolerate updates to channels having inconsistent length fields\", () => {\n\t\t\tassert.throws(() => collection.update(\"foo\", new AttributionCollection(3, null)));\n\t\t});\n\t});\n\n\tdescribe(\"serialized structure is independent of segment lengths\", () => {\n\t\tinterface State {\n\t\t\trandom: IRandom;\n\t\t\tsegments: ISegment[];\n\t\t}\n\n\t\tinterface InsertAction {\n\t\t\ttype: \"insert\";\n\t\t\tcollection: AttributionCollection;\n\t\t}\n\n\t\tinterface SplitAction {\n\t\t\ttype: \"split\";\n\t\t\tsegIndex: number;\n\t\t\toffset: number;\n\t\t}\n\n\t\tinterface AppendAction {\n\t\t\ttype: \"append\";\n\t\t\tsegIndex: number;\n\t\t}\n\n\t\tclass Segment extends BaseSegment {\n\t\t\tpublic readonly type = \"testSeg\";\n\t\t\tpublic constructor(length: number) {\n\t\t\t\tsuper();\n\t\t\t\tthis.cachedLength = length;\n\t\t\t}\n\n\t\t\tpublic toJSONObject(): {\n\t\t\t\tlength: number;\n\t\t\t\tprops: PropertySet | undefined;\n\t\t\t} {\n\t\t\t\treturn { length: this.cachedLength, props: this.properties };\n\t\t\t}\n\n\t\t\tpublic clone(): ISegment {\n\t\t\t\tconst seg = new Segment(this.cachedLength);\n\t\t\t\tthis.cloneInto(seg);\n\t\t\t\treturn seg;\n\t\t\t}\n\n\t\t\tprotected createSplitSegmentAt(pos: number): BaseSegment | undefined {\n\t\t\t\tif (pos > 0) {\n\t\t\t\t\tconst leafSegment = new Segment(this.cachedLength - pos);\n\t\t\t\t\tthis.cachedLength = pos;\n\t\t\t\t\treturn leafSegment;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let seed = 0; seed < 10; seed++) {\n\t\t\tconst segmentCount = 100;\n\t\t\tit(`with randomly generated segments, seed ${seed}`, () => {\n\t\t\t\tconst generateAttributionKey = (random: IRandom): AttributionKey | null =>\n\t\t\t\t\trandom.bool(0.8) ? opKey(random.integer(0, 10)) : random.bool() ? detachedKey : null;\n\n\t\t\t\tconst channelNamePool = [\"ch1\", \"ch2\", \"ch3\"];\n\t\t\t\tconst insertGenerator: Generator<InsertAction, State> = take(\n\t\t\t\t\tsegmentCount,\n\t\t\t\t\t({ random }) => {\n\t\t\t\t\t\tconst length = random.integer(1, 20);\n\t\t\t\t\t\tconst collection = new AttributionCollection(\n\t\t\t\t\t\t\tlength,\n\t\t\t\t\t\t\tgenerateAttributionKey(random),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (random.bool(0.25)) {\n\t\t\t\t\t\t\tfor (const channel of channelNamePool) {\n\t\t\t\t\t\t\t\tif (random.bool()) {\n\t\t\t\t\t\t\t\t\tcollection.update(\n\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\tnew AttributionCollection(length, generateAttributionKey(random)),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"insert\",\n\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tconst initialState = performFuzzActions<InsertAction, State>(\n\t\t\t\t\tinsertGenerator,\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: (state, { collection }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tconst seg = new Segment(collection.length);\n\t\t\t\t\t\t\tseg.attribution = collection;\n\t\t\t\t\t\t\tsegments.push(seg);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{ random: makeRandom(seed), segments: [] },\n\t\t\t\t);\n\n\t\t\t\tconst expected = AttributionCollection.serializeAttributionCollections(\n\t\t\t\t\tinitialState.segments,\n\t\t\t\t);\n\n\t\t\t\tconst split: Generator<SplitAction, State> = ({ segments, random }) => {\n\t\t\t\t\tconst validIndices = segments\n\t\t\t\t\t\t.map((seg, i) => (seg.cachedLength > 1 ? i : -1))\n\t\t\t\t\t\t.filter((i) => i >= 0);\n\n\t\t\t\t\tconst segIndex = random.pick(validIndices);\n\t\t\t\t\tconst offset = random.integer(1, segments[segIndex].cachedLength - 1);\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"split\",\n\t\t\t\t\t\tsegIndex,\n\t\t\t\t\t\toffset,\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tconst append: Generator<AppendAction, State> = ({ random, segments }) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"append\",\n\t\t\t\t\t\tsegIndex: random.integer(0, segments.length - 2),\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tconst finalState = performFuzzActions<SplitAction | AppendAction, State>(\n\t\t\t\t\ttake(\n\t\t\t\t\t\tsegmentCount,\n\t\t\t\t\t\t// Note: if playing around with constants in this test, it may be necessary to\n\t\t\t\t\t\t// introduce acceptance criteria here for split.\n\t\t\t\t\t\tcreateWeightedGenerator<SplitAction | AppendAction, State>([\n\t\t\t\t\t\t\t[split, 1],\n\t\t\t\t\t\t\t[append, 1, ({ segments }): boolean => segments.length > 1],\n\t\t\t\t\t\t]),\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tsplit: (state, { segIndex, offset }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tconst splitSeg = segments[segIndex].splitAt(offset);\n\t\t\t\t\t\t\tassert(splitSeg !== undefined);\n\t\t\t\t\t\t\tsegments.splice(segIndex + 1, 0, splitSeg);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tappend: (state, { segIndex }) => {\n\t\t\t\t\t\t\tconst { segments } = state;\n\t\t\t\t\t\t\tsegments[segIndex].append(segments[segIndex + 1]);\n\t\t\t\t\t\t\tsegments.splice(segIndex + 1, 1);\n\t\t\t\t\t\t\treturn state;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tinitialState,\n\t\t\t\t);\n\n\t\t\t\tassert.deepEqual(\n\t\t\t\t\tAttributionCollection.serializeAttributionCollections(finalState.segments),\n\t\t\t\t\texpected,\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n});\n"]}
|
|
@@ -7,7 +7,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
7
7
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.DocumentTree = exports.RandomPack =
|
|
10
|
+
exports.DocumentTree = exports.RandomPack = void 0;
|
|
11
|
+
exports.simpleTest = simpleTest;
|
|
12
|
+
exports.integerTest1 = integerTest1;
|
|
13
|
+
exports.fileTest1 = fileTest1;
|
|
14
|
+
exports.mergeTreeTest1 = mergeTreeTest1;
|
|
15
|
+
exports.mergeTreeLargeTest = mergeTreeLargeTest;
|
|
16
|
+
exports.mergeTreeCheckedTest = mergeTreeCheckedTest;
|
|
17
|
+
exports.TestPack = TestPack;
|
|
11
18
|
/* eslint-disable @typescript-eslint/consistent-type-assertions, no-bitwise */
|
|
12
19
|
/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */
|
|
13
20
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
@@ -142,7 +149,6 @@ function simpleTest() {
|
|
|
142
149
|
log("Map Baboon Chameleon");
|
|
143
150
|
printStringProperty(beast.get("Chameleon"));
|
|
144
151
|
}
|
|
145
|
-
exports.simpleTest = simpleTest;
|
|
146
152
|
const clock = () => client_utils_1.Trace.start();
|
|
147
153
|
function took(desc, trace) {
|
|
148
154
|
const duration = trace.trace().duration;
|
|
@@ -191,7 +197,6 @@ function integerTest1() {
|
|
|
191
197
|
log(`duplicates ${conflictCount}, errors ${errorCount}`);
|
|
192
198
|
return errorCount;
|
|
193
199
|
}
|
|
194
|
-
exports.integerTest1 = integerTest1;
|
|
195
200
|
function fileTest1() {
|
|
196
201
|
const content = node_fs_1.default.readFileSync(node_path_1.default.join(dirname_cjs_1._dirname, "../../../public/literature/shakespeare.txt"), "utf8");
|
|
197
202
|
const a = content.split("\n");
|
|
@@ -242,7 +247,6 @@ function fileTest1() {
|
|
|
242
247
|
}
|
|
243
248
|
}
|
|
244
249
|
}
|
|
245
|
-
exports.fileTest1 = fileTest1;
|
|
246
250
|
function printTextSegment(textSegment, pos) {
|
|
247
251
|
log(textSegment.toString());
|
|
248
252
|
log(`at [${pos}, ${pos + textSegment.cachedLength})`);
|
|
@@ -304,7 +308,6 @@ function mergeTreeTest1() {
|
|
|
304
308
|
log(mergeTree.toString());
|
|
305
309
|
TestPack().firstTest();
|
|
306
310
|
}
|
|
307
|
-
exports.mergeTreeTest1 = mergeTreeTest1;
|
|
308
311
|
function mergeTreeLargeTest() {
|
|
309
312
|
const mergeTree = new mergeTree_js_1.MergeTree();
|
|
310
313
|
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("the cat is on the mat")], mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
@@ -361,7 +364,6 @@ function mergeTreeLargeTest() {
|
|
|
361
364
|
}
|
|
362
365
|
}
|
|
363
366
|
}
|
|
364
|
-
exports.mergeTreeLargeTest = mergeTreeLargeTest;
|
|
365
367
|
function mergeTreeCheckedTest() {
|
|
366
368
|
const mergeTree = new mergeTree_js_1.MergeTree();
|
|
367
369
|
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("the cat is on the mat")], mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
@@ -512,7 +514,6 @@ function mergeTreeCheckedTest() {
|
|
|
512
514
|
}
|
|
513
515
|
return errorCount;
|
|
514
516
|
}
|
|
515
|
-
exports.mergeTreeCheckedTest = mergeTreeCheckedTest;
|
|
516
517
|
function TestPack(verbose = true) {
|
|
517
518
|
const random = (0, stochastic_test_utils_1.makeRandom)(0xdeadbeef, 0xfeedbed);
|
|
518
519
|
const minSegCount = 1;
|
|
@@ -1098,7 +1099,6 @@ function TestPack(verbose = true) {
|
|
|
1098
1099
|
manyMergeTrees,
|
|
1099
1100
|
};
|
|
1100
1101
|
}
|
|
1101
|
-
exports.TestPack = TestPack;
|
|
1102
1102
|
const createLocalOpArgs = (type, sequenceNumber) => ({
|
|
1103
1103
|
op: { type },
|
|
1104
1104
|
sequencedMessage: {
|
|
@@ -1106,6 +1106,7 @@ const createLocalOpArgs = (type, sequenceNumber) => ({
|
|
|
1106
1106
|
},
|
|
1107
1107
|
});
|
|
1108
1108
|
class RandomPack {
|
|
1109
|
+
random;
|
|
1109
1110
|
constructor() {
|
|
1110
1111
|
this.random = (0, stochastic_test_utils_1.makeRandom)(0xdeadbeef, 0xfeedbed);
|
|
1111
1112
|
}
|
|
@@ -1154,11 +1155,15 @@ exports.RandomPack = RandomPack;
|
|
|
1154
1155
|
* Document -\> Content
|
|
1155
1156
|
*/
|
|
1156
1157
|
class DocumentTree {
|
|
1158
|
+
name;
|
|
1159
|
+
children;
|
|
1160
|
+
pos = 0;
|
|
1161
|
+
ids = { box: 0, row: 0 };
|
|
1162
|
+
id;
|
|
1163
|
+
static randPack = new RandomPack();
|
|
1157
1164
|
constructor(name, children) {
|
|
1158
1165
|
this.name = name;
|
|
1159
1166
|
this.children = children;
|
|
1160
|
-
this.pos = 0;
|
|
1161
|
-
this.ids = { box: 0, row: 0 };
|
|
1162
1167
|
}
|
|
1163
1168
|
addToMergeTree(client, docNode) {
|
|
1164
1169
|
if (typeof docNode === "string") {
|
|
@@ -1250,7 +1255,6 @@ class DocumentTree {
|
|
|
1250
1255
|
}
|
|
1251
1256
|
}
|
|
1252
1257
|
exports.DocumentTree = DocumentTree;
|
|
1253
|
-
DocumentTree.randPack = new RandomPack();
|
|
1254
1258
|
function findReplacePerf(filename) {
|
|
1255
1259
|
const client = new testClient_js_1.TestClient();
|
|
1256
1260
|
(0, testUtils_js_1.loadTextFromFile)(filename, client.mergeTree);
|