@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.
Files changed (308) hide show
  1. package/CHANGELOG.md +403 -399
  2. package/api-report/merge-tree.legacy.alpha.api.md +1 -0
  3. package/dist/MergeTreeTextHelper.d.ts +9 -3
  4. package/dist/MergeTreeTextHelper.d.ts.map +1 -1
  5. package/dist/MergeTreeTextHelper.js +5 -5
  6. package/dist/MergeTreeTextHelper.js.map +1 -1
  7. package/dist/client.d.ts +7 -13
  8. package/dist/client.d.ts.map +1 -1
  9. package/dist/client.js +136 -110
  10. package/dist/client.js.map +1 -1
  11. package/dist/endOfTreeSegment.d.ts +12 -8
  12. package/dist/endOfTreeSegment.d.ts.map +1 -1
  13. package/dist/endOfTreeSegment.js +2 -4
  14. package/dist/endOfTreeSegment.js.map +1 -1
  15. package/dist/index.d.ts +6 -3
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +2 -3
  18. package/dist/index.js.map +1 -1
  19. package/dist/mergeTree.d.ts +37 -23
  20. package/dist/mergeTree.d.ts.map +1 -1
  21. package/dist/mergeTree.js +400 -483
  22. package/dist/mergeTree.js.map +1 -1
  23. package/dist/mergeTreeDeltaCallback.d.ts +4 -8
  24. package/dist/mergeTreeDeltaCallback.d.ts.map +1 -1
  25. package/dist/mergeTreeDeltaCallback.js.map +1 -1
  26. package/dist/mergeTreeNodes.d.ts +32 -10
  27. package/dist/mergeTreeNodes.d.ts.map +1 -1
  28. package/dist/mergeTreeNodes.js +43 -28
  29. package/dist/mergeTreeNodes.js.map +1 -1
  30. package/dist/partialLengths.d.ts +2 -2
  31. package/dist/partialLengths.d.ts.map +1 -1
  32. package/dist/partialLengths.js +181 -109
  33. package/dist/partialLengths.js.map +1 -1
  34. package/dist/perspective.d.ts +8 -27
  35. package/dist/perspective.d.ts.map +1 -1
  36. package/dist/perspective.js +7 -67
  37. package/dist/perspective.js.map +1 -1
  38. package/dist/revertibles.d.ts.map +1 -1
  39. package/dist/revertibles.js +2 -2
  40. package/dist/revertibles.js.map +1 -1
  41. package/dist/segmentInfos.d.ts +20 -106
  42. package/dist/segmentInfos.d.ts.map +1 -1
  43. package/dist/segmentInfos.js +28 -42
  44. package/dist/segmentInfos.js.map +1 -1
  45. package/dist/segmentPropertiesManager.d.ts +1 -14
  46. package/dist/segmentPropertiesManager.d.ts.map +1 -1
  47. package/dist/segmentPropertiesManager.js +3 -17
  48. package/dist/segmentPropertiesManager.js.map +1 -1
  49. package/dist/snapshotLoader.d.ts.map +1 -1
  50. package/dist/snapshotLoader.js +62 -19
  51. package/dist/snapshotLoader.js.map +1 -1
  52. package/dist/snapshotV1.d.ts.map +1 -1
  53. package/dist/snapshotV1.js +55 -24
  54. package/dist/snapshotV1.js.map +1 -1
  55. package/dist/snapshotlegacy.d.ts.map +1 -1
  56. package/dist/snapshotlegacy.js +6 -9
  57. package/dist/snapshotlegacy.js.map +1 -1
  58. package/dist/stamps.d.ts +1 -1
  59. package/dist/stamps.js +1 -1
  60. package/dist/stamps.js.map +1 -1
  61. package/dist/test/Insertion.perf.spec.js +6 -51
  62. package/dist/test/Insertion.perf.spec.js.map +1 -1
  63. package/dist/test/PartialLengths.perf.spec.js +18 -25
  64. package/dist/test/PartialLengths.perf.spec.js.map +1 -1
  65. package/dist/test/Removal.perf.spec.js +13 -41
  66. package/dist/test/Removal.perf.spec.js.map +1 -1
  67. package/dist/test/beastTest.spec.d.ts.map +1 -1
  68. package/dist/test/beastTest.spec.js +41 -66
  69. package/dist/test/beastTest.spec.js.map +1 -1
  70. package/dist/test/client.annotateMarker.spec.js +1 -11
  71. package/dist/test/client.annotateMarker.spec.js.map +1 -1
  72. package/dist/test/client.applyMsg.spec.js +14 -14
  73. package/dist/test/client.applyMsg.spec.js.map +1 -1
  74. package/dist/test/client.getPosition.spec.js +1 -1
  75. package/dist/test/client.getPosition.spec.js.map +1 -1
  76. package/dist/test/client.localReference.spec.js +1 -1
  77. package/dist/test/client.localReference.spec.js.map +1 -1
  78. package/dist/test/client.rollback.spec.js +49 -58
  79. package/dist/test/client.rollback.spec.js.map +1 -1
  80. package/dist/test/client.rollbackFarm.spec.js +1 -1
  81. package/dist/test/client.rollbackFarm.spec.js.map +1 -1
  82. package/dist/test/client.searchForMarker.spec.js +4 -21
  83. package/dist/test/client.searchForMarker.spec.js.map +1 -1
  84. package/dist/test/index.d.ts +2 -2
  85. package/dist/test/index.d.ts.map +1 -1
  86. package/dist/test/index.js +2 -6
  87. package/dist/test/index.js.map +1 -1
  88. package/dist/test/mergeTree.annotate.deltaCallback.spec.js +14 -59
  89. package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
  90. package/dist/test/mergeTree.annotate.spec.js +47 -63
  91. package/dist/test/mergeTree.annotate.spec.js.map +1 -1
  92. package/dist/test/mergeTree.insert.deltaCallback.spec.js +9 -62
  93. package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
  94. package/dist/test/mergeTree.insertingWalk.spec.js +59 -125
  95. package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -1
  96. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +12 -93
  97. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
  98. package/dist/test/mergeTree.markRangeRemoved.spec.js +10 -7
  99. package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  100. package/dist/test/mergeTree.walk.spec.js +2 -14
  101. package/dist/test/mergeTree.walk.spec.js.map +1 -1
  102. package/dist/test/mergeTreeOperationRunner.js +2 -2
  103. package/dist/test/mergeTreeOperationRunner.js.map +1 -1
  104. package/dist/test/obliterate.concurrent.spec.js +18 -23
  105. package/dist/test/obliterate.concurrent.spec.js.map +1 -1
  106. package/dist/test/obliterate.partialLength.spec.js +166 -136
  107. package/dist/test/obliterate.partialLength.spec.js.map +1 -1
  108. package/dist/test/obliterate.spec.js +16 -126
  109. package/dist/test/obliterate.spec.js.map +1 -1
  110. package/dist/test/partialLength.spec.js +28 -196
  111. package/dist/test/partialLength.spec.js.map +1 -1
  112. package/dist/test/perspective.spec.js +34 -0
  113. package/dist/test/perspective.spec.js.map +1 -1
  114. package/dist/test/propertyManager.spec.js +1 -1
  115. package/dist/test/propertyManager.spec.js.map +1 -1
  116. package/dist/test/resetPendingSegmentsToOp.spec.js +0 -2
  117. package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  118. package/dist/test/segmentGroupCollection.spec.js +10 -4
  119. package/dist/test/segmentGroupCollection.spec.js.map +1 -1
  120. package/dist/test/testClient.d.ts +1 -0
  121. package/dist/test/testClient.d.ts.map +1 -1
  122. package/dist/test/testClient.js +16 -26
  123. package/dist/test/testClient.js.map +1 -1
  124. package/dist/test/testClientLogger.d.ts.map +1 -1
  125. package/dist/test/testClientLogger.js +3 -10
  126. package/dist/test/testClientLogger.js.map +1 -1
  127. package/dist/test/testServer.d.ts +2 -1
  128. package/dist/test/testServer.d.ts.map +1 -1
  129. package/dist/test/testServer.js +7 -5
  130. package/dist/test/testServer.js.map +1 -1
  131. package/dist/test/testUtils.d.ts +36 -56
  132. package/dist/test/testUtils.d.ts.map +1 -1
  133. package/dist/test/testUtils.js +68 -77
  134. package/dist/test/testUtils.js.map +1 -1
  135. package/dist/test/text.d.ts +2 -2
  136. package/dist/test/text.d.ts.map +1 -1
  137. package/dist/test/text.js +5 -2
  138. package/dist/test/text.js.map +1 -1
  139. package/dist/textSegment.d.ts +0 -6
  140. package/dist/textSegment.d.ts.map +1 -1
  141. package/dist/textSegment.js.map +1 -1
  142. package/dist/zamboni.d.ts.map +1 -1
  143. package/dist/zamboni.js +53 -26
  144. package/dist/zamboni.js.map +1 -1
  145. package/lib/MergeTreeTextHelper.d.ts +9 -3
  146. package/lib/MergeTreeTextHelper.d.ts.map +1 -1
  147. package/lib/MergeTreeTextHelper.js +5 -5
  148. package/lib/MergeTreeTextHelper.js.map +1 -1
  149. package/lib/client.d.ts +7 -13
  150. package/lib/client.d.ts.map +1 -1
  151. package/lib/client.js +117 -116
  152. package/lib/client.js.map +1 -1
  153. package/lib/endOfTreeSegment.d.ts +12 -8
  154. package/lib/endOfTreeSegment.d.ts.map +1 -1
  155. package/lib/endOfTreeSegment.js +2 -4
  156. package/lib/endOfTreeSegment.js.map +1 -1
  157. package/lib/index.d.ts +6 -3
  158. package/lib/index.d.ts.map +1 -1
  159. package/lib/index.js +1 -1
  160. package/lib/index.js.map +1 -1
  161. package/lib/mergeTree.d.ts +37 -23
  162. package/lib/mergeTree.d.ts.map +1 -1
  163. package/lib/mergeTree.js +381 -488
  164. package/lib/mergeTree.js.map +1 -1
  165. package/lib/mergeTreeDeltaCallback.d.ts +4 -8
  166. package/lib/mergeTreeDeltaCallback.d.ts.map +1 -1
  167. package/lib/mergeTreeDeltaCallback.js.map +1 -1
  168. package/lib/mergeTreeNodes.d.ts +32 -10
  169. package/lib/mergeTreeNodes.d.ts.map +1 -1
  170. package/lib/mergeTreeNodes.js +42 -29
  171. package/lib/mergeTreeNodes.js.map +1 -1
  172. package/lib/partialLengths.d.ts +2 -2
  173. package/lib/partialLengths.d.ts.map +1 -1
  174. package/lib/partialLengths.js +160 -111
  175. package/lib/partialLengths.js.map +1 -1
  176. package/lib/perspective.d.ts +8 -27
  177. package/lib/perspective.d.ts.map +1 -1
  178. package/lib/perspective.js +8 -68
  179. package/lib/perspective.js.map +1 -1
  180. package/lib/revertibles.d.ts.map +1 -1
  181. package/lib/revertibles.js +2 -2
  182. package/lib/revertibles.js.map +1 -1
  183. package/lib/segmentInfos.d.ts +20 -106
  184. package/lib/segmentInfos.d.ts.map +1 -1
  185. package/lib/segmentInfos.js +26 -37
  186. package/lib/segmentInfos.js.map +1 -1
  187. package/lib/segmentPropertiesManager.d.ts +1 -14
  188. package/lib/segmentPropertiesManager.d.ts.map +1 -1
  189. package/lib/segmentPropertiesManager.js +2 -16
  190. package/lib/segmentPropertiesManager.js.map +1 -1
  191. package/lib/snapshotLoader.d.ts.map +1 -1
  192. package/lib/snapshotLoader.js +39 -19
  193. package/lib/snapshotLoader.js.map +1 -1
  194. package/lib/snapshotV1.d.ts.map +1 -1
  195. package/lib/snapshotV1.js +34 -26
  196. package/lib/snapshotV1.js.map +1 -1
  197. package/lib/snapshotlegacy.d.ts.map +1 -1
  198. package/lib/snapshotlegacy.js +7 -10
  199. package/lib/snapshotlegacy.js.map +1 -1
  200. package/lib/stamps.d.ts +1 -1
  201. package/lib/stamps.js +1 -1
  202. package/lib/stamps.js.map +1 -1
  203. package/lib/test/Insertion.perf.spec.js +6 -51
  204. package/lib/test/Insertion.perf.spec.js.map +1 -1
  205. package/lib/test/PartialLengths.perf.spec.js +18 -25
  206. package/lib/test/PartialLengths.perf.spec.js.map +1 -1
  207. package/lib/test/Removal.perf.spec.js +13 -41
  208. package/lib/test/Removal.perf.spec.js.map +1 -1
  209. package/lib/test/beastTest.spec.d.ts.map +1 -1
  210. package/lib/test/beastTest.spec.js +42 -67
  211. package/lib/test/beastTest.spec.js.map +1 -1
  212. package/lib/test/client.annotateMarker.spec.js +1 -11
  213. package/lib/test/client.annotateMarker.spec.js.map +1 -1
  214. package/lib/test/client.applyMsg.spec.js +14 -14
  215. package/lib/test/client.applyMsg.spec.js.map +1 -1
  216. package/lib/test/client.getPosition.spec.js +1 -1
  217. package/lib/test/client.getPosition.spec.js.map +1 -1
  218. package/lib/test/client.localReference.spec.js +1 -1
  219. package/lib/test/client.localReference.spec.js.map +1 -1
  220. package/lib/test/client.rollback.spec.js +50 -59
  221. package/lib/test/client.rollback.spec.js.map +1 -1
  222. package/lib/test/client.rollbackFarm.spec.js +1 -1
  223. package/lib/test/client.rollbackFarm.spec.js.map +1 -1
  224. package/lib/test/client.searchForMarker.spec.js +4 -21
  225. package/lib/test/client.searchForMarker.spec.js.map +1 -1
  226. package/lib/test/index.d.ts +2 -2
  227. package/lib/test/index.d.ts.map +1 -1
  228. package/lib/test/index.js +1 -1
  229. package/lib/test/index.js.map +1 -1
  230. package/lib/test/mergeTree.annotate.deltaCallback.spec.js +15 -60
  231. package/lib/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -1
  232. package/lib/test/mergeTree.annotate.spec.js +48 -64
  233. package/lib/test/mergeTree.annotate.spec.js.map +1 -1
  234. package/lib/test/mergeTree.insert.deltaCallback.spec.js +10 -63
  235. package/lib/test/mergeTree.insert.deltaCallback.spec.js.map +1 -1
  236. package/lib/test/mergeTree.insertingWalk.spec.js +61 -127
  237. package/lib/test/mergeTree.insertingWalk.spec.js.map +1 -1
  238. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +13 -94
  239. package/lib/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -1
  240. package/lib/test/mergeTree.markRangeRemoved.spec.js +10 -7
  241. package/lib/test/mergeTree.markRangeRemoved.spec.js.map +1 -1
  242. package/lib/test/mergeTree.walk.spec.js +2 -14
  243. package/lib/test/mergeTree.walk.spec.js.map +1 -1
  244. package/lib/test/mergeTreeOperationRunner.js +3 -3
  245. package/lib/test/mergeTreeOperationRunner.js.map +1 -1
  246. package/lib/test/obliterate.concurrent.spec.js +18 -23
  247. package/lib/test/obliterate.concurrent.spec.js.map +1 -1
  248. package/lib/test/obliterate.partialLength.spec.js +167 -137
  249. package/lib/test/obliterate.partialLength.spec.js.map +1 -1
  250. package/lib/test/obliterate.spec.js +17 -127
  251. package/lib/test/obliterate.spec.js.map +1 -1
  252. package/lib/test/partialLength.spec.js +29 -197
  253. package/lib/test/partialLength.spec.js.map +1 -1
  254. package/lib/test/perspective.spec.js +34 -0
  255. package/lib/test/perspective.spec.js.map +1 -1
  256. package/lib/test/propertyManager.spec.js +2 -2
  257. package/lib/test/propertyManager.spec.js.map +1 -1
  258. package/lib/test/resetPendingSegmentsToOp.spec.js +0 -2
  259. package/lib/test/resetPendingSegmentsToOp.spec.js.map +1 -1
  260. package/lib/test/segmentGroupCollection.spec.js +10 -4
  261. package/lib/test/segmentGroupCollection.spec.js.map +1 -1
  262. package/lib/test/testClient.d.ts +1 -0
  263. package/lib/test/testClient.d.ts.map +1 -1
  264. package/lib/test/testClient.js +18 -28
  265. package/lib/test/testClient.js.map +1 -1
  266. package/lib/test/testClientLogger.d.ts.map +1 -1
  267. package/lib/test/testClientLogger.js +3 -10
  268. package/lib/test/testClientLogger.js.map +1 -1
  269. package/lib/test/testServer.d.ts +2 -1
  270. package/lib/test/testServer.d.ts.map +1 -1
  271. package/lib/test/testServer.js +7 -5
  272. package/lib/test/testServer.js.map +1 -1
  273. package/lib/test/testUtils.d.ts +36 -56
  274. package/lib/test/testUtils.d.ts.map +1 -1
  275. package/lib/test/testUtils.js +66 -48
  276. package/lib/test/testUtils.js.map +1 -1
  277. package/lib/test/text.d.ts +2 -2
  278. package/lib/test/text.d.ts.map +1 -1
  279. package/lib/test/text.js +6 -3
  280. package/lib/test/text.js.map +1 -1
  281. package/lib/textSegment.d.ts +0 -6
  282. package/lib/textSegment.d.ts.map +1 -1
  283. package/lib/textSegment.js.map +1 -1
  284. package/lib/tsdoc-metadata.json +1 -1
  285. package/lib/zamboni.d.ts.map +1 -1
  286. package/lib/zamboni.js +32 -28
  287. package/lib/zamboni.js.map +1 -1
  288. package/package.json +17 -20
  289. package/src/MergeTreeTextHelper.ts +17 -12
  290. package/src/client.ts +141 -197
  291. package/src/endOfTreeSegment.ts +11 -8
  292. package/src/index.ts +4 -3
  293. package/src/mergeTree.ts +482 -633
  294. package/src/mergeTreeDeltaCallback.ts +4 -8
  295. package/src/mergeTreeNodes.ts +66 -45
  296. package/src/partialLengths.ts +181 -137
  297. package/src/perspective.ts +17 -95
  298. package/src/revertibles.ts +2 -7
  299. package/src/segmentInfos.ts +48 -141
  300. package/src/segmentPropertiesManager.ts +2 -16
  301. package/src/snapshotLoader.ts +62 -30
  302. package/src/snapshotV1.ts +36 -28
  303. package/src/snapshotlegacy.ts +7 -16
  304. package/src/stamps.ts +1 -1
  305. package/src/textSegment.ts +0 -13
  306. package/src/zamboni.ts +38 -32
  307. package/tsconfig.json +1 -0
  308. 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 testUtils_js_1 = require("./testUtils.js");
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
- (0, testUtils_js_1.insertText)({
26
- mergeTree,
27
- pos: 0,
28
- refSeq: i,
29
- clientId: 0,
27
+ const stamp = {
30
28
  seq: i,
31
- text: "a",
32
- props: undefined,
33
- opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.INSERT } },
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
- (0, testUtils_js_1.markRangeRemoved)({
38
- mergeTree,
39
- start: i - 1001,
40
- end: i - 1000,
41
- refSeq: i,
42
- clientId: 0,
36
+ const stamp = {
43
37
  seq: i,
44
- opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.REMOVE } },
45
- overwrite: false,
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
- (0, testUtils_js_1.insertText)({
50
- mergeTree,
51
- pos: 0,
52
- refSeq: i,
53
- clientId: 0,
45
+ const stamp = {
54
46
  seq: i,
55
- text: "a",
56
- props: undefined,
57
- opArgs: { op: { type: ops_js_1.MergeTreeDeltaType.INSERT } },
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;AAE/C,iDAA8D;AAE9D,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,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtB,IAAA,yBAAU,EAAC;wBACV,SAAS;wBACT,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,CAAC;wBACT,QAAQ,EAAE,CAAC;wBACX,GAAG,EAAE,CAAC;wBACN,IAAI,EAAE,GAAG;wBACT,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;qBACnD,CAAC,CAAC;gBACJ,CAAC;gBAED,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtB,IAAA,+BAAgB,EAAC;wBAChB,SAAS;wBACT,KAAK,EAAE,CAAC,GAAG,IAAI;wBACf,GAAG,EAAE,CAAC,GAAG,IAAI;wBACb,MAAM,EAAE,CAAC;wBACT,QAAQ,EAAE,CAAC;wBACX,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;wBACnD,SAAS,EAAE,KAAK;qBAChB,CAAC,CAAC;gBACJ,CAAC;gBAED,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtB,IAAA,yBAAU,EAAC;wBACV,SAAS;wBACT,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,CAAC;wBACT,QAAQ,EAAE,CAAC;wBACX,GAAG,EAAE,CAAC;wBACN,IAAI,EAAE,GAAG;wBACT,KAAK,EAAE,SAAS;wBAChB,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;qBACnD,CAAC,CAAC;gBACJ,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\";\n\nimport { insertText, markRangeRemoved } from \"./testUtils.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\tlet i = 1;\n\t\t\t\tfor (; i < 1001; i++) {\n\t\t\t\t\tinsertText({\n\t\t\t\t\t\tmergeTree,\n\t\t\t\t\t\tpos: 0,\n\t\t\t\t\t\trefSeq: i,\n\t\t\t\t\t\tclientId: 0,\n\t\t\t\t\t\tseq: i,\n\t\t\t\t\t\ttext: \"a\",\n\t\t\t\t\t\tprops: undefined,\n\t\t\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.INSERT } },\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\tmarkRangeRemoved({\n\t\t\t\t\t\tmergeTree,\n\t\t\t\t\t\tstart: i - 1001,\n\t\t\t\t\t\tend: i - 1000,\n\t\t\t\t\t\trefSeq: i,\n\t\t\t\t\t\tclientId: 0,\n\t\t\t\t\t\tseq: i,\n\t\t\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.REMOVE } },\n\t\t\t\t\t\toverwrite: false,\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\tinsertText({\n\t\t\t\t\t\tmergeTree,\n\t\t\t\t\t\tpos: 0,\n\t\t\t\t\t\trefSeq: i,\n\t\t\t\t\t\tclientId: 0,\n\t\t\t\t\t\tseq: i,\n\t\t\t\t\t\ttext: \"a\",\n\t\t\t\t\t\tprops: undefined,\n\t\t\t\t\t\topArgs: { op: { type: MergeTreeDeltaType.INSERT } },\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"]}
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
- (0, testUtils_js_1.markRangeRemoved)({
48
- mergeTree: str.mergeTree,
49
- start: 0,
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
- (0, testUtils_js_1.markRangeRemoved)({
102
- mergeTree: str.mergeTree,
103
- start: 0,
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
- (0, testUtils_js_1.markRangeRemoved)({
128
- mergeTree: str.mergeTree,
129
- start: 499,
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
- (0, testUtils_js_1.markRangeRemoved)({
154
- mergeTree: str.mergeTree,
155
- start: 999,
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":";AAAA;;;GAGG;;AAEH,sDAAkE;AAGlE,sCAA+C;AAC/C,sDAG2B;AAE3B,2DAA+D;AAC/D,iDAAkD;AAElD,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,IAAA,+BAAgB,EAAC;gBAChB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,CAAC;gBACX,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;gBACnD,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;QACJ,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,IAAA,+BAAgB,EAAC;gBAChB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,CAAC;gBACN,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,CAAC;gBACX,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;gBACnD,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;QACJ,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,IAAA,+BAAgB,EAAC;gBAChB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,CAAC;gBACX,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;gBACnD,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;QACJ,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,IAAA,+BAAgB,EAAC;gBAChB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,CAAC;gBACX,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,2BAAkB,CAAC,MAAM,EAAE,EAAE;gBACnD,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;QACJ,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 {\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":"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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 { 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;AAmC3E,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;AAkFD,wBAAgB,cAAc,IAAI,IAAI,CAwBrC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAmFzC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAwM7C;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"}
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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
- (0, testUtils_js_1.insertText)({
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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, constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId, constants_js_1.UniversalSequenceNumber, { op: (0, opBuilder_js_1.createRemoveRangeOp)(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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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")], constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId, constants_js_1.UniversalSequenceNumber, undefined);
295
- mergeTree.mapRange(printTextSegment, constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId, undefined);
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, constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId, undefined);
304
- const segoff = mergeTree.getContainingSegment(4, constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
305
- log(mergeTree.getPosition(segoff.segment, constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId));
306
- log(new MergeTreeTextHelper_js_1.MergeTreeTextHelper(mergeTree).getText(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId));
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")], constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId, constants_js_1.UniversalSequenceNumber, undefined);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
326
+ const preLen = mergeTree.getLength(mergeTree.localPerspective);
334
327
  const pos = random.integer(0, preLen);
335
328
  const clockStart = clock();
336
- (0, testUtils_js_1.insertText)({
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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, constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId, constants_js_1.UniversalSequenceNumber, undefined);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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")], constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId, constants_js_1.UniversalSequenceNumber, undefined);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId)}`);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId)}`);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId)}`);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId)}`);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId)}`);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId)}`);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId)}`);
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(constants_js_1.UniversalSequenceNumber, constants_js_1.LocalClientId);
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, constants_js_1.UniversalSequenceNumber, client.getClientId(), 1, undefined);
1282
- (0, testUtils_js_1.insertText)({
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
  }