@fluidframework/merge-tree 2.0.0-internal.8.0.0 → 2.0.0-rc.1.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 +38 -0
- package/README.md +0 -6
- package/api-extractor-esm.json +17 -0
- package/api-extractor-lint.json +1 -10
- package/api-extractor.json +0 -4
- package/api-report/merge-tree.api.md +4 -9
- package/dist/client.d.ts +0 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +0 -7
- package/dist/client.js.map +1 -1
- package/dist/merge-tree-alpha.d.ts +27 -12
- package/dist/merge-tree-beta.d.ts +0 -16
- package/dist/merge-tree-public.d.ts +0 -16
- package/dist/merge-tree-untrimmed.d.ts +5 -29
- package/dist/mergeTree.d.ts +0 -17
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +0 -130
- package/dist/mergeTree.js.map +1 -1
- package/dist/ops.d.ts +1 -1
- package/dist/ops.js +1 -1
- package/dist/ops.js.map +1 -1
- package/dist/revertibles.d.ts +4 -4
- package/dist/revertibles.js +3 -3
- package/dist/revertibles.js.map +1 -1
- package/dist/test/Insertion.perf.spec.d.ts +6 -0
- package/dist/test/Insertion.perf.spec.d.ts.map +1 -0
- package/dist/test/Insertion.perf.spec.js +113 -0
- package/dist/test/Insertion.perf.spec.js.map +1 -0
- package/dist/test/PartialLengths.perf.spec.d.ts +6 -0
- package/dist/test/PartialLengths.perf.spec.d.ts.map +1 -0
- package/dist/test/PartialLengths.perf.spec.js +67 -0
- package/dist/test/PartialLengths.perf.spec.js.map +1 -0
- package/dist/test/Removal.perf.spec.d.ts +6 -0
- package/dist/test/Removal.perf.spec.d.ts.map +1 -0
- package/dist/test/Removal.perf.spec.js +166 -0
- package/dist/test/Removal.perf.spec.js.map +1 -0
- package/dist/test/Snapshot.perf.spec.d.ts +6 -0
- package/dist/test/Snapshot.perf.spec.d.ts.map +1 -0
- package/dist/test/Snapshot.perf.spec.js +33 -0
- package/dist/test/Snapshot.perf.spec.js.map +1 -0
- package/dist/test/attributionCollection.perf.spec.d.ts +6 -0
- package/dist/test/attributionCollection.perf.spec.d.ts.map +1 -0
- package/dist/test/attributionCollection.perf.spec.js +231 -0
- package/dist/test/attributionCollection.perf.spec.js.map +1 -0
- package/dist/test/attributionCollection.spec.d.ts +6 -0
- package/dist/test/attributionCollection.spec.d.ts.map +1 -0
- package/dist/test/attributionCollection.spec.js +486 -0
- package/dist/test/attributionCollection.spec.js.map +1 -0
- package/dist/test/attributionPolicy.spec.d.ts +6 -0
- package/dist/test/attributionPolicy.spec.d.ts.map +1 -0
- package/dist/test/attributionPolicy.spec.js +189 -0
- package/dist/test/attributionPolicy.spec.js.map +1 -0
- package/dist/test/beastTest.d.ts +54 -0
- package/dist/test/beastTest.d.ts.map +1 -0
- package/dist/test/beastTest.js +1333 -0
- package/dist/test/beastTest.js.map +1 -0
- package/dist/test/client.annotateMarker.spec.d.ts +6 -0
- package/dist/test/client.annotateMarker.spec.d.ts.map +1 -0
- package/dist/test/client.annotateMarker.spec.js +45 -0
- package/dist/test/client.annotateMarker.spec.js.map +1 -0
- package/dist/test/client.apis.d.ts +7 -0
- package/dist/test/client.apis.d.ts.map +1 -0
- package/dist/test/client.apis.js +72 -0
- package/dist/test/client.apis.js.map +1 -0
- package/dist/test/client.applyMsg.spec.d.ts +6 -0
- package/dist/test/client.applyMsg.spec.d.ts.map +1 -0
- package/dist/test/client.applyMsg.spec.js +500 -0
- package/dist/test/client.applyMsg.spec.js.map +1 -0
- package/dist/test/client.applyStashedOpFarm.spec.d.ts +12 -0
- package/dist/test/client.applyStashedOpFarm.spec.d.ts.map +1 -0
- package/dist/test/client.applyStashedOpFarm.spec.js +144 -0
- package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -0
- package/dist/test/client.attributionFarm.spec.d.ts +7 -0
- package/dist/test/client.attributionFarm.spec.d.ts.map +1 -0
- package/dist/test/client.attributionFarm.spec.js +96 -0
- package/dist/test/client.attributionFarm.spec.js.map +1 -0
- package/dist/test/client.conflictFarm.spec.d.ts +15 -0
- package/dist/test/client.conflictFarm.spec.d.ts.map +1 -0
- package/dist/test/client.conflictFarm.spec.js +88 -0
- package/dist/test/client.conflictFarm.spec.js.map +1 -0
- package/dist/test/client.getPosition.spec.d.ts +6 -0
- package/dist/test/client.getPosition.spec.d.ts.map +1 -0
- package/dist/test/client.getPosition.spec.js +54 -0
- package/dist/test/client.getPosition.spec.js.map +1 -0
- package/dist/test/client.localReference.spec.d.ts +6 -0
- package/dist/test/client.localReference.spec.d.ts.map +1 -0
- package/dist/test/client.localReference.spec.js +439 -0
- package/dist/test/client.localReference.spec.js.map +1 -0
- package/dist/test/client.localReferenceFarm.spec.d.ts +6 -0
- package/dist/test/client.localReferenceFarm.spec.d.ts.map +1 -0
- package/dist/test/client.localReferenceFarm.spec.js +88 -0
- package/dist/test/client.localReferenceFarm.spec.js.map +1 -0
- package/dist/test/client.rebasePosition.spec.d.ts +6 -0
- package/dist/test/client.rebasePosition.spec.d.ts.map +1 -0
- package/dist/test/client.rebasePosition.spec.js +102 -0
- package/dist/test/client.rebasePosition.spec.js.map +1 -0
- package/dist/test/client.reconnectFarm.spec.d.ts +12 -0
- package/dist/test/client.reconnectFarm.spec.d.ts.map +1 -0
- package/dist/test/client.reconnectFarm.spec.js +91 -0
- package/dist/test/client.reconnectFarm.spec.js.map +1 -0
- package/dist/test/client.replay.spec.d.ts +6 -0
- package/dist/test/client.replay.spec.d.ts.map +1 -0
- package/dist/test/client.replay.spec.js +85 -0
- package/dist/test/client.replay.spec.js.map +1 -0
- package/dist/test/client.rollback.spec.d.ts +6 -0
- package/dist/test/client.rollback.spec.d.ts.map +1 -0
- package/dist/test/client.rollback.spec.js +453 -0
- package/dist/test/client.rollback.spec.js.map +1 -0
- package/dist/test/client.rollbackFarm.spec.d.ts +6 -0
- package/dist/test/client.rollbackFarm.spec.d.ts.map +1 -0
- package/dist/test/client.rollbackFarm.spec.js +48 -0
- package/dist/test/client.rollbackFarm.spec.js.map +1 -0
- package/dist/test/client.searchForMarker.spec.d.ts +6 -0
- package/dist/test/client.searchForMarker.spec.d.ts.map +1 -0
- package/dist/test/client.searchForMarker.spec.js +446 -0
- package/dist/test/client.searchForMarker.spec.js.map +1 -0
- package/dist/test/client.walkSegments.spec.d.ts +6 -0
- package/dist/test/client.walkSegments.spec.d.ts.map +1 -0
- package/dist/test/client.walkSegments.spec.js +54 -0
- package/dist/test/client.walkSegments.spec.js.map +1 -0
- package/dist/test/collections.list.spec.d.ts +6 -0
- package/dist/test/collections.list.spec.d.ts.map +1 -0
- package/dist/test/collections.list.spec.js +84 -0
- package/dist/test/collections.list.spec.js.map +1 -0
- package/dist/test/createInsertOnlyAttributionPolicy.spec.d.ts +6 -0
- package/dist/test/createInsertOnlyAttributionPolicy.spec.d.ts.map +1 -0
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js +35 -0
- package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -0
- package/dist/test/index.d.ts +13 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +88 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/mergeTree.annotate.deltaCallback.spec.d.ts +6 -0
- package/dist/test/mergeTree.annotate.deltaCallback.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +142 -0
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -0
- package/dist/test/mergeTree.annotate.spec.d.ts +6 -0
- package/dist/test/mergeTree.annotate.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.annotate.spec.js +448 -0
- package/dist/test/mergeTree.annotate.spec.js.map +1 -0
- package/dist/test/mergeTree.insert.deltaCallback.spec.d.ts +6 -0
- package/dist/test/mergeTree.insert.deltaCallback.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +126 -0
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -0
- package/dist/test/mergeTree.insertingWalk.spec.d.ts +6 -0
- package/dist/test/mergeTree.insertingWalk.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.insertingWalk.spec.js +279 -0
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -0
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts +6 -0
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +178 -0
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -0
- package/dist/test/mergeTree.markRangeRemoved.spec.d.ts +6 -0
- package/dist/test/mergeTree.markRangeRemoved.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.markRangeRemoved.spec.js +130 -0
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -0
- package/dist/test/mergeTree.walk.spec.d.ts +6 -0
- package/dist/test/mergeTree.walk.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.walk.spec.js +63 -0
- package/dist/test/mergeTree.walk.spec.js.map +1 -0
- package/dist/test/mergeTree.zamboni.spec.d.ts +6 -0
- package/dist/test/mergeTree.zamboni.spec.d.ts.map +1 -0
- package/dist/test/mergeTree.zamboni.spec.js +52 -0
- package/dist/test/mergeTree.zamboni.spec.js.map +1 -0
- package/dist/test/mergeTreeOperationRunner.d.ts +63 -0
- package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -0
- package/dist/test/mergeTreeOperationRunner.js +245 -0
- package/dist/test/mergeTreeOperationRunner.js.map +1 -0
- package/dist/test/mergeTreeOperationRunner.spec.d.ts +6 -0
- package/dist/test/mergeTreeOperationRunner.spec.d.ts.map +1 -0
- package/dist/test/mergeTreeOperationRunner.spec.js +156 -0
- package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -0
- package/dist/test/obliterate.concurrent.spec.d.ts +6 -0
- package/dist/test/obliterate.concurrent.spec.d.ts.map +1 -0
- package/dist/test/obliterate.concurrent.spec.js +1446 -0
- package/dist/test/obliterate.concurrent.spec.js.map +1 -0
- package/dist/test/obliterate.partialLength.spec.d.ts +6 -0
- package/dist/test/obliterate.partialLength.spec.d.ts.map +1 -0
- package/dist/test/obliterate.partialLength.spec.js +279 -0
- package/dist/test/obliterate.partialLength.spec.js.map +1 -0
- package/dist/test/obliterate.reconnect.spec.d.ts +6 -0
- package/dist/test/obliterate.reconnect.spec.d.ts.map +1 -0
- package/dist/test/obliterate.reconnect.spec.js +164 -0
- package/dist/test/obliterate.reconnect.spec.js.map +1 -0
- package/dist/test/obliterate.spec.d.ts +6 -0
- package/dist/test/obliterate.spec.d.ts.map +1 -0
- package/dist/test/obliterate.spec.js +162 -0
- package/dist/test/obliterate.spec.js.map +1 -0
- package/dist/test/ordinal.spec.d.ts +2 -0
- package/dist/test/ordinal.spec.d.ts.map +1 -0
- package/dist/test/ordinal.spec.js +43 -0
- package/dist/test/ordinal.spec.js.map +1 -0
- package/dist/test/partialLength.spec.d.ts +6 -0
- package/dist/test/partialLength.spec.d.ts.map +1 -0
- package/dist/test/partialLength.spec.js +282 -0
- package/dist/test/partialLength.spec.js.map +1 -0
- package/dist/test/properties.spec.d.ts +6 -0
- package/dist/test/properties.spec.d.ts.map +1 -0
- package/dist/test/properties.spec.js +55 -0
- package/dist/test/properties.spec.js.map +1 -0
- package/dist/test/reconnectHelper.d.ts +48 -0
- package/dist/test/reconnectHelper.d.ts.map +1 -0
- package/dist/test/reconnectHelper.js +86 -0
- package/dist/test/reconnectHelper.js.map +1 -0
- package/dist/test/resetPendingSegmentsToOp.spec.d.ts +6 -0
- package/dist/test/resetPendingSegmentsToOp.spec.d.ts.map +1 -0
- package/dist/test/resetPendingSegmentsToOp.spec.js +218 -0
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -0
- package/dist/test/revertibleFarm.spec.d.ts +6 -0
- package/dist/test/revertibleFarm.spec.d.ts.map +1 -0
- package/dist/test/revertibleFarm.spec.js +124 -0
- package/dist/test/revertibleFarm.spec.js.map +1 -0
- package/dist/test/revertibles.spec.d.ts +17 -0
- package/dist/test/revertibles.spec.d.ts.map +1 -0
- package/dist/test/revertibles.spec.js +385 -0
- package/dist/test/revertibles.spec.js.map +1 -0
- package/dist/test/segmentGroupCollection.spec.d.ts +6 -0
- package/dist/test/segmentGroupCollection.spec.d.ts.map +1 -0
- package/dist/test/segmentGroupCollection.spec.js +60 -0
- package/dist/test/segmentGroupCollection.spec.js.map +1 -0
- package/dist/test/snapshot.spec.d.ts +6 -0
- package/dist/test/snapshot.spec.d.ts.map +1 -0
- package/dist/test/snapshot.spec.js +178 -0
- package/dist/test/snapshot.spec.js.map +1 -0
- package/dist/test/snapshot.utils.d.ts +33 -0
- package/dist/test/snapshot.utils.d.ts.map +1 -0
- package/dist/test/snapshot.utils.js +109 -0
- package/dist/test/snapshot.utils.js.map +1 -0
- package/dist/test/snapshotlegacy.spec.d.ts +6 -0
- package/dist/test/snapshotlegacy.spec.d.ts.map +1 -0
- package/dist/test/snapshotlegacy.spec.js +139 -0
- package/dist/test/snapshotlegacy.spec.js.map +1 -0
- package/dist/test/sortedSegmentSet.spec.d.ts +6 -0
- package/dist/test/sortedSegmentSet.spec.d.ts.map +1 -0
- package/dist/test/sortedSegmentSet.spec.js +95 -0
- package/dist/test/sortedSegmentSet.spec.js.map +1 -0
- package/dist/test/testClient.d.ts +119 -0
- package/dist/test/testClient.d.ts.map +1 -0
- package/dist/test/testClient.js +439 -0
- package/dist/test/testClient.js.map +1 -0
- package/dist/test/testClientLogger.d.ts +44 -0
- package/dist/test/testClientLogger.d.ts.map +1 -0
- package/dist/test/testClientLogger.js +287 -0
- package/dist/test/testClientLogger.js.map +1 -0
- package/dist/test/testSerializer.d.ts +18 -0
- package/dist/test/testSerializer.d.ts.map +1 -0
- package/dist/test/testSerializer.js +33 -0
- package/dist/test/testSerializer.js.map +1 -0
- package/dist/test/testServer.d.ts +36 -0
- package/dist/test/testServer.d.ts.map +1 -0
- package/dist/test/testServer.js +138 -0
- package/dist/test/testServer.js.map +1 -0
- package/dist/test/testUtils.d.ts +69 -0
- package/dist/test/testUtils.d.ts.map +1 -0
- package/dist/test/testUtils.js +149 -0
- package/dist/test/testUtils.js.map +1 -0
- package/dist/test/text.d.ts +9 -0
- package/dist/test/text.d.ts.map +1 -0
- package/dist/test/text.js +76 -0
- package/dist/test/text.js.map +1 -0
- package/dist/test/tracking.spec.d.ts +6 -0
- package/dist/test/tracking.spec.d.ts.map +1 -0
- package/dist/test/tracking.spec.js +120 -0
- package/dist/test/tracking.spec.js.map +1 -0
- package/dist/test/wordUnitTests.d.ts +6 -0
- package/dist/test/wordUnitTests.d.ts.map +1 -0
- package/dist/test/wordUnitTests.js +172 -0
- package/dist/test/wordUnitTests.js.map +1 -0
- package/lib/{MergeTreeTextHelper.d.ts → MergeTreeTextHelper.d.mts} +3 -3
- package/lib/MergeTreeTextHelper.d.mts.map +1 -0
- package/lib/{MergeTreeTextHelper.js → MergeTreeTextHelper.mjs} +5 -10
- package/lib/MergeTreeTextHelper.mjs.map +1 -0
- package/lib/{attributionCollection.d.ts → attributionCollection.d.mts} +2 -2
- package/lib/attributionCollection.d.mts.map +1 -0
- package/lib/{attributionCollection.js → attributionCollection.mjs} +9 -14
- package/lib/attributionCollection.mjs.map +1 -0
- package/lib/{attributionPolicy.d.ts → attributionPolicy.d.mts} +2 -2
- package/lib/attributionPolicy.d.mts.map +1 -0
- package/lib/{attributionPolicy.js → attributionPolicy.mjs} +21 -27
- package/lib/attributionPolicy.mjs.map +1 -0
- package/lib/{client.d.ts → client.d.mts} +9 -16
- package/lib/client.d.mts.map +1 -0
- package/lib/{client.js → client.mjs} +101 -110
- package/lib/client.mjs.map +1 -0
- package/lib/collections/{index.d.ts → index.d.mts} +3 -3
- package/lib/collections/index.d.mts.map +1 -0
- package/lib/collections/index.mjs +7 -0
- package/lib/collections/index.mjs.map +1 -0
- package/lib/collections/{list.d.ts → list.d.mts} +1 -1
- package/lib/collections/list.d.mts.map +1 -0
- package/lib/collections/{list.js → list.mjs} +6 -11
- package/lib/collections/list.mjs.map +1 -0
- package/lib/collections/{rbTree.d.ts → rbTree.d.mts} +1 -1
- package/lib/collections/rbTree.d.mts.map +1 -0
- package/lib/collections/{rbTree.js → rbTree.mjs} +16 -20
- package/lib/collections/rbTree.mjs.map +1 -0
- package/lib/{constants.d.ts → constants.d.mts} +1 -1
- package/lib/constants.d.mts.map +1 -0
- package/lib/constants.mjs +32 -0
- package/lib/constants.mjs.map +1 -0
- package/lib/{endOfTreeSegment.d.ts → endOfTreeSegment.d.mts} +4 -4
- package/lib/endOfTreeSegment.d.mts.map +1 -0
- package/lib/{endOfTreeSegment.js → endOfTreeSegment.mjs} +13 -18
- package/lib/endOfTreeSegment.mjs.map +1 -0
- package/lib/{index.d.ts → index.d.mts} +21 -21
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +24 -0
- package/lib/index.mjs.map +1 -0
- package/lib/{localReference.d.ts → localReference.d.mts} +7 -7
- package/lib/localReference.d.mts.map +1 -0
- package/lib/{localReference.js → localReference.mjs} +38 -47
- package/lib/localReference.mjs.map +1 -0
- package/lib/{merge-tree-alpha.d.ts → merge-tree-alpha.d.mts} +27 -12
- package/lib/{merge-tree-beta.d.ts → merge-tree-beta.d.mts} +0 -16
- package/lib/{merge-tree-public.d.ts → merge-tree-public.d.mts} +0 -16
- package/lib/{merge-tree-untrimmed.d.ts → merge-tree-untrimmed.d.mts} +5 -29
- package/lib/{mergeTree.d.ts → mergeTree.d.mts} +12 -29
- package/lib/mergeTree.d.mts.map +1 -0
- package/lib/{mergeTree.js → mergeTree.mjs} +203 -340
- package/lib/mergeTree.mjs.map +1 -0
- package/lib/{mergeTreeDeltaCallback.d.ts → mergeTreeDeltaCallback.d.mts} +4 -8
- package/lib/mergeTreeDeltaCallback.d.mts.map +1 -0
- package/lib/{mergeTreeDeltaCallback.js → mergeTreeDeltaCallback.mjs} +2 -5
- package/lib/mergeTreeDeltaCallback.mjs.map +1 -0
- package/lib/{mergeTreeNodeWalk.d.ts → mergeTreeNodeWalk.d.mts} +2 -2
- package/lib/mergeTreeNodeWalk.d.mts.map +1 -0
- package/lib/{mergeTreeNodeWalk.js → mergeTreeNodeWalk.mjs} +14 -21
- package/lib/mergeTreeNodeWalk.mjs.map +1 -0
- package/lib/{mergeTreeNodes.d.ts → mergeTreeNodes.d.mts} +12 -12
- package/lib/mergeTreeNodes.d.mts.map +1 -0
- package/lib/{mergeTreeNodes.js → mergeTreeNodes.mjs} +60 -76
- package/lib/mergeTreeNodes.mjs.map +1 -0
- package/lib/{mergeTreeTracking.d.ts → mergeTreeTracking.d.mts} +3 -3
- package/lib/mergeTreeTracking.d.mts.map +1 -0
- package/lib/{mergeTreeTracking.js → mergeTreeTracking.mjs} +6 -13
- package/lib/mergeTreeTracking.mjs.map +1 -0
- package/lib/{opBuilder.d.ts → opBuilder.d.mts} +4 -4
- package/lib/opBuilder.d.mts.map +1 -0
- package/lib/{opBuilder.js → opBuilder.mjs} +15 -25
- package/lib/opBuilder.mjs.map +1 -0
- package/lib/{ops.d.ts → ops.d.mts} +2 -2
- package/lib/ops.d.mts.map +1 -0
- package/lib/{ops.js → ops.mjs} +5 -8
- package/lib/ops.mjs.map +1 -0
- package/lib/{ordinal.d.ts → ordinal.d.mts} +1 -1
- package/lib/ordinal.d.mts.map +1 -0
- package/lib/{ordinal.js → ordinal.mjs} +4 -9
- package/lib/ordinal.mjs.map +1 -0
- package/lib/{partialLengths.d.ts → partialLengths.d.mts} +4 -4
- package/lib/partialLengths.d.mts.map +1 -0
- package/lib/{partialLengths.js → partialLengths.mjs} +38 -46
- package/lib/partialLengths.mjs.map +1 -0
- package/lib/{properties.d.ts → properties.d.mts} +1 -1
- package/lib/properties.d.mts.map +1 -0
- package/lib/{properties.js → properties.mjs} +7 -16
- package/lib/properties.mjs.map +1 -0
- package/lib/{referencePositions.d.ts → referencePositions.d.mts} +5 -5
- package/lib/referencePositions.d.mts.map +1 -0
- package/lib/referencePositions.mjs +70 -0
- package/lib/referencePositions.mjs.map +1 -0
- package/lib/{revertibles.d.ts → revertibles.d.mts} +12 -12
- package/lib/revertibles.d.mts.map +1 -0
- package/lib/{revertibles.js → revertibles.mjs} +60 -67
- package/lib/revertibles.mjs.map +1 -0
- package/lib/{segmentGroupCollection.d.ts → segmentGroupCollection.d.mts} +2 -2
- package/lib/segmentGroupCollection.d.mts.map +1 -0
- package/lib/{segmentGroupCollection.js → segmentGroupCollection.mjs} +5 -9
- package/lib/segmentGroupCollection.mjs.map +1 -0
- package/lib/{segmentPropertiesManager.d.ts → segmentPropertiesManager.d.mts} +3 -3
- package/lib/segmentPropertiesManager.d.mts.map +1 -0
- package/lib/{segmentPropertiesManager.js → segmentPropertiesManager.mjs} +14 -20
- package/lib/{segmentPropertiesManager.js.map → segmentPropertiesManager.mjs.map} +1 -1
- package/lib/{snapshotChunks.d.ts → snapshotChunks.d.mts} +4 -4
- package/lib/snapshotChunks.d.mts.map +1 -0
- package/lib/{snapshotChunks.js → snapshotChunks.mjs} +10 -17
- package/lib/snapshotChunks.mjs.map +1 -0
- package/lib/{snapshotLoader.d.ts → snapshotLoader.d.mts} +3 -3
- package/lib/snapshotLoader.d.mts.map +1 -0
- package/lib/{snapshotLoader.js → snapshotLoader.mjs} +33 -38
- package/lib/snapshotLoader.mjs.map +1 -0
- package/lib/{snapshotV1.d.ts → snapshotV1.d.mts} +4 -4
- package/lib/snapshotV1.d.mts.map +1 -0
- package/lib/{snapshotV1.js → snapshotV1.mjs} +28 -32
- package/lib/snapshotV1.mjs.map +1 -0
- package/lib/{snapshotlegacy.d.ts → snapshotlegacy.d.mts} +3 -3
- package/lib/snapshotlegacy.d.mts.map +1 -0
- package/lib/{snapshotlegacy.js → snapshotlegacy.mjs} +21 -26
- package/lib/snapshotlegacy.mjs.map +1 -0
- package/lib/{sortedSegmentSet.d.ts → sortedSegmentSet.d.mts} +4 -4
- package/lib/sortedSegmentSet.d.mts.map +1 -0
- package/lib/{sortedSegmentSet.js → sortedSegmentSet.mjs} +3 -8
- package/lib/sortedSegmentSet.mjs.map +1 -0
- package/lib/{sortedSet.d.ts → sortedSet.d.mts} +1 -1
- package/lib/sortedSet.d.mts.map +1 -0
- package/lib/{sortedSet.js → sortedSet.mjs} +2 -6
- package/lib/sortedSet.mjs.map +1 -0
- package/lib/{textSegment.d.ts → textSegment.d.mts} +4 -4
- package/lib/textSegment.d.mts.map +1 -0
- package/lib/{textSegment.js → textSegment.mjs} +8 -12
- package/lib/textSegment.mjs.map +1 -0
- package/lib/{zamboni.d.ts → zamboni.d.mts} +3 -3
- package/lib/zamboni.d.mts.map +1 -0
- package/lib/{zamboni.js → zamboni.mjs} +22 -28
- package/lib/zamboni.mjs.map +1 -0
- package/package.json +95 -164
- package/src/client.ts +0 -8
- package/src/mergeTree.ts +0 -226
- package/src/ops.ts +1 -1
- package/src/revertibles.ts +4 -4
- package/lib/MergeTreeTextHelper.d.ts.map +0 -1
- package/lib/MergeTreeTextHelper.js.map +0 -1
- package/lib/attributionCollection.d.ts.map +0 -1
- package/lib/attributionCollection.js.map +0 -1
- package/lib/attributionPolicy.d.ts.map +0 -1
- package/lib/attributionPolicy.js.map +0 -1
- package/lib/client.d.ts.map +0 -1
- package/lib/client.js.map +0 -1
- package/lib/collections/index.d.ts.map +0 -1
- package/lib/collections/index.js +0 -14
- package/lib/collections/index.js.map +0 -1
- package/lib/collections/list.d.ts.map +0 -1
- package/lib/collections/list.js.map +0 -1
- package/lib/collections/rbTree.d.ts.map +0 -1
- package/lib/collections/rbTree.js.map +0 -1
- package/lib/constants.d.ts.map +0 -1
- package/lib/constants.js +0 -35
- package/lib/constants.js.map +0 -1
- package/lib/endOfTreeSegment.d.ts.map +0 -1
- package/lib/endOfTreeSegment.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -80
- package/lib/index.js.map +0 -1
- package/lib/localReference.d.ts.map +0 -1
- package/lib/localReference.js.map +0 -1
- package/lib/mergeTree.d.ts.map +0 -1
- package/lib/mergeTree.js.map +0 -1
- package/lib/mergeTreeDeltaCallback.d.ts.map +0 -1
- package/lib/mergeTreeDeltaCallback.js.map +0 -1
- package/lib/mergeTreeNodeWalk.d.ts.map +0 -1
- package/lib/mergeTreeNodeWalk.js.map +0 -1
- package/lib/mergeTreeNodes.d.ts.map +0 -1
- package/lib/mergeTreeNodes.js.map +0 -1
- package/lib/mergeTreeTracking.d.ts.map +0 -1
- package/lib/mergeTreeTracking.js.map +0 -1
- package/lib/opBuilder.d.ts.map +0 -1
- package/lib/opBuilder.js.map +0 -1
- package/lib/ops.d.ts.map +0 -1
- package/lib/ops.js.map +0 -1
- package/lib/ordinal.d.ts.map +0 -1
- package/lib/ordinal.js.map +0 -1
- package/lib/partialLengths.d.ts.map +0 -1
- package/lib/partialLengths.js.map +0 -1
- package/lib/properties.d.ts.map +0 -1
- package/lib/properties.js.map +0 -1
- package/lib/referencePositions.d.ts.map +0 -1
- package/lib/referencePositions.js +0 -80
- package/lib/referencePositions.js.map +0 -1
- package/lib/revertibles.d.ts.map +0 -1
- package/lib/revertibles.js.map +0 -1
- package/lib/segmentGroupCollection.d.ts.map +0 -1
- package/lib/segmentGroupCollection.js.map +0 -1
- package/lib/segmentPropertiesManager.d.ts.map +0 -1
- package/lib/snapshotChunks.d.ts.map +0 -1
- package/lib/snapshotChunks.js.map +0 -1
- package/lib/snapshotLoader.d.ts.map +0 -1
- package/lib/snapshotLoader.js.map +0 -1
- package/lib/snapshotV1.d.ts.map +0 -1
- package/lib/snapshotV1.js.map +0 -1
- package/lib/snapshotlegacy.d.ts.map +0 -1
- package/lib/snapshotlegacy.js.map +0 -1
- package/lib/sortedSegmentSet.d.ts.map +0 -1
- package/lib/sortedSegmentSet.js.map +0 -1
- package/lib/sortedSet.d.ts.map +0 -1
- package/lib/sortedSet.js.map +0 -1
- package/lib/textSegment.d.ts.map +0 -1
- package/lib/textSegment.js.map +0 -1
- package/lib/zamboni.d.ts.map +0 -1
- package/lib/zamboni.js.map +0 -1
- package/merge-tree.test-files.tar +0 -0
- package/src/mergeTreeExample1.pdf +0 -0
- package/tsconfig.esnext.json +0 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beastTest.js","sourceRoot":"","sources":["../../src/test/beastTest.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 @typescript-eslint/consistent-type-assertions, no-bitwise */\n/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/no-base-to-string */\n\nimport { strict as assert } from \"assert\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { IRandom, makeRandom } from \"@fluid-private/stochastic-test-utils\";\nimport { Trace } from \"@fluid-internal/client-utils\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport JsDiff from \"diff\";\nimport {\n\tKeyComparer,\n\tProperty,\n\tPropertyAction,\n\tRedBlackTree,\n\tSortedDictionary,\n} from \"../collections\";\nimport { LocalClientId, UnassignedSequenceNumber, UniversalSequenceNumber } from \"../constants\";\nimport {\n\tIJSONMarkerSegment,\n\tIMergeNode,\n\tISegment,\n\treservedMarkerIdKey,\n\tcompareNumbers,\n\tcompareStrings,\n} from \"../mergeTreeNodes\";\nimport { IMergeTreeDeltaOpArgs } from \"../mergeTreeDeltaCallback\";\nimport { createRemoveRangeOp } from \"../opBuilder\";\nimport { IMergeTreeOp, MergeTreeDeltaType, ReferenceType } from \"../ops\";\nimport { SnapshotLegacy } from \"../snapshotlegacy\";\nimport { IJSONTextSegment, TextSegment } from \"../textSegment\";\nimport { reservedRangeLabelsKey, reservedTileLabelsKey } from \"../referencePositions\";\nimport { MergeTree } from \"../mergeTree\";\nimport { MergeTreeTextHelper } from \"../MergeTreeTextHelper\";\nimport { JsonSegmentSpecs } from \"../snapshotChunks\";\nimport { getStats, specToSegment, TestClient } from \"./testClient\";\nimport { TestServer } from \"./testServer\";\nimport { insertText, loadTextFromFile, nodeOrdinalsHaveIntegrity } from \"./testUtils\";\n\nfunction LinearDictionary<TKey, TData>(\n\tcompareKeys: KeyComparer<TKey>,\n): SortedDictionary<TKey, TData> {\n\tconst props: Property<TKey, TData>[] = [];\n\tconst compareProps = (a: Property<TKey, TData>, b: Property<TKey, TData>) =>\n\t\tcompareKeys(a.key, b.key);\n\tfunction mapRange<TAccum>(\n\t\taction: PropertyAction<TKey, TData>,\n\t\taccum?: TAccum,\n\t\tstart?: TKey,\n\t\tend?: TKey,\n\t) {\n\t\tlet _start = start;\n\t\tlet _end = end;\n\n\t\tif (props.length !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (_start === undefined) {\n\t\t\t_start = min()!.key;\n\t\t}\n\t\tif (_end === undefined) {\n\t\t\t_end = max()!.key;\n\t\t}\n\t\tfor (let i = 0, len = props.length; i < len; i++) {\n\t\t\tif (compareKeys(_start, props[i].key) <= 0) {\n\t\t\t\tconst ecmp = compareKeys(_end, props[i].key);\n\t\t\t\tif (ecmp < 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!action(props[i], accum)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction map<TAccum>(action: PropertyAction<TKey, TData>, accum?: TAccum) {\n\t\tmapRange(action, accum);\n\t}\n\n\tfunction min() {\n\t\tif (props.length > 0) {\n\t\t\treturn props[0];\n\t\t}\n\t}\n\tfunction max() {\n\t\tif (props.length > 0) {\n\t\t\treturn props[props.length - 1];\n\t\t}\n\t}\n\n\tfunction get(key: TKey) {\n\t\tfor (let i = 0, len = props.length; i < len; i++) {\n\t\t\tif (props[i].key === key) {\n\t\t\t\treturn props[i];\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction put(key: TKey, data: TData) {\n\t\tif (key !== undefined) {\n\t\t\tif (data === undefined) {\n\t\t\t\tremove(key);\n\t\t\t} else {\n\t\t\t\tprops.push({ key, data });\n\t\t\t\tprops.sort(compareProps); // Go to insertion sort if too slow\n\t\t\t}\n\t\t}\n\t}\n\tfunction remove(key: TKey) {\n\t\tif (key !== undefined) {\n\t\t\tfor (let i = 0, len = props.length; i < len; i++) {\n\t\t\t\tif (props[i].key === key) {\n\t\t\t\t\tprops[i] = props[len - 1];\n\t\t\t\t\tprops.length--;\n\t\t\t\t\tprops.sort(compareProps);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tmin,\n\t\tmax,\n\t\tmap,\n\t\tmapRange,\n\t\tremove,\n\t\tget,\n\t\tput,\n\t};\n}\n\nlet logLines: string[];\nfunction log(message: any) {\n\tif (logLines) {\n\t\tlogLines.push(message.toString());\n\t}\n}\n\nfunction printStringProperty(p?: Property<string, string>) {\n\tlog(`[${p?.key}, ${p?.data}]`);\n\treturn true;\n}\n\nfunction printStringNumProperty(p: Property<string, number>) {\n\tlog(`[${p.key}, ${p.data}]`);\n\treturn true;\n}\n\nexport function simpleTest() {\n\tconst a = [\"Aardvark\", \"cute\", \"Baboon\", \"big\", \"Chameleon\", \"colorful\", \"Dingo\", \"wild\"];\n\n\tconst beast = new RedBlackTree<string, string>(compareStrings);\n\tfor (let i = 0; i < a.length; i += 2) {\n\t\tbeast.put(a[i], a[i + 1]);\n\t}\n\tbeast.map(printStringProperty);\n\tlog(\"Map B D\");\n\tlog(\"Map Aardvark Dingo\");\n\tlog(\"Map Baboon Chameleon\");\n\tprintStringProperty(beast.get(\"Chameleon\"));\n}\n\nconst clock = () => Trace.start();\n\nfunction took(desc: string, trace: Trace) {\n\tconst duration = trace.trace().duration;\n\tlog(`${desc} took ${duration} ms`);\n\treturn duration;\n}\n\nfunction elapsedMicroseconds(trace: Trace) {\n\treturn trace.trace().duration * 1000;\n}\n\nexport function integerTest1() {\n\tconst random = makeRandom(0xdeadbeef, 0xfeedbed);\n\tconst imin = 0;\n\tconst imax = 10000000;\n\tconst intCount = 1100000;\n\tconst beast = new RedBlackTree<number, number>(compareNumbers);\n\n\tconst randInt = () => random.integer(imin, imax);\n\tconst pos = new Array<number>(intCount);\n\tlet i = 0;\n\tlet redo = false;\n\tfunction onConflict(key: number, currentKey: number) {\n\t\tredo = true;\n\t\treturn { data: currentKey };\n\t}\n\tlet conflictCount = 0;\n\tlet start = clock();\n\twhile (i < intCount) {\n\t\tpos[i] = randInt();\n\t\tbeast.put(pos[i], i, onConflict);\n\t\tif (!redo) {\n\t\t\ti++;\n\t\t} else {\n\t\t\tconflictCount++;\n\t\t\tredo = false;\n\t\t}\n\t}\n\ttook(\"test gen\", start);\n\tconst errorCount = 0;\n\tstart = clock();\n\tfor (let j = 0, len = pos.length; j < len; j++) {\n\t\tconst cp = pos[j];\n\t\t/* let prop = */ beast.get(cp);\n\t}\n\tconst getdur = took(\"get all keys\", start);\n\tlog(`cost per get is ${((1000.0 * getdur) / intCount).toFixed(3)} us`);\n\tlog(`duplicates ${conflictCount}, errors ${errorCount}`);\n\treturn errorCount;\n}\n\nexport function fileTest1() {\n\tconst content = fs.readFileSync(\n\t\tpath.join(__dirname, \"../../../public/literature/shakespeare.txt\"),\n\t\t\"utf8\",\n\t);\n\tconst a = content.split(\"\\n\");\n\tconst iterCount = a.length >> 2;\n\tconst removeCount = 10;\n\tlog(`len: ${a.length}`);\n\n\tfor (let k = 0; k < iterCount; k++) {\n\t\tconst beast = new RedBlackTree<string, number>(compareStrings);\n\t\tconst linearBeast = LinearDictionary<string, number>(compareStrings);\n\t\tfor (let i = 0, len = a.length; i < len; i++) {\n\t\t\ta[i] = a[i].trim();\n\t\t\tif (a[i].length > 0) {\n\t\t\t\tbeast.put(a[i], i);\n\t\t\t\tlinearBeast.put(a[i], i);\n\t\t\t}\n\t\t}\n\t\tif (k === 0) {\n\t\t\tbeast.map(printStringNumProperty);\n\t\t\tlog(\"BTREE...\");\n\t\t}\n\t\tconst removedAnimals: string[] = [];\n\t\tfor (let j = 0; j < removeCount; j++) {\n\t\t\tconst removeIndex = Math.floor(Math.random() * a.length);\n\t\t\tlog(`Removing: ${a[removeIndex]} at ${removeIndex}`);\n\t\t\tbeast.remove(a[removeIndex]);\n\t\t\tlinearBeast.remove(a[removeIndex]);\n\t\t\tremovedAnimals.push(a[removeIndex]);\n\t\t}\n\t\tfor (const animal of a) {\n\t\t\tif (animal.length > 0 && !removedAnimals.includes(animal)) {\n\t\t\t\tconst prop = beast.get(animal);\n\t\t\t\tconst linProp = linearBeast.get(animal);\n\t\t\t\t// log(`Trying key ${animal}`);\n\t\t\t\tif (prop) {\n\t\t\t\t\t// printStringNumProperty(prop);\n\t\t\t\t\tif (\n\t\t\t\t\t\tlinProp === undefined ||\n\t\t\t\t\t\tprop.key !== linProp.key ||\n\t\t\t\t\t\tprop.data !== linProp.data\n\t\t\t\t\t) {\n\t\t\t\t\t\tlog(`Linear BST does not match RB BST at key ${animal}`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlog(`hmm...bad key: ${animal}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction printTextSegment(textSegment: ISegment, pos: number) {\n\tlog(textSegment.toString());\n\tlog(`at [${pos}, ${pos + textSegment.cachedLength})`);\n\treturn true;\n}\n\nexport function makeTextSegment(text: string): IMergeNode {\n\treturn new TextSegment(text);\n}\n\nfunction makeCollabTextSegment(text: string) {\n\treturn new TextSegment(text);\n}\n\nfunction editFlat(source: string, s: number, dl: number, nt = \"\") {\n\treturn source.substring(0, s) + nt + source.substring(s + dl, source.length);\n}\n\nlet accumTime = 0;\n\nfunction checkInsertMergeTree(\n\tmergeTree: MergeTree,\n\tpos: number,\n\ttextSegment: TextSegment,\n\tverbose = false,\n) {\n\tlet checkText = new MergeTreeTextHelper(mergeTree).getText(\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t);\n\tcheckText = editFlat(checkText, pos, 0, textSegment.text);\n\tconst clockStart = clock();\n\tinsertText({\n\t\tmergeTree,\n\t\tpos,\n\t\trefSeq: UniversalSequenceNumber,\n\t\tclientId: LocalClientId,\n\t\tseq: UniversalSequenceNumber,\n\t\ttext: textSegment.text,\n\t\tprops: undefined,\n\t\topArgs: undefined,\n\t});\n\taccumTime += elapsedMicroseconds(clockStart);\n\tconst updatedText = new MergeTreeTextHelper(mergeTree).getText(\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t);\n\tconst result = checkText === updatedText;\n\tif (!result && verbose) {\n\t\tlog(`mismatch(o): ${checkText}`);\n\t\tlog(`mismatch(u): ${updatedText}`);\n\t}\n\treturn result;\n}\n\nfunction checkMarkRemoveMergeTree(\n\tmergeTree: MergeTree,\n\tstart: number,\n\tend: number,\n\tverbose = false,\n) {\n\tconst helper = new MergeTreeTextHelper(mergeTree);\n\tconst origText = helper.getText(UniversalSequenceNumber, LocalClientId);\n\tconst checkText = editFlat(origText, start, end - start);\n\tconst clockStart = clock();\n\tmergeTree.markRangeRemoved(\n\t\tstart,\n\t\tend,\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t\tUniversalSequenceNumber,\n\t\tfalse,\n\t\t{ op: createRemoveRangeOp(start, end) },\n\t);\n\taccumTime += elapsedMicroseconds(clockStart);\n\tconst updatedText = helper.getText(UniversalSequenceNumber, LocalClientId);\n\tconst result = checkText === updatedText;\n\tif (!result && verbose) {\n\t\tlog(`mismatch(o): ${origText}`);\n\t\tlog(`mismatch(c): ${checkText}`);\n\t\tlog(`mismatch(u): ${updatedText}`);\n\t}\n\treturn result;\n}\n\nexport function mergeTreeTest1() {\n\tconst mergeTree = new MergeTree();\n\tmergeTree.insertSegments(\n\t\t0,\n\t\t[TextSegment.make(\"the cat is on the mat\")],\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t\tUniversalSequenceNumber,\n\t\tundefined,\n\t);\n\tmergeTree.mapRange(printTextSegment, UniversalSequenceNumber, LocalClientId, undefined);\n\tlet fuzzySeg = makeCollabTextSegment(\"fuzzy, fuzzy \");\n\tcheckInsertMergeTree(mergeTree, 4, fuzzySeg);\n\tfuzzySeg = makeCollabTextSegment(\"fuzzy, fuzzy \");\n\tcheckInsertMergeTree(mergeTree, 4, fuzzySeg);\n\tcheckMarkRemoveMergeTree(mergeTree, 4, 13);\n\t// checkRemoveSegTree(segTree, 4, 13);\n\tcheckInsertMergeTree(mergeTree, 4, makeCollabTextSegment(\"fi\"));\n\tmergeTree.mapRange(printTextSegment, UniversalSequenceNumber, LocalClientId, undefined);\n\tconst segoff = mergeTree.getContainingSegment(4, UniversalSequenceNumber, LocalClientId);\n\tlog(mergeTree.getPosition(segoff.segment!, UniversalSequenceNumber, LocalClientId));\n\tlog(new MergeTreeTextHelper(mergeTree).getText(UniversalSequenceNumber, LocalClientId));\n\tlog(mergeTree.toString());\n\tTestPack().firstTest();\n}\n\nexport function mergeTreeLargeTest() {\n\tconst mergeTree = new MergeTree();\n\tmergeTree.insertSegments(\n\t\t0,\n\t\t[TextSegment.make(\"the cat is on the mat\")],\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t\tUniversalSequenceNumber,\n\t\tundefined,\n\t);\n\tconst insertCount = 1000000;\n\tconst removeCount = 980000;\n\tconst random = makeRandom(0xdeadbeef, 0xfeedbed);\n\tconst imin = 1;\n\tconst imax = 9;\n\tconst randInt = () => random.integer(imin, imax);\n\tfunction randomString(len: number, c: string) {\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tstr += c;\n\t\t}\n\t\treturn str;\n\t}\n\taccumTime = 0;\n\tlet accumTreeSize = 0;\n\tlet treeCount = 0;\n\tfor (let i = 0; i < insertCount; i++) {\n\t\tconst slen = randInt();\n\t\tconst s = randomString(slen, String.fromCharCode(48 + slen));\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\tconst clockStart = clock();\n\t\tinsertText({\n\t\t\tmergeTree,\n\t\t\tpos,\n\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\tclientId: LocalClientId,\n\t\t\tseq: UniversalSequenceNumber,\n\t\t\ttext: s,\n\t\t\tprops: undefined,\n\t\t\topArgs: undefined,\n\t\t});\n\t\taccumTime += elapsedMicroseconds(clockStart);\n\t\tif (i > 0 && 0 === i % 50000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per insert with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\tlog(process.memoryUsage().heapUsed);\n\taccumTime = 0;\n\taccumTreeSize = 0;\n\ttreeCount = 0;\n\tfor (let i = 0; i < removeCount; i++) {\n\t\tconst dlen = randInt();\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\t// Log(itree.toString());\n\t\tconst clockStart = clock();\n\t\tmergeTree.markRangeRemoved(\n\t\t\tpos,\n\t\t\tpos + dlen,\n\t\t\tUniversalSequenceNumber,\n\t\t\tLocalClientId,\n\t\t\tUniversalSequenceNumber,\n\t\t\tfalse,\n\t\t\tundefined as any,\n\t\t);\n\t\taccumTime += elapsedMicroseconds(clockStart);\n\n\t\tif (i > 0 && 0 === i % 50000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per del with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function mergeTreeCheckedTest() {\n\tconst mergeTree = new MergeTree();\n\tmergeTree.insertSegments(\n\t\t0,\n\t\t[TextSegment.make(\"the cat is on the mat\")],\n\t\tUniversalSequenceNumber,\n\t\tLocalClientId,\n\t\tUniversalSequenceNumber,\n\t\tundefined,\n\t);\n\tconst insertCount = 2000;\n\tconst removeCount = 1400;\n\tconst largeRemoveCount = 20;\n\tconst random = makeRandom(0xdeadbeef, 0xfeedbed);\n\n\tconst imin = 1;\n\tconst imax = 9;\n\tconst randInt = () => random.integer(imin, imax);\n\tconst randLargeInt = () => random.integer(10, 1000);\n\tfunction randomString(len: number, c: string) {\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tstr += c;\n\t\t}\n\t\treturn str;\n\t}\n\taccumTime = 0;\n\tlet accumTreeSize = 0;\n\tlet treeCount = 0;\n\tlet errorCount = 0;\n\tfor (let i = 0; i < insertCount; i++) {\n\t\tconst slen = randInt();\n\t\tconst s = randomString(slen, String.fromCharCode(48 + slen));\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\tif (!checkInsertMergeTree(mergeTree, pos, makeCollabTextSegment(s), true)) {\n\t\t\tlog(\n\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} slen: ${slen} s: ${s} itree len: ${mergeTree.getLength(\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tLocalClientId,\n\t\t\t\t)}`,\n\t\t\t);\n\t\t\tlog(mergeTree.toString());\n\t\t\terrorCount++;\n\t\t\tbreak;\n\t\t}\n\t\tif (i > 0 && 0 === i % 1000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per insert with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\taccumTime = 0;\n\taccumTreeSize = 0;\n\ttreeCount = 0;\n\tfor (let i = 0; i < largeRemoveCount; i++) {\n\t\tconst dlen = randLargeInt();\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\t// log(itree.toString());\n\t\tif (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {\n\t\t\tlog(\n\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tLocalClientId,\n\t\t\t\t)}`,\n\t\t\t);\n\t\t\tlog(mergeTree.toString());\n\t\t\tbreak;\n\t\t}\n\t\tif (i > 0 && 0 === i % 10) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per large del with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\taccumTime = 0;\n\taccumTreeSize = 0;\n\ttreeCount = 0;\n\tfor (let i = 0; i < removeCount; i++) {\n\t\tconst dlen = randInt();\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\t// log(itree.toString());\n\t\tif (i & 1) {\n\t\t\tif (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {\n\t\t\t\tlog(\n\t\t\t\t\t`mr i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(\n\t\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\t\tLocalClientId,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t\tlog(mergeTree.toString());\n\t\t\t\terrorCount++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tif (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {\n\t\t\t\tlog(\n\t\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(\n\t\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\t\tLocalClientId,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t\tlog(mergeTree.toString());\n\t\t\t\terrorCount++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (i > 0 && 0 === i % 1000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per del with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\taccumTime = 0;\n\taccumTreeSize = 0;\n\ttreeCount = 0;\n\tfor (let i = 0; i < insertCount; i++) {\n\t\tconst slen = randInt();\n\t\tconst s = randomString(slen, String.fromCharCode(48 + slen));\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\tif (!checkInsertMergeTree(mergeTree, pos, makeCollabTextSegment(s), true)) {\n\t\t\tlog(\n\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} slen: ${slen} s: ${s} itree len: ${mergeTree.getLength(\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tLocalClientId,\n\t\t\t\t)}`,\n\t\t\t);\n\t\t\tlog(mergeTree.toString());\n\t\t\terrorCount++;\n\t\t\tbreak;\n\t\t}\n\t\tif (i > 0 && 0 === i % 1000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per insert with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\taccumTime = 0;\n\taccumTreeSize = 0;\n\ttreeCount = 0;\n\tfor (let i = 0; i < removeCount; i++) {\n\t\tconst dlen = randInt();\n\t\tconst preLen = mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\tconst pos = random.integer(0, preLen);\n\t\t// log(itree.toString());\n\t\tif (i & 1) {\n\t\t\tif (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {\n\t\t\t\tlog(\n\t\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(\n\t\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\t\tLocalClientId,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t\tlog(mergeTree.toString());\n\t\t\t\terrorCount++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tif (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {\n\t\t\t\tlog(\n\t\t\t\t\t`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(\n\t\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\t\tLocalClientId,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t\tlog(mergeTree.toString());\n\t\t\t\terrorCount++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (i > 0 && 0 === i % 1000) {\n\t\t\tconst perIter = (accumTime / (i + 1)).toFixed(3);\n\t\t\ttreeCount++;\n\t\t\taccumTreeSize += mergeTree.getLength(UniversalSequenceNumber, LocalClientId);\n\t\t\tconst averageTreeSize = (accumTreeSize / treeCount).toFixed(3);\n\t\t\tlog(\n\t\t\t\t`i: ${i} time: ${accumTime}us which is average ${perIter} per del with average tree size ${averageTreeSize}`,\n\t\t\t);\n\t\t}\n\t}\n\treturn errorCount;\n}\n\ntype SharedStringJSONSegment = IJSONTextSegment & IJSONMarkerSegment;\n\nexport function TestPack(verbose = true) {\n\tconst random = makeRandom(0xdeadbeef, 0xfeedbed);\n\tconst minSegCount = 1;\n\tconst maxSegCount = 1000;\n\tconst randSmallSegmentCount = () => random.integer(1, 4);\n\tconst randSegmentCount = () => random.integer(minSegCount, maxSegCount);\n\tconst randTextLength = () => random.integer(1, 5);\n\tconst zedCode = 48;\n\tfunction randomString(len: number, c: string) {\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tstr += c;\n\t\t}\n\t\treturn str;\n\t}\n\n\tlet getTextTime = 0;\n\tlet getTextCalls = 0;\n\tconst catchUpTime = 0;\n\tconst catchUps = 0;\n\n\tfunction reportTiming(client: TestClient) {\n\t\tif (!verbose) {\n\t\t\treturn;\n\t\t}\n\t\tconst aveTime = (client.accumTime / client.accumOps).toFixed(1);\n\t\tconst stats = getStats(client.mergeTree);\n\t\tconst windowTime = stats.windowTime!;\n\t\tconst packTime = stats.packTime;\n\t\tconst aveWindowTime = ((windowTime || 0) / client.accumOps).toFixed(1);\n\t\tconst avePackTime = ((packTime ?? 0) / client.accumOps).toFixed(1);\n\t\tconst aveExtraWindowTime = (client.accumWindowTime / client.accumOps).toFixed(1);\n\t\tconst aveWindow = (client.accumWindow / client.accumOps).toFixed(1);\n\t\tconst adjTime = (\n\t\t\t(client.accumTime - (windowTime - client.accumWindowTime)) /\n\t\t\tclient.accumOps\n\t\t).toFixed(1);\n\t\tconst aveGetTextTime = (getTextTime / getTextCalls).toFixed(1);\n\t\tlet aveCatchUpTime = \"off\";\n\t\tif (catchUps > 0) {\n\t\t\taveCatchUpTime = (catchUpTime / catchUps).toFixed(1);\n\t\t}\n\t\tlog(`get text time: ${aveGetTextTime} catch up ${aveCatchUpTime}`);\n\t\tlog(\n\t\t\t`accum time ${client.accumTime} us ops: ${client.accumOps} ave time ${aveTime} - wtime ${adjTime} pack ${avePackTime} ave window ${aveWindow}`,\n\t\t);\n\t\tlog(\n\t\t\t`accum window time ${client.accumWindowTime} us ave window time total ${aveWindowTime} not in ops ${aveExtraWindowTime}; max ${client.maxWindowTime}`,\n\t\t);\n\t}\n\n\tfunction manyMergeTrees() {\n\t\tconst mergeTreeCount = 2000000;\n\t\tconst a = <MergeTree[]>Array(mergeTreeCount);\n\t\tfor (let i = 0; i < mergeTreeCount; i++) {\n\t\t\ta[i] = new MergeTree();\n\t\t}\n\t\tfor (;;) {}\n\t}\n\n\tfunction clientServer(startFile?: string, initRounds = 1000) {\n\t\tconst clientCount = 5;\n\t\tconst fileSegCount = 0;\n\t\tlet initString = \"\";\n\n\t\tif (!startFile) {\n\t\t\tinitString = \"don't ask for whom the bell tolls; it tolls for thee\";\n\t\t}\n\t\tconst server = new TestServer();\n\t\tserver.insertTextLocal(0, initString);\n\t\tserver.measureOps = true;\n\t\tif (startFile) {\n\t\t\tloadTextFromFile(startFile, server.mergeTree, fileSegCount);\n\t\t}\n\n\t\tconst clients = new Array<TestClient>(clientCount);\n\t\tfor (let i = 0; i < clientCount; i++) {\n\t\t\tclients[i] = new TestClient();\n\t\t\tclients[i].insertTextLocal(0, initString);\n\t\t\tclients[i].measureOps = true;\n\t\t\tif (startFile) {\n\t\t\t\tloadTextFromFile(startFile, clients[i].mergeTree, fileSegCount);\n\t\t\t}\n\t\t\tclients[i].startOrUpdateCollaboration(`Fred${i}`);\n\t\t}\n\t\tserver.startOrUpdateCollaboration(\"theServer\");\n\t\tserver.addClients(clients);\n\n\t\tfunction checkTextMatch() {\n\t\t\t// log(`checking text match @${server.getCurrentSeq()}`);\n\t\t\tconst clockStart = clock();\n\t\t\tconst serverText = server.getText();\n\t\t\tgetTextTime += elapsedMicroseconds(clockStart);\n\t\t\tgetTextCalls++;\n\t\t\tfor (const client of clients) {\n\t\t\t\tconst cliText = client.getText();\n\t\t\t\tif (cliText !== serverText) {\n\t\t\t\t\tlog(\n\t\t\t\t\t\t`mismatch @${server.getCurrentSeq()} client @${client.getCurrentSeq()} id: ${client.getClientId()}`,\n\t\t\t\t\t);\n\t\t\t\t\t// log(serverText);\n\t\t\t\t\t// log(cliText);\n\t\t\t\t\tconst diffParts = JsDiff.diffChars(serverText, cliText);\n\t\t\t\t\tfor (const diffPart of diffParts) {\n\t\t\t\t\t\tlet annotes = \"\";\n\t\t\t\t\t\tif (diffPart.added) {\n\t\t\t\t\t\t\tannotes += \"added \";\n\t\t\t\t\t\t} else if (diffPart.removed) {\n\t\t\t\t\t\t\tannotes += \"removed \";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (diffPart.count) {\n\t\t\t\t\t\t\tannotes += `count: ${diffPart.count}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlog(`text: ${diffPart.value} ${annotes}`);\n\t\t\t\t\t}\n\t\t\t\t\tlog(server.mergeTree.toString());\n\t\t\t\t\tlog(client.mergeTree.toString());\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tconst rounds = initRounds;\n\n\t\tfunction clientProcessSome(client: TestClient, all = false) {\n\t\t\tconst cliMsgCount = client.getMessageCount();\n\t\t\tconst countToApply = all\n\t\t\t\t? cliMsgCount\n\t\t\t\t: random.integer(Math.floor((2 * cliMsgCount) / 3), cliMsgCount);\n\t\t\tclient.applyMessages(countToApply);\n\t\t}\n\n\t\tfunction serverProcessSome(_server: TestClient, all = false) {\n\t\t\tconst svrMsgCount = _server.getMessageCount();\n\t\t\tconst countToApply = all\n\t\t\t\t? svrMsgCount\n\t\t\t\t: random.integer(Math.floor((2 * svrMsgCount) / 3), svrMsgCount);\n\t\t\treturn _server.applyMessages(countToApply);\n\t\t}\n\n\t\tfunction randomSpateOfInserts(client: TestClient, charIndex: number) {\n\t\t\tconst textLen = randTextLength();\n\t\t\tconst text = randomString(\n\t\t\t\ttextLen,\n\t\t\t\tString.fromCharCode(zedCode + ((client.getCurrentSeq() + charIndex) % 50)),\n\t\t\t);\n\t\t\tconst preLen = client.getLength();\n\t\t\tconst pos = random.integer(0, preLen);\n\t\t\tconst insertTextOp = client.insertTextLocal(pos, text);\n\t\t\tserver.enqueueMsg(client.makeOpMessage(insertTextOp!, UnassignedSequenceNumber));\n\n\t\t\tif (TestClient.useCheckQ) {\n\t\t\t\tclient.enqueueTestString();\n\t\t\t}\n\t\t}\n\n\t\tfunction randomSpateOfRemoves(client: TestClient) {\n\t\t\tconst dlen = randTextLength();\n\t\t\tconst preLen = client.getLength();\n\t\t\tconst pos = random.integer(0, preLen);\n\t\t\tconst op = client.removeRangeLocal(pos, pos + dlen);\n\t\t\tserver.enqueueMsg(client.makeOpMessage(op!));\n\t\t\tif (TestClient.useCheckQ) {\n\t\t\t\tclient.enqueueTestString();\n\t\t\t}\n\t\t}\n\n\t\tfunction randomWordMove(client: TestClient) {\n\t\t\tconst word1 = client.findRandomWord();\n\t\t\tif (word1) {\n\t\t\t\tconst removeStart = word1.pos;\n\t\t\t\tconst removeEnd = removeStart + word1.text.length;\n\t\t\t\tconst removeOp = client.removeRangeLocal(removeStart, removeEnd);\n\t\t\t\tserver.enqueueMsg(client.makeOpMessage(removeOp!, UnassignedSequenceNumber));\n\t\t\t\tif (TestClient.useCheckQ) {\n\t\t\t\t\tclient.enqueueTestString();\n\t\t\t\t}\n\t\t\t\tlet word2 = client.findRandomWord();\n\t\t\t\twhile (!word2) {\n\t\t\t\t\tword2 = client.findRandomWord();\n\t\t\t\t}\n\t\t\t\tconst pos = word2.pos + word2.text.length;\n\t\t\t\tconst insertOp = client.insertTextLocal(pos, word1.text);\n\t\t\t\tserver.enqueueMsg(client.makeOpMessage(insertOp!, UnassignedSequenceNumber));\n\n\t\t\t\tif (TestClient.useCheckQ) {\n\t\t\t\t\tclient.enqueueTestString();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet errorCount = 0;\n\n\t\tconst extractSnapTime = 0;\n\t\tconst extractSnapOps = 0;\n\t\tfunction finishRound(roundCount: number) {\n\t\t\t// Process remaining messages\n\t\t\tif (serverProcessSome(server, true)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const client of clients) {\n\t\t\t\tclientProcessSome(client, true);\n\t\t\t}\n\n\t\t\tif (0 === roundCount % 100) {\n\t\t\t\tconst clockStart = clock();\n\t\t\t\tif (checkTextMatch()) {\n\t\t\t\t\tlog(`round: ${roundCount} BREAK`);\n\t\t\t\t\terrorCount++;\n\t\t\t\t\treturn errorCount;\n\t\t\t\t}\n\t\t\t\tcheckTime += elapsedMicroseconds(clockStart);\n\t\t\t\tif (verbose) {\n\t\t\t\t\tlog(`wall clock is ${((Date.now() - startTime) / 1000.0).toFixed(1)}`);\n\t\t\t\t}\n\t\t\t\tconst stats = getStats(server.mergeTree);\n\t\t\t\tconst liveAve = (stats.liveCount / stats.nodeCount).toFixed(1);\n\t\t\t\tconst posLeaves = stats.leafCount - stats.removedLeafCount;\n\t\t\t\tlet aveExtractSnapTime = \"off\";\n\t\t\t\tif (extractSnapOps > 0) {\n\t\t\t\t\taveExtractSnapTime = (extractSnapTime / extractSnapOps).toFixed(1);\n\t\t\t\t}\n\t\t\t\tlog(\n\t\t\t\t\t`round: ${roundCount} seq ${\n\t\t\t\t\t\tserver.seq\n\t\t\t\t\t} char count ${server.getLength()} height ${stats.maxHeight} lv ${\n\t\t\t\t\t\tstats.leafCount\n\t\t\t\t\t} rml ${stats.removedLeafCount} p ${posLeaves} nodes ${\n\t\t\t\t\t\tstats.nodeCount\n\t\t\t\t\t} pop ${liveAve} histo ${stats.histo}`,\n\t\t\t\t);\n\t\t\t\tif (extractSnapOps > 0) {\n\t\t\t\t\taveExtractSnapTime = (extractSnapTime / extractSnapOps).toFixed(1);\n\t\t\t\t\tlog(`ave extract snap time ${aveExtractSnapTime}`);\n\t\t\t\t}\n\t\t\t\treportTiming(server);\n\t\t\t\treportTiming(clients[2]);\n\t\t\t\tlet totalTime = server.accumTime + server.accumWindowTime;\n\t\t\t\tfor (const client of clients) {\n\t\t\t\t\ttotalTime += client.accumTime + client.accumWindowTime;\n\t\t\t\t}\n\t\t\t\tif (verbose) {\n\t\t\t\t\tlog(\n\t\t\t\t\t\t`total time ${(totalTime / 1000000.0).toFixed(1)} check time ${(\n\t\t\t\t\t\t\tcheckTime / 1000000.0\n\t\t\t\t\t\t).toFixed(1)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// log(server.getText());\n\t\t\t\t// log(server.mergeTree.toString());\n\t\t\t}\n\t\t\treturn errorCount;\n\t\t}\n\n\t\tfunction round(roundCount: number) {\n\t\t\tfor (const client of clients) {\n\t\t\t\tconst insertSegmentCount = randSmallSegmentCount();\n\t\t\t\tfor (let j = 0; j < insertSegmentCount; j++) {\n\t\t\t\t\tif (startFile) {\n\t\t\t\t\t\trandomWordMove(client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trandomSpateOfInserts(client, j);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (serverProcessSome(server)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tclientProcessSome(client);\n\n\t\t\t\tlet removeSegmentCount = Math.floor((3 * insertSegmentCount) / 4);\n\t\t\t\tif (removeSegmentCount < 1) {\n\t\t\t\t\tremoveSegmentCount = 1;\n\t\t\t\t}\n\t\t\t\tfor (let j = 0; j < removeSegmentCount; j++) {\n\t\t\t\t\tif (startFile) {\n\t\t\t\t\t\trandomWordMove(client);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trandomSpateOfRemoves(client);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (serverProcessSome(server)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tclientProcessSome(client);\n\t\t\t}\n\t\t\tfinishRound(roundCount);\n\t\t}\n\n\t\tconst startTime = Date.now();\n\t\tlet checkTime = 0;\n\n\t\tfor (let i = 0; i < rounds; i++) {\n\t\t\tround(i);\n\t\t\tif (errorCount > 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\ttail();\n\n\t\tfunction tail() {\n\t\t\treportTiming(server);\n\t\t\treportTiming(clients[2]);\n\t\t\t// log(server.getText());\n\t\t\t// log(server.mergeTree.toString());\n\t\t}\n\t\treturn errorCount;\n\t}\n\n\tfunction randolicious() {\n\t\tconst insertRounds = 40;\n\t\tconst removeRounds = 32;\n\n\t\tconst cliA = new TestClient();\n\t\tcliA.insertTextLocal(0, \"a stitch in time saves nine\");\n\t\tcliA.startOrUpdateCollaboration(\"FredA\");\n\t\tconst cliB = new TestClient();\n\t\tcliB.insertTextLocal(0, \"a stitch in time saves nine\");\n\t\tcliB.startOrUpdateCollaboration(\"FredB\");\n\t\tfunction checkTextMatch(checkSeq: number) {\n\t\t\tlet error = false;\n\t\t\tif (cliA.getCurrentSeq() !== checkSeq) {\n\t\t\t\tlog(`client A has seq number ${cliA.getCurrentSeq()} mismatch with ${checkSeq}`);\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\tif (cliB.getCurrentSeq() !== checkSeq) {\n\t\t\t\tlog(`client B has seq number ${cliB.getCurrentSeq()} mismatch with ${checkSeq}`);\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\tconst aText = cliA.getText();\n\t\t\tconst bText = cliB.getText();\n\t\t\tif (aText !== bText) {\n\t\t\t\tlog(`mismatch @${checkSeq}:`);\n\t\t\t\tlog(aText);\n\t\t\t\tlog(bText);\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\tif (!nodeOrdinalsHaveIntegrity(cliA.mergeTree.root)) {\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\tif (!nodeOrdinalsHaveIntegrity(cliB.mergeTree.root)) {\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\treturn error;\n\t\t}\n\n\t\tlet min = 0;\n\t\tcliA.accumTime = 0;\n\t\tcliB.accumTime = 0;\n\n\t\tfunction insertTest() {\n\t\t\tfor (let i = 0; i < insertRounds; i++) {\n\t\t\t\tlet insertCount = randSegmentCount();\n\t\t\t\tlet sequenceNumber = cliA.getCurrentSeq() + 1;\n\t\t\t\tlet firstSeq = sequenceNumber;\n\t\t\t\tconst cliAMsgs: ISequencedDocumentMessage[] = [];\n\t\t\t\tfor (let j = 0; j < insertCount; j++) {\n\t\t\t\t\tconst textLen = randTextLength();\n\t\t\t\t\tconst text = randomString(\n\t\t\t\t\t\ttextLen,\n\t\t\t\t\t\tString.fromCharCode(zedCode + (sequenceNumber % 50)),\n\t\t\t\t\t);\n\t\t\t\t\tconst preLen = cliA.getLength();\n\t\t\t\t\tconst pos = random.integer(0, preLen);\n\n\t\t\t\t\tconst msg = cliA.makeOpMessage(\n\t\t\t\t\t\tcliA.insertTextLocal(pos, text)!,\n\t\t\t\t\t\tsequenceNumber++,\n\t\t\t\t\t);\n\t\t\t\t\tmsg.minimumSequenceNumber = min;\n\t\t\t\t\tcliAMsgs.push(msg);\n\t\t\t\t\tcliB.applyMsg(msg);\n\t\t\t\t}\n\t\t\t\tfor (let k = firstSeq; k < sequenceNumber; k++) {\n\t\t\t\t\tcliA.applyMsg(cliAMsgs.shift()!);\n\t\t\t\t}\n\t\t\t\tif (checkTextMatch(sequenceNumber - 1)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tmin = sequenceNumber - 1;\n\n\t\t\t\tinsertCount = randSegmentCount();\n\t\t\t\tsequenceNumber = cliA.getCurrentSeq() + 1;\n\t\t\t\tfirstSeq = sequenceNumber;\n\t\t\t\tconst cliBMsgs: ISequencedDocumentMessage[] = [];\n\t\t\t\tfor (let j = 0; j < insertCount; j++) {\n\t\t\t\t\tconst textLen = randTextLength();\n\t\t\t\t\tconst text = randomString(\n\t\t\t\t\t\ttextLen,\n\t\t\t\t\t\tString.fromCharCode(zedCode + (sequenceNumber % 50)),\n\t\t\t\t\t);\n\t\t\t\t\tconst preLen = cliB.getLength();\n\t\t\t\t\tconst pos = random.integer(0, preLen);\n\t\t\t\t\tconst msg = cliB.makeOpMessage(\n\t\t\t\t\t\tcliB.insertTextLocal(pos, text)!,\n\t\t\t\t\t\tsequenceNumber++,\n\t\t\t\t\t);\n\t\t\t\t\tmsg.minimumSequenceNumber = min;\n\t\t\t\t\tcliBMsgs.push(msg);\n\t\t\t\t\tcliA.applyMsg(msg);\n\t\t\t\t}\n\t\t\t\tfor (let k = firstSeq; k < sequenceNumber; k++) {\n\t\t\t\t\tcliB.applyMsg(cliBMsgs.shift()!);\n\t\t\t\t}\n\t\t\t\tif (checkTextMatch(sequenceNumber - 1)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tmin = sequenceNumber - 1;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction removeTest() {\n\t\t\tfor (let i = 0; i < removeRounds; i++) {\n\t\t\t\tlet removeCount = randSegmentCount();\n\t\t\t\tlet sequenceNumber = cliA.getCurrentSeq() + 1;\n\t\t\t\tlet firstSeq = sequenceNumber;\n\t\t\t\tconst cliAMsgs: ISequencedDocumentMessage[] = [];\n\t\t\t\tfor (let j = 0; j < removeCount; j++) {\n\t\t\t\t\tconst dlen = randTextLength();\n\t\t\t\t\tconst maxStartPos = cliA.getLength() - dlen;\n\t\t\t\t\tconst pos = random.integer(0, maxStartPos);\n\t\t\t\t\tconst msg = cliA.makeOpMessage(\n\t\t\t\t\t\tcliA.removeRangeLocal(pos, pos + dlen)!,\n\t\t\t\t\t\tsequenceNumber++,\n\t\t\t\t\t);\n\t\t\t\t\tmsg.minimumSequenceNumber = min;\n\t\t\t\t\tcliAMsgs.push(msg);\n\t\t\t\t\tcliB.applyMsg(msg);\n\t\t\t\t}\n\t\t\t\tfor (let k = firstSeq; k < sequenceNumber; k++) {\n\t\t\t\t\tcliA.applyMsg(cliAMsgs.shift()!);\n\t\t\t\t}\n\t\t\t\tif (checkTextMatch(sequenceNumber - 1)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tmin = sequenceNumber - 1;\n\n\t\t\t\tremoveCount = randSegmentCount();\n\t\t\t\tsequenceNumber = cliA.getCurrentSeq() + 1;\n\t\t\t\tfirstSeq = sequenceNumber;\n\t\t\t\tconst cliBMsgs: ISequencedDocumentMessage[] = [];\n\t\t\t\tfor (let j = 0; j < removeCount; j++) {\n\t\t\t\t\tconst dlen = randTextLength();\n\t\t\t\t\tconst maxStartPos = cliB.getLength() - dlen;\n\t\t\t\t\tconst pos = random.integer(0, maxStartPos);\n\t\t\t\t\tconst msg = cliB.makeOpMessage(\n\t\t\t\t\t\tcliB.removeRangeLocal(pos, pos + dlen)!,\n\t\t\t\t\t\tsequenceNumber++,\n\t\t\t\t\t);\n\t\t\t\t\tmsg.minimumSequenceNumber = min;\n\t\t\t\t\tcliBMsgs.push(msg);\n\t\t\t\t\tcliA.applyMsg(msg);\n\t\t\t\t}\n\t\t\t\tfor (let k = firstSeq; k < sequenceNumber; k++) {\n\t\t\t\t\tcliB.applyMsg(cliBMsgs.shift()!);\n\t\t\t\t}\n\t\t\t\tif (checkTextMatch(sequenceNumber - 1)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tmin = sequenceNumber - 1;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\tlet errorCount = 0;\n\t\tif (insertTest()) {\n\t\t\tlog(cliA.mergeTree.toString());\n\t\t\tlog(cliB.mergeTree.toString());\n\t\t\terrorCount++;\n\t\t} else {\n\t\t\tlog(`sequence number: ${cliA.getCurrentSeq()} min: ${cliA.getCollabWindow().minSeq}`);\n\t\t\t// log(cliA.mergeTree.toString());\n\n\t\t\tlog(`testing remove at ${cliA.getCurrentSeq()} and ${cliB.getCurrentSeq()}`);\n\t\t\tif (removeTest()) {\n\t\t\t\tlog(cliA.mergeTree.toString());\n\t\t\t\tlog(cliB.mergeTree.toString());\n\t\t\t\terrorCount++;\n\t\t\t}\n\t\t}\n\t\tlog(`sequence number: ${cliA.getCurrentSeq()} min: ${cliA.getCollabWindow().minSeq}`);\n\t\t// log(cliA.mergeTree.toString());\n\t\t// log(cliB.mergeTree.toString());\n\t\t// log(cliA.getText());\n\t\tconst aveWindow = ((minSegCount + maxSegCount) / 2).toFixed(1);\n\t\tconst aveTime = (cliA.accumTime / cliA.accumOps).toFixed(3);\n\t\tconst aveWindowTime = (cliA.accumWindowTime / cliA.accumOps).toFixed(3);\n\t\tif (verbose) {\n\t\t\tlog(\n\t\t\t\t`accum time ${cliA.accumTime} us ops: ${cliA.accumOps} ave window ${aveWindow} ave time ${aveTime}`,\n\t\t\t);\n\t\t\tlog(\n\t\t\t\t`accum window time ${cliA.accumWindowTime} us ave window time ${aveWindowTime}; max ${cliA.maxWindowTime}`,\n\t\t\t);\n\t\t}\n\t\t// log(cliB.getText());\n\t\treturn errorCount;\n\t}\n\n\tconst clientNames = [\"Ed\", \"Ted\", \"Ned\", \"Harv\", \"Marv\", \"Glenda\", \"Susan\"];\n\tfunction firstTest() {\n\t\tlet cli = new TestClient();\n\t\tcli.insertTextLocal(0, \"on the mat.\");\n\t\tcli.startOrUpdateCollaboration(\"Fred1\");\n\t\tfor (const cname of clientNames) {\n\t\t\tcli.addLongClientId(cname);\n\t\t}\n\t\tcli.insertTextRemote(0, \"that \", undefined, 1, 0, \"1\");\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t}\n\t\tcli.insertTextRemote(0, \"fat \", undefined, 2, 0, \"2\");\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t}\n\t\tcli.insertTextLocal(5, \"cat \");\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t}\n\t\tif (verbose) {\n\t\t\tfor (let i = 0; i < 4; i++) {\n\t\t\t\tfor (let j = 0; j < 3; j++) {\n\t\t\t\t\tlog(cli.relText(i, j));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcli.mergeTree.ackPendingSegment(createLocalOpArgs(MergeTreeDeltaType.INSERT, 3));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 4; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcli.insertMarkerRemote(\n\t\t\t0,\n\t\t\t{ refType: ReferenceType.Tile },\n\t\t\t{ [reservedTileLabelsKey]: [\"peach\"] },\n\t\t\t5,\n\t\t\t0,\n\t\t\t\"2\",\n\t\t);\n\t\tcli.insertTextRemote(6, \"very \", undefined, 6, 2, \"2\");\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 7; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst segs = <SharedStringJSONSegment[]>(\n\t\t\tnew SnapshotLegacy(cli.mergeTree, createChildLogger({ namespace: \"fluid:snapshot\" }))\n\t\t\t\t.extractSync()\n\t\t\t\t.map((seg) => seg.toJSONObject() as JsonSegmentSpecs)\n\t\t);\n\t\tif (verbose) {\n\t\t\tfor (const seg of segs) {\n\t\t\t\tlog(`${specToSegment(seg)}`);\n\t\t\t}\n\t\t}\n\t\tcli = new TestClient();\n\t\tcli.insertTextLocal(0, \" old sock!\");\n\t\tcli.startOrUpdateCollaboration(\"Fred2\");\n\t\tfor (const cname of clientNames) {\n\t\t\tcli.addLongClientId(cname);\n\t\t}\n\t\tcli.insertTextRemote(0, \"abcde\", undefined, 1, 0, \"2\");\n\t\tcli.insertTextRemote(0, \"yyy\", undefined, 2, 0, \"1\");\n\t\tcli.insertTextRemote(2, \"zzz\", undefined, 3, 1, \"3\");\n\t\tcli.insertTextRemote(1, \"EAGLE\", undefined, 4, 1, \"4\");\n\t\tcli.insertTextRemote(4, \"HAS\", undefined, 5, 1, \"5\");\n\t\tcli.insertTextLocal(19, \" LANDED\");\n\t\tcli.insertTextRemote(0, \"yowza: \", undefined, 6, 4, \"2\");\n\t\tcli.mergeTree.ackPendingSegment(createLocalOpArgs(MergeTreeDeltaType.INSERT, 7));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 6; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 8; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcli.applyMsg(cli.makeOpMessage(createRemoveRangeOp(3, 5), 8, 6, \"1\"));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 6; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 9; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcli = new TestClient();\n\t\tcli.insertTextLocal(0, \"abcdefgh\");\n\t\tcli.startOrUpdateCollaboration(\"Fred3\");\n\t\tfor (const cname of clientNames) {\n\t\t\tcli.addLongClientId(cname);\n\t\t}\n\t\tcli.applyMsg(cli.makeOpMessage(createRemoveRangeOp(1, 3), 1, 0, \"3\"));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t}\n\t\tcli.insertTextRemote(2, \"zzz\", undefined, 2, 0, \"2\");\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t}\n\t\tcli.insertTextRemote(9, \" chaser\", undefined, 3, 2, \"3\");\n\t\tcli.removeRangeLocal(12, 14);\n\t\tcli.mergeTree.ackPendingSegment(createLocalOpArgs(MergeTreeDeltaType.REMOVE, 4));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 5; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcli.insertTextLocal(14, \"*yolumba*\");\n\t\tcli.insertTextLocal(17, \"-zanzibar-\");\n\t\tcli.mergeTree.ackPendingSegment(createLocalOpArgs(MergeTreeDeltaType.INSERT, 5));\n\t\tcli.insertTextRemote(2, \"(aaa)\", undefined, 6, 4, \"2\");\n\t\tcli.mergeTree.ackPendingSegment(createLocalOpArgs(MergeTreeDeltaType.INSERT, 7));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 8; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t/*\n cli.removeRangeLocal(3,8);\n cli.removeRangeLocal(5,7);\n cli.ackPendingSegment(8);\n cli.ackPendingSegment(9);\n */\n\t\tcli.applyMsg(cli.makeOpMessage(createRemoveRangeOp(3, 8), 8, 7, \"2\"));\n\t\tcli.applyMsg(cli.makeOpMessage(createRemoveRangeOp(5, 7), 9, 7, \"2\"));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 10; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst removeOp = cli.removeRangeLocal(3, 5);\n\t\tcli.applyMsg(cli.makeOpMessage(createRemoveRangeOp(3, 6), 10, 9, \"2\"));\n\t\tcli.applyMsg(cli.makeOpMessage(removeOp!, 11));\n\t\tif (verbose) {\n\t\t\tlog(cli.mergeTree.toString());\n\t\t\tfor (let clientId = 0; clientId < 4; clientId++) {\n\t\t\t\tfor (let refSeq = 0; refSeq < 12; refSeq++) {\n\t\t\t\t\tlog(cli.relText(clientId, refSeq));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tfirstTest,\n\t\trandolicious,\n\t\tclientServer,\n\t\tmanyMergeTrees,\n\t};\n}\n\nconst createLocalOpArgs = (\n\ttype: MergeTreeDeltaType,\n\tsequenceNumber: number,\n): IMergeTreeDeltaOpArgs => ({\n\top: { type } as IMergeTreeOp,\n\tsequencedMessage: {\n\t\tsequenceNumber,\n\t} as ISequencedDocumentMessage,\n});\n\nexport class RandomPack {\n\trandom: IRandom;\n\tconstructor() {\n\t\tthis.random = makeRandom(0xdeadbeef, 0xfeedbed);\n\t}\n\n\trandInteger(min: number, max: number) {\n\t\treturn this.random.integer(min, max);\n\t}\n\n\trandString(wordCount: number) {\n\t\tconst exampleWords = [\n\t\t\t\"giraffe\",\n\t\t\t\"hut\",\n\t\t\t\"aardvark\",\n\t\t\t\"gold\",\n\t\t\t\"hover\",\n\t\t\t\"yurt\",\n\t\t\t\"hot\",\n\t\t\t\"antelope\",\n\t\t\t\"gift\",\n\t\t\t\"banana\",\n\t\t\t\"book\",\n\t\t\t\"airplane\",\n\t\t\t\"kitten\",\n\t\t\t\"moniker\",\n\t\t\t\"lemma\",\n\t\t\t\"doughnut\",\n\t\t\t\"orange\",\n\t\t\t\"tangerine\",\n\t\t];\n\t\tlet buf = \"\";\n\t\tfor (let i = 0; i < wordCount; i++) {\n\t\t\tconst exampleWord = exampleWords[this.randInteger(0, exampleWords.length - 1)];\n\t\t\tif (i > 0) {\n\t\t\t\tbuf += \" \";\n\t\t\t}\n\t\t\tbuf += exampleWord;\n\t\t}\n\t\treturn buf;\n\t}\n}\n\nexport type DocumentNode = string | DocumentTree;\n/**\n * Generate and model documents from the following tree grammar:\n * Row -\\> row[Box*];\n * Box -\\> box[Content];\n * Content -\\> (Row|Paragraph)*;\n * Paragraph -\\> pgtile text;\n * Document -\\> Content\n */\nexport class DocumentTree {\n\tpos = 0;\n\tids = { box: 0, row: 0 };\n\tid: string | undefined;\n\tstatic randPack = new RandomPack();\n\n\tconstructor(\n\t\tpublic name: string,\n\t\tpublic children: DocumentNode[],\n\t) {}\n\n\taddToMergeTree(client: TestClient, docNode: DocumentNode) {\n\t\tif (typeof docNode === \"string\") {\n\t\t\tconst text = docNode;\n\t\t\tclient.insertTextLocal(this.pos, text);\n\t\t\tthis.pos += text.length;\n\t\t} else {\n\t\t\tlet id: number | undefined;\n\t\t\tif (docNode.name === \"pg\") {\n\t\t\t\tclient.insertMarkerLocal(this.pos, ReferenceType.Tile, {\n\t\t\t\t\t[reservedTileLabelsKey]: [docNode.name],\n\t\t\t\t});\n\t\t\t\tthis.pos++;\n\t\t\t} else {\n\t\t\t\tconst trid = docNode.name + this.ids[docNode.name].toString();\n\t\t\t\tdocNode.id = trid;\n\t\t\t\tid = this.ids[docNode.name]++;\n\t\t\t\tconst props = {\n\t\t\t\t\t[reservedMarkerIdKey]: trid,\n\t\t\t\t\t[reservedRangeLabelsKey]: [docNode.name],\n\t\t\t\t};\n\t\t\t\tlet behaviors = ReferenceType.Simple;\n\t\t\t\tif (docNode.name === \"row\") {\n\t\t\t\t\tprops[reservedTileLabelsKey] = [\"pg\"];\n\t\t\t\t\tbehaviors |= ReferenceType.Tile;\n\t\t\t\t}\n\n\t\t\t\tclient.insertMarkerLocal(this.pos, behaviors, props);\n\t\t\t\tthis.pos++;\n\t\t\t}\n\t\t\tfor (const child of docNode.children) {\n\t\t\t\tthis.addToMergeTree(client, child);\n\t\t\t}\n\t\t\tif (docNode.name !== \"pg\") {\n\t\t\t\tconst etrid = `end-${docNode.name}${id?.toString()}`;\n\t\t\t\tclient.insertMarkerLocal(this.pos, ReferenceType.Simple, {\n\t\t\t\t\t[reservedMarkerIdKey]: etrid,\n\t\t\t\t\t[reservedRangeLabelsKey]: [docNode.name],\n\t\t\t\t});\n\t\t\t\tthis.pos++;\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic generateDocument() {\n\t\tconst tree = new DocumentTree(\"Document\", DocumentTree.generateContent(0.6));\n\t\treturn tree;\n\t}\n\n\tstatic generateContent(rowProbability: number) {\n\t\tlet _rowProbability = rowProbability;\n\t\tconst items = <DocumentNode[]>[];\n\t\tconst docLen = DocumentTree.randPack.randInteger(7, 25);\n\t\tfor (let i = 0; i < docLen; i++) {\n\t\t\tconst rowThreshold = _rowProbability * 1000;\n\t\t\tconst selector = DocumentTree.randPack.randInteger(1, 1000);\n\t\t\tif (selector >= rowThreshold) {\n\t\t\t\tconst pg = DocumentTree.generateParagraph();\n\t\t\t\titems.push(pg);\n\t\t\t} else {\n\t\t\t\t_rowProbability /= 2;\n\t\t\t\tif (_rowProbability < 0.08) {\n\t\t\t\t\t_rowProbability = 0;\n\t\t\t\t}\n\t\t\t\tconst row = DocumentTree.generateRow(_rowProbability);\n\t\t\t\titems.push(row);\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t}\n\n\t// Model pg tile as tree with single child\n\tstatic generateParagraph() {\n\t\tconst wordCount = DocumentTree.randPack.randInteger(1, 6);\n\t\tconst text = DocumentTree.randPack.randString(wordCount);\n\t\tconst pgTree = new DocumentTree(\"pg\", [text]);\n\t\treturn pgTree;\n\t}\n\n\tstatic generateRow(rowProbability: number) {\n\t\tconst items = <DocumentNode[]>[];\n\t\tconst rowLen = DocumentTree.randPack.randInteger(1, 5);\n\t\tfor (let i = 0; i < rowLen; i++) {\n\t\t\tconst item = DocumentTree.generateBox(rowProbability);\n\t\t\titems.push(item);\n\t\t}\n\t\treturn new DocumentTree(\"row\", items);\n\t}\n\n\tstatic generateBox(rowProbability: number) {\n\t\treturn new DocumentTree(\"box\", DocumentTree.generateContent(rowProbability));\n\t}\n}\n\nfunction findReplacePerf(filename: string) {\n\tconst client = new TestClient();\n\tloadTextFromFile(filename, client.mergeTree);\n\n\tconst clockStart = clock();\n\n\tlet cFetches = 0;\n\tlet cReplaces = 0;\n\tfor (let pos = 0; pos < client.getLength(); ) {\n\t\tconst curSegOff = client.getContainingSegment(pos);\n\t\tcFetches++;\n\n\t\tconst curSeg = curSegOff.segment;\n\t\tconst textSeg = <TextSegment>curSeg;\n\t\tif (textSeg !== null) {\n\t\t\tconst text = textSeg.text;\n\t\t\tconst i = text.indexOf(\"the\");\n\t\t\tif (i >= 0) {\n\t\t\t\tclient.mergeTree.markRangeRemoved(\n\t\t\t\t\tpos + i,\n\t\t\t\t\tpos + i + 3,\n\t\t\t\t\tUniversalSequenceNumber,\n\t\t\t\t\tclient.getClientId(),\n\t\t\t\t\t1,\n\t\t\t\t\tfalse,\n\t\t\t\t\tundefined as any,\n\t\t\t\t);\n\t\t\t\tinsertText({\n\t\t\t\t\tmergeTree: client.mergeTree,\n\t\t\t\t\tpos: pos + i,\n\t\t\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\t\t\tclientId: client.getClientId(),\n\t\t\t\t\tseq: 1,\n\t\t\t\t\ttext: \"teh\",\n\t\t\t\t\tprops: undefined,\n\t\t\t\t\topArgs: undefined,\n\t\t\t\t});\n\t\t\t\tpos = pos + i + 3;\n\t\t\t\tcReplaces++;\n\t\t\t} else {\n\t\t\t\tpos += curSeg!.cachedLength - curSegOff!.offset!;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst elapsed = elapsedMicroseconds(clockStart);\n\tlog(`${cFetches} fetches and ${cReplaces} replaces took ${elapsed} microseconds`);\n}\n\nconst baseDir = \"../../src/test/literature\";\nconst testTimeout = 60000;\n\ndescribe(\"Routerlicious\", () => {\n\tdescribe(\"merge-tree\", () => {\n\t\tbeforeEach(() => {\n\t\t\tlogLines = [];\n\t\t});\n\t\tit(\"firstTest\", () => {\n\t\t\tconst testPack = TestPack(true);\n\t\t\ttestPack.firstTest();\n\t\t});\n\n\t\tit(\"randolicious\", () => {\n\t\t\tconst testPack = TestPack(false);\n\t\t\tassert(testPack.randolicious() === 0, logLines.join(\"\\n\"));\n\t\t}).timeout(testTimeout);\n\n\t\tit(\"mergeTreeCheckedTest\", () => {\n\t\t\tassert(mergeTreeCheckedTest() === 0, logLines.join(\"\\n\"));\n\t\t}).timeout(testTimeout);\n\n\t\tit(\"beastTest\", () => {\n\t\t\tconst testPack = TestPack(false);\n\t\t\tconst filename = path.join(__dirname, baseDir, \"pp.txt\");\n\t\t\tassert(testPack.clientServer(filename, 250) === 0, logLines.join(\"\\n\"));\n\t\t}).timeout(testTimeout);\n\n\t\tit(\"findReplPerf\", () => {\n\t\t\tconst filename = path.join(__dirname, baseDir, \"pp10.txt\");\n\t\t\tfindReplacePerf(filename);\n\t\t}).timeout(testTimeout);\n\t});\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.annotateMarker.spec.d.ts","sourceRoot":"","sources":["../../src/test/client.annotateMarker.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const assert_1 = require("assert");
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const mergeTreeNodes_1 = require("../mergeTreeNodes");
|
|
10
|
+
const ops_1 = require("../ops");
|
|
11
|
+
const textSegment_1 = require("../textSegment");
|
|
12
|
+
const testClient_1 = require("./testClient");
|
|
13
|
+
const testUtils_1 = require("./testUtils");
|
|
14
|
+
describe("TestClient", () => {
|
|
15
|
+
const localUserLongId = "localUser";
|
|
16
|
+
let client;
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
client = new testClient_1.TestClient();
|
|
19
|
+
(0, testUtils_1.insertSegments)({
|
|
20
|
+
mergeTree: client.mergeTree,
|
|
21
|
+
pos: 0,
|
|
22
|
+
segments: [textSegment_1.TextSegment.make("")],
|
|
23
|
+
refSeq: constants_1.UniversalSequenceNumber,
|
|
24
|
+
clientId: client.getClientId(),
|
|
25
|
+
seq: constants_1.UniversalSequenceNumber,
|
|
26
|
+
opArgs: undefined,
|
|
27
|
+
});
|
|
28
|
+
client.startOrUpdateCollaboration(localUserLongId);
|
|
29
|
+
});
|
|
30
|
+
describe(".annotateMarker", () => {
|
|
31
|
+
it("annotate valid marker", () => {
|
|
32
|
+
const insertOp = client.insertMarkerLocal(0, ops_1.ReferenceType.Tile, {
|
|
33
|
+
[mergeTreeNodes_1.reservedMarkerIdKey]: "123",
|
|
34
|
+
});
|
|
35
|
+
(0, assert_1.strict)(insertOp);
|
|
36
|
+
const markerInfo = client.getContainingSegment(0);
|
|
37
|
+
const marker = markerInfo.segment;
|
|
38
|
+
const annotateOp = client.annotateMarker(marker, { foo: "bar" });
|
|
39
|
+
(0, assert_1.strict)(annotateOp);
|
|
40
|
+
(0, assert_1.strict)(marker.properties);
|
|
41
|
+
(0, assert_1.strict)(marker.properties.foo, "bar");
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=client.annotateMarker.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.annotateMarker.spec.js","sourceRoot":"","sources":["../../src/test/client.annotateMarker.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,mCAA0C;AAC1C,4CAAuD;AACvD,sDAAgE;AAChE,gCAAuC;AACvC,gDAA6C;AAC7C,6CAA0C;AAC1C,2CAA6C;AAE7C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC3B,MAAM,eAAe,GAAG,WAAW,CAAC;IACpC,IAAI,MAAkB,CAAC;IAEvB,UAAU,CAAC,GAAG,EAAE;QACf,MAAM,GAAG,IAAI,uBAAU,EAAE,CAAC;QAC1B,IAAA,0BAAc,EAAC;YACd,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE,CAAC,yBAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,EAAE,mCAAuB;YAC/B,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE;YAC9B,GAAG,EAAE,mCAAuB;YAC5B,MAAM,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,0BAA0B,CAAC,eAAe,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,mBAAa,CAAC,IAAI,EAAE;gBAChE,CAAC,oCAAmB,CAAC,EAAE,KAAK;aAC5B,CAAC,CAAC;YACH,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC;YACjB,MAAM,UAAU,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAiB,CAAC;YAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YACjE,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC;YACnB,IAAA,eAAM,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1B,IAAA,eAAM,EAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { UniversalSequenceNumber } from \"../constants\";\nimport { Marker, reservedMarkerIdKey } from \"../mergeTreeNodes\";\nimport { ReferenceType } from \"../ops\";\nimport { TextSegment } from \"../textSegment\";\nimport { TestClient } from \"./testClient\";\nimport { insertSegments } from \"./testUtils\";\n\ndescribe(\"TestClient\", () => {\n\tconst localUserLongId = \"localUser\";\n\tlet client: TestClient;\n\n\tbeforeEach(() => {\n\t\tclient = new TestClient();\n\t\tinsertSegments({\n\t\t\tmergeTree: client.mergeTree,\n\t\t\tpos: 0,\n\t\t\tsegments: [TextSegment.make(\"\")],\n\t\t\trefSeq: UniversalSequenceNumber,\n\t\t\tclientId: client.getClientId(),\n\t\t\tseq: UniversalSequenceNumber,\n\t\t\topArgs: undefined,\n\t\t});\n\t\tclient.startOrUpdateCollaboration(localUserLongId);\n\t});\n\n\tdescribe(\".annotateMarker\", () => {\n\t\tit(\"annotate valid marker\", () => {\n\t\t\tconst insertOp = client.insertMarkerLocal(0, ReferenceType.Tile, {\n\t\t\t\t[reservedMarkerIdKey]: \"123\",\n\t\t\t});\n\t\t\tassert(insertOp);\n\t\t\tconst markerInfo = client.getContainingSegment(0);\n\t\t\tconst marker = markerInfo.segment as Marker;\n\t\t\tconst annotateOp = client.annotateMarker(marker, { foo: \"bar\" });\n\t\t\tassert(annotateOp);\n\t\t\tassert(marker.properties);\n\t\t\tassert(marker.properties.foo, \"bar\");\n\t\t});\n\t});\n});\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
export declare function clientGetPropertiesAtPositionTest(): boolean;
|
|
6
|
+
export declare function clientGetSegmentExtentsOfPositionTest(): boolean;
|
|
7
|
+
//# sourceMappingURL=client.apis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.apis.d.ts","sourceRoot":"","sources":["../../src/test/client.apis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgCH,wBAAgB,iCAAiC,YAahD;AAqBD,wBAAgB,qCAAqC,YAYpD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.clientGetSegmentExtentsOfPositionTest = exports.clientGetPropertiesAtPositionTest = void 0;
|
|
8
|
+
/* eslint-disable guard-for-in, no-restricted-syntax */
|
|
9
|
+
const assert_1 = require("assert");
|
|
10
|
+
const properties_1 = require("../properties");
|
|
11
|
+
const testClient_1 = require("./testClient");
|
|
12
|
+
function checkGetPropertiesAtPos(client, pos, props, verbose = false) {
|
|
13
|
+
const propsRetrieved = client.getPropertiesAtPosition(pos);
|
|
14
|
+
const result = (0, properties_1.matchProperties)(props, propsRetrieved);
|
|
15
|
+
if (!result && verbose) {
|
|
16
|
+
console.log(`At pos: ${pos}`);
|
|
17
|
+
console.log("Expected props");
|
|
18
|
+
for (const key in props) {
|
|
19
|
+
console.log(`Key: ${key} Value: ${props[key]}`);
|
|
20
|
+
}
|
|
21
|
+
console.log("Actual props");
|
|
22
|
+
for (const key1 in propsRetrieved) {
|
|
23
|
+
console.log(`Key: ${key1} Value: ${propsRetrieved[key1]}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
function clientGetPropertiesAtPositionTest() {
|
|
29
|
+
const client = new testClient_1.TestClient();
|
|
30
|
+
client.insertTextLocal(0, "the cat is on the mat");
|
|
31
|
+
const props = (0, properties_1.createMap)();
|
|
32
|
+
props.prop1 = 10;
|
|
33
|
+
client.insertTextLocal(4, "fuzzy, fuzzy ", props);
|
|
34
|
+
const testResult1 = checkGetPropertiesAtPos(client, 4, props, true);
|
|
35
|
+
const testResult2 = checkGetPropertiesAtPos(client, 16, props, true);
|
|
36
|
+
const testResult3 = checkGetPropertiesAtPos(client, 3);
|
|
37
|
+
const testResult4 = checkGetPropertiesAtPos(client, 17);
|
|
38
|
+
return (((testResult1 === testResult2) === testResult3) === testResult4) === true;
|
|
39
|
+
}
|
|
40
|
+
exports.clientGetPropertiesAtPositionTest = clientGetPropertiesAtPositionTest;
|
|
41
|
+
function checkGetSegmentExtentsOfPos(client, pos, posStart, posAfterEnd, verbose = false) {
|
|
42
|
+
const segExtents = client.getRangeExtentsOfPosition(pos);
|
|
43
|
+
const result = segExtents.posStart === posStart && segExtents.posAfterEnd === posAfterEnd;
|
|
44
|
+
if (!result && verbose) {
|
|
45
|
+
console.log(`At pos: ${pos}`);
|
|
46
|
+
console.log(`Expected extents -> start: ${posStart} end: ${posAfterEnd}`);
|
|
47
|
+
console.log(`Actual extents -> start: ${segExtents.posStart} end: ${segExtents.posAfterEnd}`);
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
function clientGetSegmentExtentsOfPositionTest() {
|
|
52
|
+
const client = new testClient_1.TestClient();
|
|
53
|
+
client.insertTextLocal(0, "the cat is on the mat");
|
|
54
|
+
const props = (0, properties_1.createMap)();
|
|
55
|
+
props.prop1 = 10;
|
|
56
|
+
client.insertTextLocal(4, "fuzzy, fuzzy ", props);
|
|
57
|
+
client.insertTextLocal(8, "more fuzzy text", {});
|
|
58
|
+
const testResult1 = checkGetSegmentExtentsOfPos(client, 26, 23, 32);
|
|
59
|
+
const testResult2 = checkGetSegmentExtentsOfPos(client, 6, 4, 8);
|
|
60
|
+
const testResult3 = checkGetSegmentExtentsOfPos(client, 32, 32, 49);
|
|
61
|
+
return ((testResult1 === testResult2) === testResult3) === true;
|
|
62
|
+
}
|
|
63
|
+
exports.clientGetSegmentExtentsOfPositionTest = clientGetSegmentExtentsOfPositionTest;
|
|
64
|
+
describe("client.apis", () => {
|
|
65
|
+
it("clientGetPropertiesAtPositionTest", () => {
|
|
66
|
+
(0, assert_1.strict)(clientGetPropertiesAtPositionTest() === true);
|
|
67
|
+
});
|
|
68
|
+
it("clientGetSegmentExtentsOfPositionTest", () => {
|
|
69
|
+
(0, assert_1.strict)(clientGetSegmentExtentsOfPositionTest() === true);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=client.apis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.apis.js","sourceRoot":"","sources":["../../src/test/client.apis.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 guard-for-in, no-restricted-syntax */\n\nimport { strict as assert } from \"assert\";\nimport { Client } from \"../client\";\nimport { createMap, matchProperties, PropertySet } from \"../properties\";\nimport { TestClient } from \"./testClient\";\n\nfunction checkGetPropertiesAtPos(\n\tclient: Client,\n\tpos: number,\n\tprops?: PropertySet,\n\tverbose = false,\n) {\n\tconst propsRetrieved = client.getPropertiesAtPosition(pos);\n\tconst result = matchProperties(props, propsRetrieved);\n\tif (!result && verbose) {\n\t\tconsole.log(`At pos: ${pos}`);\n\t\tconsole.log(\"Expected props\");\n\t\tfor (const key in props) {\n\t\t\tconsole.log(`Key: ${key} Value: ${props[key]}`);\n\t\t}\n\n\t\tconsole.log(\"Actual props\");\n\t\tfor (const key1 in propsRetrieved) {\n\t\t\tconsole.log(`Key: ${key1} Value: ${propsRetrieved[key1]}`);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport function clientGetPropertiesAtPositionTest() {\n\tconst client = new TestClient();\n\tclient.insertTextLocal(0, \"the cat is on the mat\");\n\tconst props = createMap<any>();\n\tprops.prop1 = 10;\n\tclient.insertTextLocal(4, \"fuzzy, fuzzy \", props);\n\n\tconst testResult1 = checkGetPropertiesAtPos(client, 4, props, true);\n\tconst testResult2 = checkGetPropertiesAtPos(client, 16, props, true);\n\tconst testResult3 = checkGetPropertiesAtPos(client, 3);\n\tconst testResult4 = checkGetPropertiesAtPos(client, 17);\n\n\treturn (((testResult1 === testResult2) === testResult3) === testResult4) === true;\n}\n\nfunction checkGetSegmentExtentsOfPos(\n\tclient: Client,\n\tpos: number,\n\tposStart: number,\n\tposAfterEnd: number,\n\tverbose = false,\n) {\n\tconst segExtents = client.getRangeExtentsOfPosition(pos);\n\tconst result = segExtents.posStart === posStart && segExtents.posAfterEnd === posAfterEnd;\n\tif (!result && verbose) {\n\t\tconsole.log(`At pos: ${pos}`);\n\t\tconsole.log(`Expected extents -> start: ${posStart} end: ${posAfterEnd}`);\n\t\tconsole.log(\n\t\t\t`Actual extents -> start: ${segExtents.posStart} end: ${segExtents.posAfterEnd}`,\n\t\t);\n\t}\n\treturn result;\n}\n\nexport function clientGetSegmentExtentsOfPositionTest() {\n\tconst client = new TestClient();\n\tclient.insertTextLocal(0, \"the cat is on the mat\");\n\tconst props = createMap<any>();\n\tprops.prop1 = 10;\n\tclient.insertTextLocal(4, \"fuzzy, fuzzy \", props);\n\tclient.insertTextLocal(8, \"more fuzzy text\", {});\n\n\tconst testResult1 = checkGetSegmentExtentsOfPos(client, 26, 23, 32);\n\tconst testResult2 = checkGetSegmentExtentsOfPos(client, 6, 4, 8);\n\tconst testResult3 = checkGetSegmentExtentsOfPos(client, 32, 32, 49);\n\treturn ((testResult1 === testResult2) === testResult3) === true;\n}\n\ndescribe(\"client.apis\", () => {\n\tit(\"clientGetPropertiesAtPositionTest\", () => {\n\t\tassert(clientGetPropertiesAtPositionTest() === true);\n\t});\n\n\tit(\"clientGetSegmentExtentsOfPositionTest\", () => {\n\t\tassert(clientGetSegmentExtentsOfPositionTest() === true);\n\t});\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.applyMsg.spec.d.ts","sourceRoot":"","sources":["../../src/test/client.applyMsg.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|