@fluidframework/merge-tree 2.30.0 → 2.31.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 +403 -399
- package/api-report/merge-tree.legacy.alpha.api.md +1 -0
- package/dist/MergeTreeTextHelper.d.ts +9 -3
- package/dist/MergeTreeTextHelper.d.ts.map +1 -1
- package/dist/MergeTreeTextHelper.js +5 -5
- package/dist/MergeTreeTextHelper.js.map +1 -1
- package/dist/client.d.ts +7 -13
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +136 -110
- package/dist/client.js.map +1 -1
- package/dist/endOfTreeSegment.d.ts +12 -8
- package/dist/endOfTreeSegment.d.ts.map +1 -1
- package/dist/endOfTreeSegment.js +2 -4
- package/dist/endOfTreeSegment.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/mergeTree.d.ts +37 -23
- package/dist/mergeTree.d.ts.map +1 -1
- package/dist/mergeTree.js +400 -483
- package/dist/mergeTree.js.map +1 -1
- package/dist/mergeTreeDeltaCallback.d.ts +4 -8
- package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/dist/mergeTreeDeltaCallback.js.map +1 -1
- package/dist/mergeTreeNodes.d.ts +32 -10
- package/dist/mergeTreeNodes.d.ts.map +1 -1
- package/dist/mergeTreeNodes.js +43 -28
- package/dist/mergeTreeNodes.js.map +1 -1
- package/dist/partialLengths.d.ts +2 -2
- package/dist/partialLengths.d.ts.map +1 -1
- package/dist/partialLengths.js +181 -109
- package/dist/partialLengths.js.map +1 -1
- package/dist/perspective.d.ts +8 -27
- package/dist/perspective.d.ts.map +1 -1
- package/dist/perspective.js +7 -67
- package/dist/perspective.js.map +1 -1
- package/dist/revertibles.d.ts.map +1 -1
- package/dist/revertibles.js +2 -2
- package/dist/revertibles.js.map +1 -1
- package/dist/segmentInfos.d.ts +20 -106
- package/dist/segmentInfos.d.ts.map +1 -1
- package/dist/segmentInfos.js +28 -42
- package/dist/segmentInfos.js.map +1 -1
- package/dist/segmentPropertiesManager.d.ts +1 -14
- package/dist/segmentPropertiesManager.d.ts.map +1 -1
- package/dist/segmentPropertiesManager.js +3 -17
- package/dist/segmentPropertiesManager.js.map +1 -1
- package/dist/snapshotLoader.d.ts.map +1 -1
- package/dist/snapshotLoader.js +62 -19
- package/dist/snapshotLoader.js.map +1 -1
- package/dist/snapshotV1.d.ts.map +1 -1
- package/dist/snapshotV1.js +55 -24
- package/dist/snapshotV1.js.map +1 -1
- package/dist/snapshotlegacy.d.ts.map +1 -1
- package/dist/snapshotlegacy.js +6 -9
- package/dist/snapshotlegacy.js.map +1 -1
- package/dist/stamps.d.ts +1 -1
- package/dist/stamps.js +1 -1
- package/dist/stamps.js.map +1 -1
- package/dist/test/Insertion.perf.spec.js +6 -51
- package/dist/test/Insertion.perf.spec.js.map +1 -1
- package/dist/test/PartialLengths.perf.spec.js +18 -25
- package/dist/test/PartialLengths.perf.spec.js.map +1 -1
- package/dist/test/Removal.perf.spec.js +13 -41
- package/dist/test/Removal.perf.spec.js.map +1 -1
- package/dist/test/beastTest.spec.d.ts.map +1 -1
- package/dist/test/beastTest.spec.js +41 -66
- package/dist/test/beastTest.spec.js.map +1 -1
- package/dist/test/client.annotateMarker.spec.js +1 -11
- package/dist/test/client.annotateMarker.spec.js.map +1 -1
- package/dist/test/client.applyMsg.spec.js +14 -14
- package/dist/test/client.applyMsg.spec.js.map +1 -1
- package/dist/test/client.getPosition.spec.js +1 -1
- package/dist/test/client.getPosition.spec.js.map +1 -1
- package/dist/test/client.localReference.spec.js +1 -1
- package/dist/test/client.localReference.spec.js.map +1 -1
- package/dist/test/client.rollback.spec.js +49 -58
- package/dist/test/client.rollback.spec.js.map +1 -1
- package/dist/test/client.rollbackFarm.spec.js +1 -1
- package/dist/test/client.rollbackFarm.spec.js.map +1 -1
- package/dist/test/client.searchForMarker.spec.js +4 -21
- package/dist/test/client.searchForMarker.spec.js.map +1 -1
- package/dist/test/index.d.ts +2 -2
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +2 -6
- package/dist/test/index.js.map +1 -1
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js +14 -59
- package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.annotate.spec.js +47 -63
- package/dist/test/mergeTree.annotate.spec.js.map +1 -1
- package/dist/test/mergeTree.insert.deltaCallback.spec.js +9 -62
- package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.insertingWalk.spec.js +59 -125
- package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +12 -93
- package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/dist/test/mergeTree.markRangeRemoved.spec.js +10 -7
- package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/dist/test/mergeTree.walk.spec.js +2 -14
- package/dist/test/mergeTree.walk.spec.js.map +1 -1
- package/dist/test/mergeTreeOperationRunner.js +2 -2
- package/dist/test/mergeTreeOperationRunner.js.map +1 -1
- package/dist/test/obliterate.concurrent.spec.js +18 -23
- package/dist/test/obliterate.concurrent.spec.js.map +1 -1
- package/dist/test/obliterate.partialLength.spec.js +166 -136
- package/dist/test/obliterate.partialLength.spec.js.map +1 -1
- package/dist/test/obliterate.spec.js +16 -126
- package/dist/test/obliterate.spec.js.map +1 -1
- package/dist/test/partialLength.spec.js +28 -196
- package/dist/test/partialLength.spec.js.map +1 -1
- package/dist/test/perspective.spec.js +34 -0
- package/dist/test/perspective.spec.js.map +1 -1
- package/dist/test/propertyManager.spec.js +1 -1
- package/dist/test/propertyManager.spec.js.map +1 -1
- package/dist/test/resetPendingSegmentsToOp.spec.js +0 -2
- package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/dist/test/segmentGroupCollection.spec.js +10 -4
- package/dist/test/segmentGroupCollection.spec.js.map +1 -1
- package/dist/test/testClient.d.ts +1 -0
- package/dist/test/testClient.d.ts.map +1 -1
- package/dist/test/testClient.js +16 -26
- package/dist/test/testClient.js.map +1 -1
- package/dist/test/testClientLogger.d.ts.map +1 -1
- package/dist/test/testClientLogger.js +3 -10
- package/dist/test/testClientLogger.js.map +1 -1
- package/dist/test/testServer.d.ts +2 -1
- package/dist/test/testServer.d.ts.map +1 -1
- package/dist/test/testServer.js +7 -5
- package/dist/test/testServer.js.map +1 -1
- package/dist/test/testUtils.d.ts +36 -56
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +68 -77
- package/dist/test/testUtils.js.map +1 -1
- package/dist/test/text.d.ts +2 -2
- package/dist/test/text.d.ts.map +1 -1
- package/dist/test/text.js +5 -2
- package/dist/test/text.js.map +1 -1
- package/dist/textSegment.d.ts +0 -6
- package/dist/textSegment.d.ts.map +1 -1
- package/dist/textSegment.js.map +1 -1
- package/dist/zamboni.d.ts.map +1 -1
- package/dist/zamboni.js +53 -26
- package/dist/zamboni.js.map +1 -1
- package/lib/MergeTreeTextHelper.d.ts +9 -3
- package/lib/MergeTreeTextHelper.d.ts.map +1 -1
- package/lib/MergeTreeTextHelper.js +5 -5
- package/lib/MergeTreeTextHelper.js.map +1 -1
- package/lib/client.d.ts +7 -13
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +117 -116
- package/lib/client.js.map +1 -1
- package/lib/endOfTreeSegment.d.ts +12 -8
- package/lib/endOfTreeSegment.d.ts.map +1 -1
- package/lib/endOfTreeSegment.js +2 -4
- package/lib/endOfTreeSegment.js.map +1 -1
- package/lib/index.d.ts +6 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/mergeTree.d.ts +37 -23
- package/lib/mergeTree.d.ts.map +1 -1
- package/lib/mergeTree.js +381 -488
- package/lib/mergeTree.js.map +1 -1
- package/lib/mergeTreeDeltaCallback.d.ts +4 -8
- package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
- package/lib/mergeTreeDeltaCallback.js.map +1 -1
- package/lib/mergeTreeNodes.d.ts +32 -10
- package/lib/mergeTreeNodes.d.ts.map +1 -1
- package/lib/mergeTreeNodes.js +42 -29
- package/lib/mergeTreeNodes.js.map +1 -1
- package/lib/partialLengths.d.ts +2 -2
- package/lib/partialLengths.d.ts.map +1 -1
- package/lib/partialLengths.js +160 -111
- package/lib/partialLengths.js.map +1 -1
- package/lib/perspective.d.ts +8 -27
- package/lib/perspective.d.ts.map +1 -1
- package/lib/perspective.js +8 -68
- package/lib/perspective.js.map +1 -1
- package/lib/revertibles.d.ts.map +1 -1
- package/lib/revertibles.js +2 -2
- package/lib/revertibles.js.map +1 -1
- package/lib/segmentInfos.d.ts +20 -106
- package/lib/segmentInfos.d.ts.map +1 -1
- package/lib/segmentInfos.js +26 -37
- package/lib/segmentInfos.js.map +1 -1
- package/lib/segmentPropertiesManager.d.ts +1 -14
- package/lib/segmentPropertiesManager.d.ts.map +1 -1
- package/lib/segmentPropertiesManager.js +2 -16
- package/lib/segmentPropertiesManager.js.map +1 -1
- package/lib/snapshotLoader.d.ts.map +1 -1
- package/lib/snapshotLoader.js +39 -19
- package/lib/snapshotLoader.js.map +1 -1
- package/lib/snapshotV1.d.ts.map +1 -1
- package/lib/snapshotV1.js +34 -26
- package/lib/snapshotV1.js.map +1 -1
- package/lib/snapshotlegacy.d.ts.map +1 -1
- package/lib/snapshotlegacy.js +7 -10
- package/lib/snapshotlegacy.js.map +1 -1
- package/lib/stamps.d.ts +1 -1
- package/lib/stamps.js +1 -1
- package/lib/stamps.js.map +1 -1
- package/lib/test/Insertion.perf.spec.js +6 -51
- package/lib/test/Insertion.perf.spec.js.map +1 -1
- package/lib/test/PartialLengths.perf.spec.js +18 -25
- package/lib/test/PartialLengths.perf.spec.js.map +1 -1
- package/lib/test/Removal.perf.spec.js +13 -41
- package/lib/test/Removal.perf.spec.js.map +1 -1
- package/lib/test/beastTest.spec.d.ts.map +1 -1
- package/lib/test/beastTest.spec.js +42 -67
- package/lib/test/beastTest.spec.js.map +1 -1
- package/lib/test/client.annotateMarker.spec.js +1 -11
- package/lib/test/client.annotateMarker.spec.js.map +1 -1
- package/lib/test/client.applyMsg.spec.js +14 -14
- package/lib/test/client.applyMsg.spec.js.map +1 -1
- package/lib/test/client.getPosition.spec.js +1 -1
- package/lib/test/client.getPosition.spec.js.map +1 -1
- package/lib/test/client.localReference.spec.js +1 -1
- package/lib/test/client.localReference.spec.js.map +1 -1
- package/lib/test/client.rollback.spec.js +50 -59
- package/lib/test/client.rollback.spec.js.map +1 -1
- package/lib/test/client.rollbackFarm.spec.js +1 -1
- package/lib/test/client.rollbackFarm.spec.js.map +1 -1
- package/lib/test/client.searchForMarker.spec.js +4 -21
- package/lib/test/client.searchForMarker.spec.js.map +1 -1
- package/lib/test/index.d.ts +2 -2
- package/lib/test/index.d.ts.map +1 -1
- package/lib/test/index.js +1 -1
- package/lib/test/index.js.map +1 -1
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js +15 -60
- package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.annotate.spec.js +48 -64
- package/lib/test/mergeTree.annotate.spec.js.map +1 -1
- package/lib/test/mergeTree.insert.deltaCallback.spec.js +10 -63
- package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.insertingWalk.spec.js +61 -127
- package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +13 -94
- package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
- package/lib/test/mergeTree.markRangeRemoved.spec.js +10 -7
- package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
- package/lib/test/mergeTree.walk.spec.js +2 -14
- package/lib/test/mergeTree.walk.spec.js.map +1 -1
- package/lib/test/mergeTreeOperationRunner.js +3 -3
- package/lib/test/mergeTreeOperationRunner.js.map +1 -1
- package/lib/test/obliterate.concurrent.spec.js +18 -23
- package/lib/test/obliterate.concurrent.spec.js.map +1 -1
- package/lib/test/obliterate.partialLength.spec.js +167 -137
- package/lib/test/obliterate.partialLength.spec.js.map +1 -1
- package/lib/test/obliterate.spec.js +17 -127
- package/lib/test/obliterate.spec.js.map +1 -1
- package/lib/test/partialLength.spec.js +29 -197
- package/lib/test/partialLength.spec.js.map +1 -1
- package/lib/test/perspective.spec.js +34 -0
- package/lib/test/perspective.spec.js.map +1 -1
- package/lib/test/propertyManager.spec.js +2 -2
- package/lib/test/propertyManager.spec.js.map +1 -1
- package/lib/test/resetPendingSegmentsToOp.spec.js +0 -2
- package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
- package/lib/test/segmentGroupCollection.spec.js +10 -4
- package/lib/test/segmentGroupCollection.spec.js.map +1 -1
- package/lib/test/testClient.d.ts +1 -0
- package/lib/test/testClient.d.ts.map +1 -1
- package/lib/test/testClient.js +18 -28
- package/lib/test/testClient.js.map +1 -1
- package/lib/test/testClientLogger.d.ts.map +1 -1
- package/lib/test/testClientLogger.js +3 -10
- package/lib/test/testClientLogger.js.map +1 -1
- package/lib/test/testServer.d.ts +2 -1
- package/lib/test/testServer.d.ts.map +1 -1
- package/lib/test/testServer.js +7 -5
- package/lib/test/testServer.js.map +1 -1
- package/lib/test/testUtils.d.ts +36 -56
- package/lib/test/testUtils.d.ts.map +1 -1
- package/lib/test/testUtils.js +66 -48
- package/lib/test/testUtils.js.map +1 -1
- package/lib/test/text.d.ts +2 -2
- package/lib/test/text.d.ts.map +1 -1
- package/lib/test/text.js +6 -3
- package/lib/test/text.js.map +1 -1
- package/lib/textSegment.d.ts +0 -6
- package/lib/textSegment.d.ts.map +1 -1
- package/lib/textSegment.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/lib/zamboni.d.ts.map +1 -1
- package/lib/zamboni.js +32 -28
- package/lib/zamboni.js.map +1 -1
- package/package.json +17 -20
- package/src/MergeTreeTextHelper.ts +17 -12
- package/src/client.ts +141 -197
- package/src/endOfTreeSegment.ts +11 -8
- package/src/index.ts +4 -3
- package/src/mergeTree.ts +482 -633
- package/src/mergeTreeDeltaCallback.ts +4 -8
- package/src/mergeTreeNodes.ts +66 -45
- package/src/partialLengths.ts +181 -137
- package/src/perspective.ts +17 -95
- package/src/revertibles.ts +2 -7
- package/src/segmentInfos.ts +48 -141
- package/src/segmentPropertiesManager.ts +2 -16
- package/src/snapshotLoader.ts +62 -30
- package/src/snapshotV1.ts +36 -28
- package/src/snapshotlegacy.ts +7 -16
- package/src/stamps.ts +1 -1
- package/src/textSegment.ts +0 -13
- package/src/zamboni.ts +38 -32
- package/tsconfig.json +1 -0
- package/prettier.config.cjs +0 -8
|
@@ -7,7 +7,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
const benchmark_1 = require("@fluid-tools/benchmark");
|
|
8
8
|
const mergeTree_js_1 = require("../mergeTree.js");
|
|
9
9
|
const ops_js_1 = require("../ops.js");
|
|
10
|
-
const
|
|
10
|
+
const perspective_js_1 = require("../perspective.js");
|
|
11
|
+
const textSegment_js_1 = require("../textSegment.js");
|
|
11
12
|
describe("MergeTree partial lengths", () => {
|
|
12
13
|
const originalIncrementalUpdate = mergeTree_js_1.MergeTree.options.incrementalUpdate;
|
|
13
14
|
for (const incremental of [true, false]) {
|
|
@@ -20,41 +21,33 @@ describe("MergeTree partial lengths", () => {
|
|
|
20
21
|
},
|
|
21
22
|
benchmarkFn: () => {
|
|
22
23
|
const mergeTree = new mergeTree_js_1.MergeTree();
|
|
24
|
+
const clientId = 0;
|
|
23
25
|
let i = 1;
|
|
24
26
|
for (; i < 1001; i++) {
|
|
25
|
-
|
|
26
|
-
mergeTree,
|
|
27
|
-
pos: 0,
|
|
28
|
-
refSeq: i,
|
|
29
|
-
clientId: 0,
|
|
27
|
+
const stamp = {
|
|
30
28
|
seq: i,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
clientId,
|
|
30
|
+
};
|
|
31
|
+
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("a")], new perspective_js_1.PriorPerspective(i, clientId), stamp, {
|
|
32
|
+
op: { type: ops_js_1.MergeTreeDeltaType.INSERT },
|
|
34
33
|
});
|
|
35
34
|
}
|
|
36
35
|
for (; i < 2001; i++) {
|
|
37
|
-
|
|
38
|
-
mergeTree,
|
|
39
|
-
start: i - 1001,
|
|
40
|
-
end: i - 1000,
|
|
41
|
-
refSeq: i,
|
|
42
|
-
clientId: 0,
|
|
36
|
+
const stamp = {
|
|
43
37
|
seq: i,
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
clientId,
|
|
39
|
+
};
|
|
40
|
+
mergeTree.markRangeRemoved(i - 1001, i - 1000, new perspective_js_1.PriorPerspective(i, clientId), stamp, {
|
|
41
|
+
op: { type: ops_js_1.MergeTreeDeltaType.REMOVE },
|
|
46
42
|
});
|
|
47
43
|
}
|
|
48
44
|
for (; i < 3001; i++) {
|
|
49
|
-
|
|
50
|
-
mergeTree,
|
|
51
|
-
pos: 0,
|
|
52
|
-
refSeq: i,
|
|
53
|
-
clientId: 0,
|
|
45
|
+
const stamp = {
|
|
54
46
|
seq: i,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
47
|
+
clientId,
|
|
48
|
+
};
|
|
49
|
+
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("a")], new perspective_js_1.PriorPerspective(i, clientId), stamp, {
|
|
50
|
+
op: { type: ops_js_1.MergeTreeDeltaType.INSERT },
|
|
58
51
|
});
|
|
59
52
|
}
|
|
60
53
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartialLengths.perf.spec.js","sourceRoot":"","sources":["../../src/test/PartialLengths.perf.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,sDAAkE;AAElE,kDAA4C;AAC5C,sCAA+C;
|
|
1
|
+
{"version":3,"file":"PartialLengths.perf.spec.js","sourceRoot":"","sources":["../../src/test/PartialLengths.perf.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,sDAAkE;AAElE,kDAA4C;AAC5C,sCAA+C;AAC/C,sDAAqD;AAErD,sDAAgD;AAEhD,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,MAAM,yBAAyB,GAAY,wBAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAE/E,KAAK,MAAM,WAAW,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACzC,IAAA,qBAAS,EAAC;YACT,IAAI,EAAE,yBAAa,CAAC,WAAW;YAC/B,KAAK,EAAE,yBAAyB,WAAW,EAAE;YAC7C,QAAQ,EAAE,iBAAiB;YAC3B,MAAM,EAAE,GAAG,EAAE;gBACZ,wBAAS,CAAC,OAAO,CAAC,iBAAiB,GAAG,WAAW,CAAC;YACnD,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,MAAM,SAAS,GAAG,IAAI,wBAAS,EAAE,CAAC;gBAElC,MAAM,QAAQ,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtB,MAAM,KAAK,GAAmB;wBAC7B,GAAG,EAAE,CAAC;wBACN,QAAQ;qBACR,CAAC;oBACF,SAAS,CAAC,cAAc,CACvB,CAAC,EACD,CAAC,4BAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACvB,IAAI,iCAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,EACjC,KAAK,EACL;wBACC,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE;qBACvC,CACD,CAAC;gBACH,CAAC;gBAED,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtB,MAAM,KAAK,GAAmB;wBAC7B,GAAG,EAAE,CAAC;wBACN,QAAQ;qBACR,CAAC;oBACF,SAAS,CAAC,gBAAgB,CACzB,CAAC,GAAG,IAAI,EACR,CAAC,GAAG,IAAI,EACR,IAAI,iCAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,EACjC,KAAK,EACL;wBACC,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE;qBACvC,CACD,CAAC;gBACH,CAAC;gBAED,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtB,MAAM,KAAK,GAAmB;wBAC7B,GAAG,EAAE,CAAC;wBACN,QAAQ;qBACR,CAAC;oBACF,SAAS,CAAC,cAAc,CACvB,CAAC,EACD,CAAC,4BAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACvB,IAAI,iCAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,EACjC,KAAK,EACL;wBACC,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE;qBACvC,CACD,CAAC;gBACH,CAAC;YACF,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACX,wBAAS,CAAC,OAAO,CAAC,iBAAiB,GAAG,yBAAyB,CAAC;YACjE,CAAC;SACD,CAAC,CAAC;IACJ,CAAC;AACF,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { BenchmarkType, benchmark } from \"@fluid-tools/benchmark\";\n\nimport { MergeTree } from \"../mergeTree.js\";\nimport { MergeTreeDeltaType } from \"../ops.js\";\nimport { PriorPerspective } from \"../perspective.js\";\nimport type { OperationStamp } from \"../stamps.js\";\nimport { TextSegment } from \"../textSegment.js\";\n\ndescribe(\"MergeTree partial lengths\", () => {\n\tconst originalIncrementalUpdate: boolean = MergeTree.options.incrementalUpdate;\n\n\tfor (const incremental of [true, false]) {\n\t\tbenchmark({\n\t\t\ttype: BenchmarkType.Measurement,\n\t\t\ttitle: `incremental updates = ${incremental}`,\n\t\t\tcategory: \"partial lengths\",\n\t\t\tbefore: () => {\n\t\t\t\tMergeTree.options.incrementalUpdate = incremental;\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tconst mergeTree = new MergeTree();\n\n\t\t\t\tconst clientId = 0;\n\t\t\t\tlet i = 1;\n\t\t\t\tfor (; i < 1001; i++) {\n\t\t\t\t\tconst stamp: OperationStamp = {\n\t\t\t\t\t\tseq: i,\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t};\n\t\t\t\t\tmergeTree.insertSegments(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t[TextSegment.make(\"a\")],\n\t\t\t\t\t\tnew PriorPerspective(i, clientId),\n\t\t\t\t\t\tstamp,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\top: { type: MergeTreeDeltaType.INSERT },\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tfor (; i < 2001; i++) {\n\t\t\t\t\tconst stamp: OperationStamp = {\n\t\t\t\t\t\tseq: i,\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t};\n\t\t\t\t\tmergeTree.markRangeRemoved(\n\t\t\t\t\t\ti - 1001,\n\t\t\t\t\t\ti - 1000,\n\t\t\t\t\t\tnew PriorPerspective(i, clientId),\n\t\t\t\t\t\tstamp,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\top: { type: MergeTreeDeltaType.REMOVE },\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tfor (; i < 3001; i++) {\n\t\t\t\t\tconst stamp: OperationStamp = {\n\t\t\t\t\t\tseq: i,\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t};\n\t\t\t\t\tmergeTree.insertSegments(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t[TextSegment.make(\"a\")],\n\t\t\t\t\t\tnew PriorPerspective(i, clientId),\n\t\t\t\t\t\tstamp,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\top: { type: MergeTreeDeltaType.INSERT },\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\tafter: () => {\n\t\t\t\tMergeTree.options.incrementalUpdate = originalIncrementalUpdate;\n\t\t\t},\n\t\t});\n\t}\n});\n"]}
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const benchmark_1 = require("@fluid-tools/benchmark");
|
|
8
8
|
const ops_js_1 = require("../ops.js");
|
|
9
|
+
const perspective_js_1 = require("../perspective.js");
|
|
9
10
|
const revertibles_js_1 = require("../revertibles.js");
|
|
10
11
|
const snapshot_utils_js_1 = require("./snapshot.utils.js");
|
|
11
|
-
const testUtils_js_1 = require("./testUtils.js");
|
|
12
12
|
describe("MergeTree remove", () => {
|
|
13
13
|
let summary;
|
|
14
14
|
(0, benchmark_1.benchmark)({
|
|
@@ -44,16 +44,9 @@ describe("MergeTree remove", () => {
|
|
|
44
44
|
},
|
|
45
45
|
benchmarkFnAsync: async () => {
|
|
46
46
|
const str = await (0, snapshot_utils_js_1.loadSnapshot)(summary);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
end: 1000,
|
|
51
|
-
refSeq: 1000,
|
|
52
|
-
clientId: 0,
|
|
53
|
-
seq: 1001,
|
|
54
|
-
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } },
|
|
55
|
-
overwrite: false,
|
|
56
|
-
});
|
|
47
|
+
const refSeq = 1000;
|
|
48
|
+
const clientId = 0;
|
|
49
|
+
str.mergeTree.markRangeRemoved(0, 1000, new perspective_js_1.PriorPerspective(refSeq, clientId), { seq: 1001, clientId }, { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } });
|
|
57
50
|
},
|
|
58
51
|
});
|
|
59
52
|
for (const length of [10, 100, 1000]) {
|
|
@@ -98,16 +91,9 @@ describe("MergeTree remove", () => {
|
|
|
98
91
|
},
|
|
99
92
|
benchmarkFnAsync: async () => {
|
|
100
93
|
const str = await (0, snapshot_utils_js_1.loadSnapshot)(summary);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
end: 1,
|
|
105
|
-
refSeq: 1000,
|
|
106
|
-
clientId: 0,
|
|
107
|
-
seq: 1001,
|
|
108
|
-
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } },
|
|
109
|
-
overwrite: false,
|
|
110
|
-
});
|
|
94
|
+
const refSeq = 1000;
|
|
95
|
+
const clientId = 0;
|
|
96
|
+
str.mergeTree.markRangeRemoved(0, 1, new perspective_js_1.PriorPerspective(refSeq, clientId), { seq: 1001, clientId }, { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } });
|
|
111
97
|
},
|
|
112
98
|
});
|
|
113
99
|
(0, benchmark_1.benchmark)({
|
|
@@ -124,16 +110,9 @@ describe("MergeTree remove", () => {
|
|
|
124
110
|
},
|
|
125
111
|
benchmarkFnAsync: async () => {
|
|
126
112
|
const str = await (0, snapshot_utils_js_1.loadSnapshot)(summary);
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
end: 501,
|
|
131
|
-
refSeq: 1000,
|
|
132
|
-
clientId: 0,
|
|
133
|
-
seq: 1001,
|
|
134
|
-
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } },
|
|
135
|
-
overwrite: false,
|
|
136
|
-
});
|
|
113
|
+
const refSeq = 1000;
|
|
114
|
+
const clientId = 0;
|
|
115
|
+
str.mergeTree.markRangeRemoved(499, 501, new perspective_js_1.PriorPerspective(refSeq, clientId), { seq: 1001, clientId }, { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } });
|
|
137
116
|
},
|
|
138
117
|
});
|
|
139
118
|
(0, benchmark_1.benchmark)({
|
|
@@ -150,16 +129,9 @@ describe("MergeTree remove", () => {
|
|
|
150
129
|
},
|
|
151
130
|
benchmarkFnAsync: async () => {
|
|
152
131
|
const str = await (0, snapshot_utils_js_1.loadSnapshot)(summary);
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
end: 1000,
|
|
157
|
-
refSeq: 1000,
|
|
158
|
-
clientId: 0,
|
|
159
|
-
seq: 1001,
|
|
160
|
-
opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } },
|
|
161
|
-
overwrite: false,
|
|
162
|
-
});
|
|
132
|
+
const refSeq = 1000;
|
|
133
|
+
const clientId = 0;
|
|
134
|
+
str.mergeTree.markRangeRemoved(999, 1000, new perspective_js_1.PriorPerspective(refSeq, clientId), { seq: 1001, clientId }, { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } });
|
|
163
135
|
},
|
|
164
136
|
});
|
|
165
137
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Removal.perf.spec.js","sourceRoot":"","sources":["../../src/test/Removal.perf.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\nimport { BenchmarkType, benchmark } from \"@fluid-tools/benchmark\";\nimport type { ISummaryTree } from \"@fluidframework/driver-definitions\";\n\nimport { MergeTreeDeltaType } from \"../ops.js\";\nimport {\n\tMergeTreeDeltaRevertible,\n\tappendToMergeTreeDeltaRevertibles,\n} from \"../revertibles.js\";\n\nimport { TestString, loadSnapshot } from \"./snapshot.utils.js\";\nimport { markRangeRemoved } from \"./testUtils.js\";\n\ndescribe(\"MergeTree remove\", () => {\n\tlet summary: ISummaryTree;\n\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\t// baseline summary benchmark to compare to other remove tests. such a\n\t\t// comparison should give a (rough) sense of overhead caused by summary\n\t\t// loading\n\t\ttitle: \"baseline summary load\",\n\t\tcategory: \"remove\",\n\t\tbefore: () => {\n\t\t\tconst str = new TestString(\"id\", {});\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\tstr.append(\"a\", false);\n\t\t\t}\n\n\t\t\tstr.applyPendingOps();\n\t\t\tsummary = str.getSummary();\n\t\t},\n\t\tbenchmarkFnAsync: async () => {\n\t\t\tawait loadSnapshot(summary);\n\t\t},\n\t});\n\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"remove large range of large tree\",\n\t\tcategory: \"remove\",\n\t\tbefore: () => {\n\t\t\tconst str = new TestString(\"id\", {});\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\tstr.append(\"a\", false);\n\t\t\t}\n\n\t\t\tstr.applyPendingOps();\n\t\t\tsummary = str.getSummary();\n\t\t},\n\t\tbenchmarkFnAsync: async () => {\n\t\t\tconst str = await loadSnapshot(summary);\n\n\t\t\tmarkRangeRemoved({\n\t\t\t\tmergeTree: str.mergeTree,\n\t\t\t\tstart: 0,\n\t\t\t\tend: 1000,\n\t\t\t\trefSeq: 1000,\n\t\t\t\tclientId: 0,\n\t\t\t\tseq: 1001,\n\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.REMOVE } },\n\t\t\t\toverwrite: false,\n\t\t\t});\n\t\t},\n\t});\n\n\tfor (const length of [10, 100, 1000]) {\n\t\tbenchmark({\n\t\t\ttype: BenchmarkType.Measurement,\n\t\t\ttitle: \"remove large range of large tree with undo-redo\",\n\t\t\tcategory: \"remove\",\n\t\t\tbefore: () => {\n\t\t\t\tconst str = new TestString(\"id\", {});\n\t\t\t\tfor (let i = 0; i < length / 2; i++) {\n\t\t\t\t\tstr.append(\"a\", true);\n\t\t\t\t\tstr.appendMarker(true);\n\t\t\t\t}\n\n\t\t\t\tstr.applyPendingOps();\n\t\t\t\tsummary = str.getSummary();\n\t\t\t},\n\t\t\tbenchmarkFnAsync: async () => {\n\t\t\t\tconst str = await loadSnapshot(summary);\n\n\t\t\t\tconst revertibles: MergeTreeDeltaRevertible[] = [];\n\t\t\t\tstr.on(\"delta\", (_op, delta) => {\n\t\t\t\t\tappendToMergeTreeDeltaRevertibles(delta, revertibles);\n\t\t\t\t});\n\n\t\t\t\tconst op = str.removeRangeLocal(0, length - 1);\n\t\t\t\tstr.applyMsg(\n\t\t\t\t\tstr.makeOpMessage(\n\t\t\t\t\t\top,\n\t\t\t\t\t\t/* seq */ length + 1,\n\t\t\t\t\t\t/* refSeq */ length,\n\t\t\t\t\t\tstr.longClientId,\n\t\t\t\t\t\t/* minSeq */ length,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t}\n\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"remove start of large tree\",\n\t\tcategory: \"remove\",\n\t\tbefore: () => {\n\t\t\tconst str = new TestString(\"id\", {});\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\tstr.append(\"a\", false);\n\t\t\t}\n\n\t\t\tstr.applyPendingOps();\n\t\t\tsummary = str.getSummary();\n\t\t},\n\t\tbenchmarkFnAsync: async () => {\n\t\t\tconst str = await loadSnapshot(summary);\n\n\t\t\tmarkRangeRemoved({\n\t\t\t\tmergeTree: str.mergeTree,\n\t\t\t\tstart: 0,\n\t\t\t\tend: 1,\n\t\t\t\trefSeq: 1000,\n\t\t\t\tclientId: 0,\n\t\t\t\tseq: 1001,\n\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.REMOVE } },\n\t\t\t\toverwrite: false,\n\t\t\t});\n\t\t},\n\t});\n\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"remove middle of large tree\",\n\t\tcategory: \"remove\",\n\t\tbefore: () => {\n\t\t\tconst str = new TestString(\"id\", {});\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\tstr.append(\"a\", false);\n\t\t\t}\n\n\t\t\tstr.applyPendingOps();\n\t\t\tsummary = str.getSummary();\n\t\t},\n\t\tbenchmarkFnAsync: async () => {\n\t\t\tconst str = await loadSnapshot(summary);\n\n\t\t\tmarkRangeRemoved({\n\t\t\t\tmergeTree: str.mergeTree,\n\t\t\t\tstart: 499,\n\t\t\t\tend: 501,\n\t\t\t\trefSeq: 1000,\n\t\t\t\tclientId: 0,\n\t\t\t\tseq: 1001,\n\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.REMOVE } },\n\t\t\t\toverwrite: false,\n\t\t\t});\n\t\t},\n\t});\n\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"remove end of large tree\",\n\t\tcategory: \"remove\",\n\t\tbefore: () => {\n\t\t\tconst str = new TestString(\"id\", {});\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\tstr.append(\"a\", false);\n\t\t\t}\n\n\t\t\tstr.applyPendingOps();\n\t\t\tsummary = str.getSummary();\n\t\t},\n\t\tbenchmarkFnAsync: async () => {\n\t\t\tconst str = await loadSnapshot(summary);\n\n\t\t\tmarkRangeRemoved({\n\t\t\t\tmergeTree: str.mergeTree,\n\t\t\t\tstart: 999,\n\t\t\t\tend: 1000,\n\t\t\t\trefSeq: 1000,\n\t\t\t\tclientId: 0,\n\t\t\t\tseq: 1001,\n\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.REMOVE } },\n\t\t\t\toverwrite: false,\n\t\t\t});\n\t\t},\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"Removal.perf.spec.js","sourceRoot":"","sources":["../../src/test/Removal.perf.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,sDAAkE;AAGlE,sCAA+C;AAC/C,sDAAqD;AACrD,sDAG2B;AAE3B,2DAA+D;AAE/D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,IAAI,OAAqB,CAAC;IAE1B,IAAA,qBAAS,EAAC;QACT,IAAI,EAAE,yBAAa,CAAC,WAAW;QAC/B,sEAAsE;QACtE,uEAAuE;QACvE,UAAU;QACV,KAAK,EAAE,uBAAuB;QAC9B,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,GAAG,EAAE;YACZ,MAAM,GAAG,GAAG,IAAI,8BAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YAED,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QACD,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,IAAA,gCAAY,EAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;KACD,CAAC,CAAC;IAEH,IAAA,qBAAS,EAAC;QACT,IAAI,EAAE,yBAAa,CAAC,WAAW;QAC/B,KAAK,EAAE,kCAAkC;QACzC,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,GAAG,EAAE;YACZ,MAAM,GAAG,GAAG,IAAI,8BAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YAED,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QACD,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,IAAA,gCAAY,EAAC,OAAO,CAAC,CAAC;YAExC,MAAM,MAAM,GAAG,IAAI,CAAC;YACpB,MAAM,QAAQ,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAC7B,CAAC,EACD,IAAI,EACJ,IAAI,iCAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,EACtC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EACvB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE,CAC3C,CAAC;QACH,CAAC;KACD,CAAC,CAAC;IAEH,KAAK,MAAM,MAAM,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QACtC,IAAA,qBAAS,EAAC;YACT,IAAI,EAAE,yBAAa,CAAC,WAAW;YAC/B,KAAK,EAAE,iDAAiD;YACxD,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,GAAG,EAAE;gBACZ,MAAM,GAAG,GAAG,IAAI,8BAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACtB,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;gBAED,GAAG,CAAC,eAAe,EAAE,CAAC;gBACtB,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;YAC5B,CAAC;YACD,gBAAgB,EAAE,KAAK,IAAI,EAAE;gBAC5B,MAAM,GAAG,GAAG,MAAM,IAAA,gCAAY,EAAC,OAAO,CAAC,CAAC;gBAExC,MAAM,WAAW,GAA+B,EAAE,CAAC;gBACnD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;oBAC9B,IAAA,kDAAiC,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;gBAEH,MAAM,EAAE,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC/C,GAAG,CAAC,QAAQ,CACX,GAAG,CAAC,aAAa,CAChB,EAAE;gBACF,SAAS,CAAC,MAAM,GAAG,CAAC;gBACpB,YAAY,CAAC,MAAM,EACnB,GAAG,CAAC,YAAY;gBAChB,YAAY,CAAC,MAAM,CACnB,CACD,CAAC;YACH,CAAC;SACD,CAAC,CAAC;IACJ,CAAC;IAED,IAAA,qBAAS,EAAC;QACT,IAAI,EAAE,yBAAa,CAAC,WAAW;QAC/B,KAAK,EAAE,4BAA4B;QACnC,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,GAAG,EAAE;YACZ,MAAM,GAAG,GAAG,IAAI,8BAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YAED,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QACD,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,IAAA,gCAAY,EAAC,OAAO,CAAC,CAAC;YAExC,MAAM,MAAM,GAAG,IAAI,CAAC;YACpB,MAAM,QAAQ,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAC7B,CAAC,EACD,CAAC,EACD,IAAI,iCAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,EACtC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EACvB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE,CAC3C,CAAC;QACH,CAAC;KACD,CAAC,CAAC;IAEH,IAAA,qBAAS,EAAC;QACT,IAAI,EAAE,yBAAa,CAAC,WAAW;QAC/B,KAAK,EAAE,6BAA6B;QACpC,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,GAAG,EAAE;YACZ,MAAM,GAAG,GAAG,IAAI,8BAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YAED,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QACD,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,IAAA,gCAAY,EAAC,OAAO,CAAC,CAAC;YAExC,MAAM,MAAM,GAAG,IAAI,CAAC;YACpB,MAAM,QAAQ,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAC7B,GAAG,EACH,GAAG,EACH,IAAI,iCAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,EACtC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EACvB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE,CAC3C,CAAC;QACH,CAAC;KACD,CAAC,CAAC;IAEH,IAAA,qBAAS,EAAC;QACT,IAAI,EAAE,yBAAa,CAAC,WAAW;QAC/B,KAAK,EAAE,0BAA0B;QACjC,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,GAAG,EAAE;YACZ,MAAM,GAAG,GAAG,IAAI,8BAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YAED,GAAG,CAAC,eAAe,EAAE,CAAC;YACtB,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;QACD,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,IAAA,gCAAY,EAAC,OAAO,CAAC,CAAC;YAExC,MAAM,MAAM,GAAG,IAAI,CAAC;YACpB,MAAM,QAAQ,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAC7B,GAAG,EACH,IAAI,EACJ,IAAI,iCAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,EACtC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EACvB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE,CAC3C,CAAC;QACH,CAAC;KACD,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 { BenchmarkType, benchmark } from \"@fluid-tools/benchmark\";\nimport type { ISummaryTree } from \"@fluidframework/driver-definitions\";\n\nimport { MergeTreeDeltaType } from \"../ops.js\";\nimport { PriorPerspective } from \"../perspective.js\";\nimport {\n\tMergeTreeDeltaRevertible,\n\tappendToMergeTreeDeltaRevertibles,\n} from \"../revertibles.js\";\n\nimport { TestString, loadSnapshot } from \"./snapshot.utils.js\";\n\ndescribe(\"MergeTree remove\", () => {\n\tlet summary: ISummaryTree;\n\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\t// baseline summary benchmark to compare to other remove tests. such a\n\t\t// comparison should give a (rough) sense of overhead caused by summary\n\t\t// loading\n\t\ttitle: \"baseline summary load\",\n\t\tcategory: \"remove\",\n\t\tbefore: () => {\n\t\t\tconst str = new TestString(\"id\", {});\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\tstr.append(\"a\", false);\n\t\t\t}\n\n\t\t\tstr.applyPendingOps();\n\t\t\tsummary = str.getSummary();\n\t\t},\n\t\tbenchmarkFnAsync: async () => {\n\t\t\tawait loadSnapshot(summary);\n\t\t},\n\t});\n\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"remove large range of large tree\",\n\t\tcategory: \"remove\",\n\t\tbefore: () => {\n\t\t\tconst str = new TestString(\"id\", {});\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\tstr.append(\"a\", false);\n\t\t\t}\n\n\t\t\tstr.applyPendingOps();\n\t\t\tsummary = str.getSummary();\n\t\t},\n\t\tbenchmarkFnAsync: async () => {\n\t\t\tconst str = await loadSnapshot(summary);\n\n\t\t\tconst refSeq = 1000;\n\t\t\tconst clientId = 0;\n\t\t\tstr.mergeTree.markRangeRemoved(\n\t\t\t\t0,\n\t\t\t\t1000,\n\t\t\t\tnew PriorPerspective(refSeq, clientId),\n\t\t\t\t{ seq: 1001, clientId },\n\t\t\t\t{ op: { type: MergeTreeDeltaType.REMOVE } },\n\t\t\t);\n\t\t},\n\t});\n\n\tfor (const length of [10, 100, 1000]) {\n\t\tbenchmark({\n\t\t\ttype: BenchmarkType.Measurement,\n\t\t\ttitle: \"remove large range of large tree with undo-redo\",\n\t\t\tcategory: \"remove\",\n\t\t\tbefore: () => {\n\t\t\t\tconst str = new TestString(\"id\", {});\n\t\t\t\tfor (let i = 0; i < length / 2; i++) {\n\t\t\t\t\tstr.append(\"a\", true);\n\t\t\t\t\tstr.appendMarker(true);\n\t\t\t\t}\n\n\t\t\t\tstr.applyPendingOps();\n\t\t\t\tsummary = str.getSummary();\n\t\t\t},\n\t\t\tbenchmarkFnAsync: async () => {\n\t\t\t\tconst str = await loadSnapshot(summary);\n\n\t\t\t\tconst revertibles: MergeTreeDeltaRevertible[] = [];\n\t\t\t\tstr.on(\"delta\", (_op, delta) => {\n\t\t\t\t\tappendToMergeTreeDeltaRevertibles(delta, revertibles);\n\t\t\t\t});\n\n\t\t\t\tconst op = str.removeRangeLocal(0, length - 1);\n\t\t\t\tstr.applyMsg(\n\t\t\t\t\tstr.makeOpMessage(\n\t\t\t\t\t\top,\n\t\t\t\t\t\t/* seq */ length + 1,\n\t\t\t\t\t\t/* refSeq */ length,\n\t\t\t\t\t\tstr.longClientId,\n\t\t\t\t\t\t/* minSeq */ length,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t}\n\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"remove start of large tree\",\n\t\tcategory: \"remove\",\n\t\tbefore: () => {\n\t\t\tconst str = new TestString(\"id\", {});\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\tstr.append(\"a\", false);\n\t\t\t}\n\n\t\t\tstr.applyPendingOps();\n\t\t\tsummary = str.getSummary();\n\t\t},\n\t\tbenchmarkFnAsync: async () => {\n\t\t\tconst str = await loadSnapshot(summary);\n\n\t\t\tconst refSeq = 1000;\n\t\t\tconst clientId = 0;\n\t\t\tstr.mergeTree.markRangeRemoved(\n\t\t\t\t0,\n\t\t\t\t1,\n\t\t\t\tnew PriorPerspective(refSeq, clientId),\n\t\t\t\t{ seq: 1001, clientId },\n\t\t\t\t{ op: { type: MergeTreeDeltaType.REMOVE } },\n\t\t\t);\n\t\t},\n\t});\n\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"remove middle of large tree\",\n\t\tcategory: \"remove\",\n\t\tbefore: () => {\n\t\t\tconst str = new TestString(\"id\", {});\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\tstr.append(\"a\", false);\n\t\t\t}\n\n\t\t\tstr.applyPendingOps();\n\t\t\tsummary = str.getSummary();\n\t\t},\n\t\tbenchmarkFnAsync: async () => {\n\t\t\tconst str = await loadSnapshot(summary);\n\n\t\t\tconst refSeq = 1000;\n\t\t\tconst clientId = 0;\n\t\t\tstr.mergeTree.markRangeRemoved(\n\t\t\t\t499,\n\t\t\t\t501,\n\t\t\t\tnew PriorPerspective(refSeq, clientId),\n\t\t\t\t{ seq: 1001, clientId },\n\t\t\t\t{ op: { type: MergeTreeDeltaType.REMOVE } },\n\t\t\t);\n\t\t},\n\t});\n\n\tbenchmark({\n\t\ttype: BenchmarkType.Measurement,\n\t\ttitle: \"remove end of large tree\",\n\t\tcategory: \"remove\",\n\t\tbefore: () => {\n\t\t\tconst str = new TestString(\"id\", {});\n\t\t\tfor (let i = 0; i < 1000; i++) {\n\t\t\t\tstr.append(\"a\", false);\n\t\t\t}\n\n\t\t\tstr.applyPendingOps();\n\t\t\tsummary = str.getSummary();\n\t\t},\n\t\tbenchmarkFnAsync: async () => {\n\t\t\tconst str = await loadSnapshot(summary);\n\n\t\t\tconst refSeq = 1000;\n\t\t\tconst clientId = 0;\n\t\t\tstr.mergeTree.markRangeRemoved(\n\t\t\t\t999,\n\t\t\t\t1000,\n\t\t\t\tnew PriorPerspective(refSeq, clientId),\n\t\t\t\t{ seq: 1001, clientId },\n\t\t\t\t{ op: { type: MergeTreeDeltaType.REMOVE } },\n\t\t\t);\n\t\t},\n\t});\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"beastTest.spec.d.ts","sourceRoot":"","sources":["../../src/test/beastTest.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,EAAE,OAAO,EAAc,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"beastTest.spec.d.ts","sourceRoot":"","sources":["../../src/test/beastTest.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,EAAE,OAAO,EAAc,MAAM,sCAAsC,CAAC;AAoC3E,OAAO,EAAE,UAAU,EAA2B,MAAM,iBAAiB,CAAC;AAmHtE,wBAAgB,UAAU,IAAI,IAAI,CAYjC;AAcD,wBAAgB,YAAY,IAAI,MAAM,CAsCrC;AAED,wBAAgB,SAAS,IAAI,IAAI,CAoDhC;AAwED,wBAAgB,cAAc,IAAI,IAAI,CAwBrC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CA8EzC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAgM7C;AAID,wBAAgB,QAAQ,CAAC,OAAO,UAAO,GAAG;IACzC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClE,cAAc,EAAE,MAAM,IAAI,CAAC;CAC3B,CAqpBA;AAYD,qBAAa,UAAU;IACtB,MAAM,EAAE,OAAO,CAAC;;IAKhB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAI7C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CA+BrC;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,YAAY,CAAC;AACjD;;;;;;;GAOG;AACH,qBAAa,YAAY;IAOhB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,YAAY,EAAE;IAPhC,GAAG,SAAK;IACR,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAsB;IACjD,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,MAAM,CAAC,QAAQ,aAAoB;gBAG3B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,YAAY,EAAE;IAGhC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IA2C/D,MAAM,CAAC,gBAAgB,IAAI,YAAY;IAKvC,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,EAAE;IAuB9D,MAAM,CAAC,iBAAiB,IAAI,YAAY;IAOxC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY;IAUxD,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY;CAGxD"}
|
|
@@ -26,6 +26,7 @@ const mergeTree_js_1 = require("../mergeTree.js");
|
|
|
26
26
|
const mergeTreeNodes_js_1 = require("../mergeTreeNodes.js");
|
|
27
27
|
const opBuilder_js_1 = require("../opBuilder.js");
|
|
28
28
|
const ops_js_1 = require("../ops.js");
|
|
29
|
+
const perspective_js_1 = require("../perspective.js");
|
|
29
30
|
const referencePositions_js_1 = require("../referencePositions.js");
|
|
30
31
|
const snapshotlegacy_js_1 = require("../snapshotlegacy.js");
|
|
31
32
|
const textSegment_js_1 = require("../textSegment.js");
|
|
@@ -251,21 +252,12 @@ function editFlat(source, s, dl, nt = "") {
|
|
|
251
252
|
}
|
|
252
253
|
let accumTime = 0;
|
|
253
254
|
function checkInsertMergeTree(mergeTree, pos, textSegment, verbose = false) {
|
|
254
|
-
let checkText = new MergeTreeTextHelper_js_1.MergeTreeTextHelper(mergeTree).getText(
|
|
255
|
+
let checkText = new MergeTreeTextHelper_js_1.MergeTreeTextHelper(mergeTree).getText(mergeTree.localPerspective);
|
|
255
256
|
checkText = editFlat(checkText, pos, 0, textSegment.text);
|
|
256
257
|
const clockStart = clock();
|
|
257
|
-
(
|
|
258
|
-
mergeTree,
|
|
259
|
-
pos,
|
|
260
|
-
refSeq: constants_js_1.UniversalSequenceNumber,
|
|
261
|
-
clientId: constants_js_1.LocalClientId,
|
|
262
|
-
seq: constants_js_1.UniversalSequenceNumber,
|
|
263
|
-
text: textSegment.text,
|
|
264
|
-
props: undefined,
|
|
265
|
-
opArgs: undefined,
|
|
266
|
-
});
|
|
258
|
+
mergeTree.insertSegments(pos, [textSegment], mergeTree.localPerspective, { clientId: constants_js_1.LocalClientId, seq: constants_js_1.UniversalSequenceNumber }, undefined);
|
|
267
259
|
accumTime += elapsedMicroseconds(clockStart);
|
|
268
|
-
const updatedText = new MergeTreeTextHelper_js_1.MergeTreeTextHelper(mergeTree).getText(
|
|
260
|
+
const updatedText = new MergeTreeTextHelper_js_1.MergeTreeTextHelper(mergeTree).getText(mergeTree.localPerspective);
|
|
269
261
|
const result = checkText === updatedText;
|
|
270
262
|
if (!result && verbose) {
|
|
271
263
|
log(`mismatch(o): ${checkText}`);
|
|
@@ -275,12 +267,12 @@ function checkInsertMergeTree(mergeTree, pos, textSegment, verbose = false) {
|
|
|
275
267
|
}
|
|
276
268
|
function checkMarkRemoveMergeTree(mergeTree, start, end, verbose = false) {
|
|
277
269
|
const helper = new MergeTreeTextHelper_js_1.MergeTreeTextHelper(mergeTree);
|
|
278
|
-
const origText = helper.getText(
|
|
270
|
+
const origText = helper.getText(mergeTree.localPerspective);
|
|
279
271
|
const checkText = editFlat(origText, start, end - start);
|
|
280
272
|
const clockStart = clock();
|
|
281
|
-
mergeTree.markRangeRemoved(start, end,
|
|
273
|
+
mergeTree.markRangeRemoved(start, end, mergeTree.localPerspective, { clientId: constants_js_1.LocalClientId, seq: constants_js_1.UniversalSequenceNumber }, { op: (0, opBuilder_js_1.createRemoveRangeOp)(start, end) });
|
|
282
274
|
accumTime += elapsedMicroseconds(clockStart);
|
|
283
|
-
const updatedText = helper.getText(
|
|
275
|
+
const updatedText = helper.getText(mergeTree.localPerspective);
|
|
284
276
|
const result = checkText === updatedText;
|
|
285
277
|
if (!result && verbose) {
|
|
286
278
|
log(`mismatch(o): ${origText}`);
|
|
@@ -291,8 +283,9 @@ function checkMarkRemoveMergeTree(mergeTree, start, end, verbose = false) {
|
|
|
291
283
|
}
|
|
292
284
|
function mergeTreeTest1() {
|
|
293
285
|
const mergeTree = new mergeTree_js_1.MergeTree();
|
|
294
|
-
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("the cat is on the mat")],
|
|
295
|
-
|
|
286
|
+
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("the cat is on the mat")], mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
287
|
+
const localPerspective = new perspective_js_1.LocalDefaultPerspective(mergeTree.collabWindow.clientId);
|
|
288
|
+
mergeTree.mapRange(printTextSegment, localPerspective, undefined);
|
|
296
289
|
let fuzzySeg = makeCollabTextSegment("fuzzy, fuzzy ");
|
|
297
290
|
checkInsertMergeTree(mergeTree, 4, fuzzySeg);
|
|
298
291
|
fuzzySeg = makeCollabTextSegment("fuzzy, fuzzy ");
|
|
@@ -300,17 +293,17 @@ function mergeTreeTest1() {
|
|
|
300
293
|
checkMarkRemoveMergeTree(mergeTree, 4, 13);
|
|
301
294
|
// checkRemoveSegTree(segTree, 4, 13);
|
|
302
295
|
checkInsertMergeTree(mergeTree, 4, makeCollabTextSegment("fi"));
|
|
303
|
-
mergeTree.mapRange(printTextSegment,
|
|
304
|
-
const segoff = mergeTree.getContainingSegment(4,
|
|
305
|
-
log(mergeTree.getPosition(segoff.segment,
|
|
306
|
-
log(new MergeTreeTextHelper_js_1.MergeTreeTextHelper(mergeTree).getText(
|
|
296
|
+
mergeTree.mapRange(printTextSegment, localPerspective, undefined);
|
|
297
|
+
const segoff = mergeTree.getContainingSegment(4, mergeTree.localPerspective);
|
|
298
|
+
log(mergeTree.getPosition(segoff.segment, mergeTree.localPerspective));
|
|
299
|
+
log(new MergeTreeTextHelper_js_1.MergeTreeTextHelper(mergeTree).getText(mergeTree.localPerspective));
|
|
307
300
|
log(mergeTree.toString());
|
|
308
301
|
TestPack().firstTest();
|
|
309
302
|
}
|
|
310
303
|
exports.mergeTreeTest1 = mergeTreeTest1;
|
|
311
304
|
function mergeTreeLargeTest() {
|
|
312
305
|
const mergeTree = new mergeTree_js_1.MergeTree();
|
|
313
|
-
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("the cat is on the mat")],
|
|
306
|
+
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("the cat is on the mat")], mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
314
307
|
const insertCount = 1000000;
|
|
315
308
|
const removeCount = 980000;
|
|
316
309
|
const random = (0, stochastic_test_utils_1.makeRandom)(0xdeadbeef, 0xfeedbed);
|
|
@@ -330,24 +323,15 @@ function mergeTreeLargeTest() {
|
|
|
330
323
|
for (let i = 0; i < insertCount; i++) {
|
|
331
324
|
const slen = randInt();
|
|
332
325
|
const s = randomString(slen, String.fromCodePoint(48 + slen));
|
|
333
|
-
const preLen = mergeTree.getLength(
|
|
326
|
+
const preLen = mergeTree.getLength(mergeTree.localPerspective);
|
|
334
327
|
const pos = random.integer(0, preLen);
|
|
335
328
|
const clockStart = clock();
|
|
336
|
-
(
|
|
337
|
-
mergeTree,
|
|
338
|
-
pos,
|
|
339
|
-
refSeq: constants_js_1.UniversalSequenceNumber,
|
|
340
|
-
clientId: constants_js_1.LocalClientId,
|
|
341
|
-
seq: constants_js_1.UniversalSequenceNumber,
|
|
342
|
-
text: s,
|
|
343
|
-
props: undefined,
|
|
344
|
-
opArgs: undefined,
|
|
345
|
-
});
|
|
329
|
+
mergeTree.insertSegments(pos, [textSegment_js_1.TextSegment.make(s)], mergeTree.localPerspective, { clientId: constants_js_1.LocalClientId, seq: constants_js_1.UniversalSequenceNumber }, undefined);
|
|
346
330
|
accumTime += elapsedMicroseconds(clockStart);
|
|
347
331
|
if (i > 0 && 0 === i % 50000) {
|
|
348
332
|
const perIter = (accumTime / (i + 1)).toFixed(3);
|
|
349
333
|
treeCount++;
|
|
350
|
-
accumTreeSize += mergeTree.getLength(
|
|
334
|
+
accumTreeSize += mergeTree.getLength(mergeTree.localPerspective);
|
|
351
335
|
const averageTreeSize = (accumTreeSize / treeCount).toFixed(3);
|
|
352
336
|
log(`i: ${i} time: ${accumTime}us which is average ${perIter} per insert with average tree size ${averageTreeSize}`);
|
|
353
337
|
}
|
|
@@ -358,16 +342,16 @@ function mergeTreeLargeTest() {
|
|
|
358
342
|
treeCount = 0;
|
|
359
343
|
for (let i = 0; i < removeCount; i++) {
|
|
360
344
|
const dlen = randInt();
|
|
361
|
-
const preLen = mergeTree.getLength(
|
|
345
|
+
const preLen = mergeTree.getLength(mergeTree.localPerspective);
|
|
362
346
|
const pos = random.integer(0, preLen);
|
|
363
347
|
// Log(itree.toString());
|
|
364
348
|
const clockStart = clock();
|
|
365
|
-
mergeTree.markRangeRemoved(pos, pos + dlen,
|
|
349
|
+
mergeTree.markRangeRemoved(pos, pos + dlen, mergeTree.localPerspective, { clientId: constants_js_1.LocalClientId, seq: constants_js_1.UniversalSequenceNumber }, undefined);
|
|
366
350
|
accumTime += elapsedMicroseconds(clockStart);
|
|
367
351
|
if (i > 0 && 0 === i % 50000) {
|
|
368
352
|
const perIter = (accumTime / (i + 1)).toFixed(3);
|
|
369
353
|
treeCount++;
|
|
370
|
-
accumTreeSize += mergeTree.getLength(
|
|
354
|
+
accumTreeSize += mergeTree.getLength(mergeTree.localPerspective);
|
|
371
355
|
const averageTreeSize = (accumTreeSize / treeCount).toFixed(3);
|
|
372
356
|
log(`i: ${i} time: ${accumTime}us which is average ${perIter} per del with average tree size ${averageTreeSize}`);
|
|
373
357
|
}
|
|
@@ -376,7 +360,7 @@ function mergeTreeLargeTest() {
|
|
|
376
360
|
exports.mergeTreeLargeTest = mergeTreeLargeTest;
|
|
377
361
|
function mergeTreeCheckedTest() {
|
|
378
362
|
const mergeTree = new mergeTree_js_1.MergeTree();
|
|
379
|
-
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("the cat is on the mat")],
|
|
363
|
+
mergeTree.insertSegments(0, [textSegment_js_1.TextSegment.make("the cat is on the mat")], mergeTree.localPerspective, mergeTree.collabWindow.mintNextLocalOperationStamp(), undefined);
|
|
380
364
|
const insertCount = 2000;
|
|
381
365
|
const removeCount = 1400;
|
|
382
366
|
const largeRemoveCount = 20;
|
|
@@ -399,10 +383,10 @@ function mergeTreeCheckedTest() {
|
|
|
399
383
|
for (let i = 0; i < insertCount; i++) {
|
|
400
384
|
const slen = randInt();
|
|
401
385
|
const s = randomString(slen, String.fromCodePoint(48 + slen));
|
|
402
|
-
const preLen = mergeTree.getLength(
|
|
386
|
+
const preLen = mergeTree.getLength(mergeTree.localPerspective);
|
|
403
387
|
const pos = random.integer(0, preLen);
|
|
404
388
|
if (!checkInsertMergeTree(mergeTree, pos, makeCollabTextSegment(s), true)) {
|
|
405
|
-
log(`i: ${i} preLen ${preLen} pos: ${pos} slen: ${slen} s: ${s} itree len: ${mergeTree.getLength(
|
|
389
|
+
log(`i: ${i} preLen ${preLen} pos: ${pos} slen: ${slen} s: ${s} itree len: ${mergeTree.getLength(mergeTree.localPerspective)}`);
|
|
406
390
|
log(mergeTree.toString());
|
|
407
391
|
errorCount++;
|
|
408
392
|
break;
|
|
@@ -410,7 +394,7 @@ function mergeTreeCheckedTest() {
|
|
|
410
394
|
if (i > 0 && 0 === i % 1000) {
|
|
411
395
|
const perIter = (accumTime / (i + 1)).toFixed(3);
|
|
412
396
|
treeCount++;
|
|
413
|
-
accumTreeSize += mergeTree.getLength(
|
|
397
|
+
accumTreeSize += mergeTree.getLength(mergeTree.localPerspective);
|
|
414
398
|
const averageTreeSize = (accumTreeSize / treeCount).toFixed(3);
|
|
415
399
|
log(`i: ${i} time: ${accumTime}us which is average ${perIter} per insert with average tree size ${averageTreeSize}`);
|
|
416
400
|
}
|
|
@@ -420,18 +404,18 @@ function mergeTreeCheckedTest() {
|
|
|
420
404
|
treeCount = 0;
|
|
421
405
|
for (let i = 0; i < largeRemoveCount; i++) {
|
|
422
406
|
const dlen = randLargeInt();
|
|
423
|
-
const preLen = mergeTree.getLength(
|
|
407
|
+
const preLen = mergeTree.getLength(mergeTree.localPerspective);
|
|
424
408
|
const pos = random.integer(0, preLen);
|
|
425
409
|
// log(itree.toString());
|
|
426
410
|
if (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {
|
|
427
|
-
log(`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(
|
|
411
|
+
log(`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(mergeTree.localPerspective)}`);
|
|
428
412
|
log(mergeTree.toString());
|
|
429
413
|
break;
|
|
430
414
|
}
|
|
431
415
|
if (i > 0 && 0 === i % 10) {
|
|
432
416
|
const perIter = (accumTime / (i + 1)).toFixed(3);
|
|
433
417
|
treeCount++;
|
|
434
|
-
accumTreeSize += mergeTree.getLength(
|
|
418
|
+
accumTreeSize += mergeTree.getLength(mergeTree.localPerspective);
|
|
435
419
|
const averageTreeSize = (accumTreeSize / treeCount).toFixed(3);
|
|
436
420
|
log(`i: ${i} time: ${accumTime}us which is average ${perIter} per large del with average tree size ${averageTreeSize}`);
|
|
437
421
|
}
|
|
@@ -441,12 +425,12 @@ function mergeTreeCheckedTest() {
|
|
|
441
425
|
treeCount = 0;
|
|
442
426
|
for (let i = 0; i < removeCount; i++) {
|
|
443
427
|
const dlen = randInt();
|
|
444
|
-
const preLen = mergeTree.getLength(
|
|
428
|
+
const preLen = mergeTree.getLength(mergeTree.localPerspective);
|
|
445
429
|
const pos = random.integer(0, preLen);
|
|
446
430
|
// log(itree.toString());
|
|
447
431
|
if (i & 1) {
|
|
448
432
|
if (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {
|
|
449
|
-
log(`mr i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(
|
|
433
|
+
log(`mr i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(mergeTree.localPerspective)}`);
|
|
450
434
|
log(mergeTree.toString());
|
|
451
435
|
errorCount++;
|
|
452
436
|
break;
|
|
@@ -454,7 +438,7 @@ function mergeTreeCheckedTest() {
|
|
|
454
438
|
}
|
|
455
439
|
else {
|
|
456
440
|
if (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {
|
|
457
|
-
log(`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(
|
|
441
|
+
log(`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(mergeTree.localPerspective)}`);
|
|
458
442
|
log(mergeTree.toString());
|
|
459
443
|
errorCount++;
|
|
460
444
|
break;
|
|
@@ -463,7 +447,7 @@ function mergeTreeCheckedTest() {
|
|
|
463
447
|
if (i > 0 && 0 === i % 1000) {
|
|
464
448
|
const perIter = (accumTime / (i + 1)).toFixed(3);
|
|
465
449
|
treeCount++;
|
|
466
|
-
accumTreeSize += mergeTree.getLength(
|
|
450
|
+
accumTreeSize += mergeTree.getLength(mergeTree.localPerspective);
|
|
467
451
|
const averageTreeSize = (accumTreeSize / treeCount).toFixed(3);
|
|
468
452
|
log(`i: ${i} time: ${accumTime}us which is average ${perIter} per del with average tree size ${averageTreeSize}`);
|
|
469
453
|
}
|
|
@@ -474,10 +458,10 @@ function mergeTreeCheckedTest() {
|
|
|
474
458
|
for (let i = 0; i < insertCount; i++) {
|
|
475
459
|
const slen = randInt();
|
|
476
460
|
const s = randomString(slen, String.fromCodePoint(48 + slen));
|
|
477
|
-
const preLen = mergeTree.getLength(
|
|
461
|
+
const preLen = mergeTree.getLength(mergeTree.localPerspective);
|
|
478
462
|
const pos = random.integer(0, preLen);
|
|
479
463
|
if (!checkInsertMergeTree(mergeTree, pos, makeCollabTextSegment(s), true)) {
|
|
480
|
-
log(`i: ${i} preLen ${preLen} pos: ${pos} slen: ${slen} s: ${s} itree len: ${mergeTree.getLength(
|
|
464
|
+
log(`i: ${i} preLen ${preLen} pos: ${pos} slen: ${slen} s: ${s} itree len: ${mergeTree.getLength(mergeTree.localPerspective)}`);
|
|
481
465
|
log(mergeTree.toString());
|
|
482
466
|
errorCount++;
|
|
483
467
|
break;
|
|
@@ -485,7 +469,7 @@ function mergeTreeCheckedTest() {
|
|
|
485
469
|
if (i > 0 && 0 === i % 1000) {
|
|
486
470
|
const perIter = (accumTime / (i + 1)).toFixed(3);
|
|
487
471
|
treeCount++;
|
|
488
|
-
accumTreeSize += mergeTree.getLength(
|
|
472
|
+
accumTreeSize += mergeTree.getLength(mergeTree.localPerspective);
|
|
489
473
|
const averageTreeSize = (accumTreeSize / treeCount).toFixed(3);
|
|
490
474
|
log(`i: ${i} time: ${accumTime}us which is average ${perIter} per insert with average tree size ${averageTreeSize}`);
|
|
491
475
|
}
|
|
@@ -495,12 +479,12 @@ function mergeTreeCheckedTest() {
|
|
|
495
479
|
treeCount = 0;
|
|
496
480
|
for (let i = 0; i < removeCount; i++) {
|
|
497
481
|
const dlen = randInt();
|
|
498
|
-
const preLen = mergeTree.getLength(
|
|
482
|
+
const preLen = mergeTree.getLength(mergeTree.localPerspective);
|
|
499
483
|
const pos = random.integer(0, preLen);
|
|
500
484
|
// log(itree.toString());
|
|
501
485
|
if (i & 1) {
|
|
502
486
|
if (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {
|
|
503
|
-
log(`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(
|
|
487
|
+
log(`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(mergeTree.localPerspective)}`);
|
|
504
488
|
log(mergeTree.toString());
|
|
505
489
|
errorCount++;
|
|
506
490
|
break;
|
|
@@ -508,7 +492,7 @@ function mergeTreeCheckedTest() {
|
|
|
508
492
|
}
|
|
509
493
|
else {
|
|
510
494
|
if (!checkMarkRemoveMergeTree(mergeTree, pos, pos + dlen, true)) {
|
|
511
|
-
log(`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(
|
|
495
|
+
log(`i: ${i} preLen ${preLen} pos: ${pos} dlen: ${dlen} itree len: ${mergeTree.getLength(mergeTree.localPerspective)}`);
|
|
512
496
|
log(mergeTree.toString());
|
|
513
497
|
errorCount++;
|
|
514
498
|
break;
|
|
@@ -517,7 +501,7 @@ function mergeTreeCheckedTest() {
|
|
|
517
501
|
if (i > 0 && 0 === i % 1000) {
|
|
518
502
|
const perIter = (accumTime / (i + 1)).toFixed(3);
|
|
519
503
|
treeCount++;
|
|
520
|
-
accumTreeSize += mergeTree.getLength(
|
|
504
|
+
accumTreeSize += mergeTree.getLength(mergeTree.localPerspective);
|
|
521
505
|
const averageTreeSize = (accumTreeSize / treeCount).toFixed(3);
|
|
522
506
|
log(`i: ${i} time: ${accumTime}us which is average ${perIter} per del with average tree size ${averageTreeSize}`);
|
|
523
507
|
}
|
|
@@ -1278,17 +1262,8 @@ function findReplacePerf(filename) {
|
|
|
1278
1262
|
const text = textSeg.text;
|
|
1279
1263
|
const i = text.indexOf("the");
|
|
1280
1264
|
if (i >= 0) {
|
|
1281
|
-
client.mergeTree.markRangeRemoved(pos + i, pos + i + 3,
|
|
1282
|
-
(
|
|
1283
|
-
mergeTree: client.mergeTree,
|
|
1284
|
-
pos: pos + i,
|
|
1285
|
-
refSeq: constants_js_1.UniversalSequenceNumber,
|
|
1286
|
-
clientId: client.getClientId(),
|
|
1287
|
-
seq: 1,
|
|
1288
|
-
text: "teh",
|
|
1289
|
-
props: undefined,
|
|
1290
|
-
opArgs: undefined,
|
|
1291
|
-
});
|
|
1265
|
+
client.mergeTree.markRangeRemoved(pos + i, pos + i + 3, client.mergeTree.localPerspective, { clientId: client.getClientId(), seq: 1 }, undefined);
|
|
1266
|
+
client.mergeTree.insertSegments(pos + i, [textSegment_js_1.TextSegment.make("teh")], client.mergeTree.localPerspective, { seq: 1, clientId: client.getClientId() }, undefined);
|
|
1292
1267
|
pos = pos + i + 3;
|
|
1293
1268
|
cReplaces++;
|
|
1294
1269
|
}
|