@fluidframework/merge-tree 2.0.0-internal.8.0.0 → 2.0.0-rc.1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +0 -6
  3. package/api-extractor-esm.json +17 -0
  4. package/api-extractor-lint.json +1 -10
  5. package/api-extractor.json +0 -4
  6. package/api-report/merge-tree.api.md +4 -9
  7. package/dist/client.d.ts +0 -7
  8. package/dist/client.d.ts.map +1 -1
  9. package/dist/client.js +0 -7
  10. package/dist/client.js.map +1 -1
  11. package/dist/merge-tree-alpha.d.ts +27 -12
  12. package/dist/merge-tree-beta.d.ts +0 -16
  13. package/dist/merge-tree-public.d.ts +0 -16
  14. package/dist/merge-tree-untrimmed.d.ts +5 -29
  15. package/dist/mergeTree.d.ts +0 -17
  16. package/dist/mergeTree.d.ts.map +1 -1
  17. package/dist/mergeTree.js +0 -130
  18. package/dist/mergeTree.js.map +1 -1
  19. package/dist/ops.d.ts +1 -1
  20. package/dist/ops.js +1 -1
  21. package/dist/ops.js.map +1 -1
  22. package/dist/revertibles.d.ts +4 -4
  23. package/dist/revertibles.js +3 -3
  24. package/dist/revertibles.js.map +1 -1
  25. package/dist/test/Insertion.perf.spec.d.ts +6 -0
  26. package/dist/test/Insertion.perf.spec.d.ts.map +1 -0
  27. package/dist/test/Insertion.perf.spec.js +113 -0
  28. package/dist/test/Insertion.perf.spec.js.map +1 -0
  29. package/dist/test/PartialLengths.perf.spec.d.ts +6 -0
  30. package/dist/test/PartialLengths.perf.spec.d.ts.map +1 -0
  31. package/dist/test/PartialLengths.perf.spec.js +67 -0
  32. package/dist/test/PartialLengths.perf.spec.js.map +1 -0
  33. package/dist/test/Removal.perf.spec.d.ts +6 -0
  34. package/dist/test/Removal.perf.spec.d.ts.map +1 -0
  35. package/dist/test/Removal.perf.spec.js +166 -0
  36. package/dist/test/Removal.perf.spec.js.map +1 -0
  37. package/dist/test/Snapshot.perf.spec.d.ts +6 -0
  38. package/dist/test/Snapshot.perf.spec.d.ts.map +1 -0
  39. package/dist/test/Snapshot.perf.spec.js +33 -0
  40. package/dist/test/Snapshot.perf.spec.js.map +1 -0
  41. package/dist/test/attributionCollection.perf.spec.d.ts +6 -0
  42. package/dist/test/attributionCollection.perf.spec.d.ts.map +1 -0
  43. package/dist/test/attributionCollection.perf.spec.js +231 -0
  44. package/dist/test/attributionCollection.perf.spec.js.map +1 -0
  45. package/dist/test/attributionCollection.spec.d.ts +6 -0
  46. package/dist/test/attributionCollection.spec.d.ts.map +1 -0
  47. package/dist/test/attributionCollection.spec.js +486 -0
  48. package/dist/test/attributionCollection.spec.js.map +1 -0
  49. package/dist/test/attributionPolicy.spec.d.ts +6 -0
  50. package/dist/test/attributionPolicy.spec.d.ts.map +1 -0
  51. package/dist/test/attributionPolicy.spec.js +189 -0
  52. package/dist/test/attributionPolicy.spec.js.map +1 -0
  53. package/dist/test/beastTest.d.ts +54 -0
  54. package/dist/test/beastTest.d.ts.map +1 -0
  55. package/dist/test/beastTest.js +1333 -0
  56. package/dist/test/beastTest.js.map +1 -0
  57. package/dist/test/client.annotateMarker.spec.d.ts +6 -0
  58. package/dist/test/client.annotateMarker.spec.d.ts.map +1 -0
  59. package/dist/test/client.annotateMarker.spec.js +45 -0
  60. package/dist/test/client.annotateMarker.spec.js.map +1 -0
  61. package/dist/test/client.apis.d.ts +7 -0
  62. package/dist/test/client.apis.d.ts.map +1 -0
  63. package/dist/test/client.apis.js +72 -0
  64. package/dist/test/client.apis.js.map +1 -0
  65. package/dist/test/client.applyMsg.spec.d.ts +6 -0
  66. package/dist/test/client.applyMsg.spec.d.ts.map +1 -0
  67. package/dist/test/client.applyMsg.spec.js +500 -0
  68. package/dist/test/client.applyMsg.spec.js.map +1 -0
  69. package/dist/test/client.applyStashedOpFarm.spec.d.ts +12 -0
  70. package/dist/test/client.applyStashedOpFarm.spec.d.ts.map +1 -0
  71. package/dist/test/client.applyStashedOpFarm.spec.js +144 -0
  72. package/dist/test/client.applyStashedOpFarm.spec.js.map +1 -0
  73. package/dist/test/client.attributionFarm.spec.d.ts +7 -0
  74. package/dist/test/client.attributionFarm.spec.d.ts.map +1 -0
  75. package/dist/test/client.attributionFarm.spec.js +96 -0
  76. package/dist/test/client.attributionFarm.spec.js.map +1 -0
  77. package/dist/test/client.conflictFarm.spec.d.ts +15 -0
  78. package/dist/test/client.conflictFarm.spec.d.ts.map +1 -0
  79. package/dist/test/client.conflictFarm.spec.js +88 -0
  80. package/dist/test/client.conflictFarm.spec.js.map +1 -0
  81. package/dist/test/client.getPosition.spec.d.ts +6 -0
  82. package/dist/test/client.getPosition.spec.d.ts.map +1 -0
  83. package/dist/test/client.getPosition.spec.js +54 -0
  84. package/dist/test/client.getPosition.spec.js.map +1 -0
  85. package/dist/test/client.localReference.spec.d.ts +6 -0
  86. package/dist/test/client.localReference.spec.d.ts.map +1 -0
  87. package/dist/test/client.localReference.spec.js +439 -0
  88. package/dist/test/client.localReference.spec.js.map +1 -0
  89. package/dist/test/client.localReferenceFarm.spec.d.ts +6 -0
  90. package/dist/test/client.localReferenceFarm.spec.d.ts.map +1 -0
  91. package/dist/test/client.localReferenceFarm.spec.js +88 -0
  92. package/dist/test/client.localReferenceFarm.spec.js.map +1 -0
  93. package/dist/test/client.rebasePosition.spec.d.ts +6 -0
  94. package/dist/test/client.rebasePosition.spec.d.ts.map +1 -0
  95. package/dist/test/client.rebasePosition.spec.js +102 -0
  96. package/dist/test/client.rebasePosition.spec.js.map +1 -0
  97. package/dist/test/client.reconnectFarm.spec.d.ts +12 -0
  98. package/dist/test/client.reconnectFarm.spec.d.ts.map +1 -0
  99. package/dist/test/client.reconnectFarm.spec.js +91 -0
  100. package/dist/test/client.reconnectFarm.spec.js.map +1 -0
  101. package/dist/test/client.replay.spec.d.ts +6 -0
  102. package/dist/test/client.replay.spec.d.ts.map +1 -0
  103. package/dist/test/client.replay.spec.js +85 -0
  104. package/dist/test/client.replay.spec.js.map +1 -0
  105. package/dist/test/client.rollback.spec.d.ts +6 -0
  106. package/dist/test/client.rollback.spec.d.ts.map +1 -0
  107. package/dist/test/client.rollback.spec.js +453 -0
  108. package/dist/test/client.rollback.spec.js.map +1 -0
  109. package/dist/test/client.rollbackFarm.spec.d.ts +6 -0
  110. package/dist/test/client.rollbackFarm.spec.d.ts.map +1 -0
  111. package/dist/test/client.rollbackFarm.spec.js +48 -0
  112. package/dist/test/client.rollbackFarm.spec.js.map +1 -0
  113. package/dist/test/client.searchForMarker.spec.d.ts +6 -0
  114. package/dist/test/client.searchForMarker.spec.d.ts.map +1 -0
  115. package/dist/test/client.searchForMarker.spec.js +446 -0
  116. package/dist/test/client.searchForMarker.spec.js.map +1 -0
  117. package/dist/test/client.walkSegments.spec.d.ts +6 -0
  118. package/dist/test/client.walkSegments.spec.d.ts.map +1 -0
  119. package/dist/test/client.walkSegments.spec.js +54 -0
  120. package/dist/test/client.walkSegments.spec.js.map +1 -0
  121. package/dist/test/collections.list.spec.d.ts +6 -0
  122. package/dist/test/collections.list.spec.d.ts.map +1 -0
  123. package/dist/test/collections.list.spec.js +84 -0
  124. package/dist/test/collections.list.spec.js.map +1 -0
  125. package/dist/test/createInsertOnlyAttributionPolicy.spec.d.ts +6 -0
  126. package/dist/test/createInsertOnlyAttributionPolicy.spec.d.ts.map +1 -0
  127. package/dist/test/createInsertOnlyAttributionPolicy.spec.js +35 -0
  128. package/dist/test/createInsertOnlyAttributionPolicy.spec.js.map +1 -0
  129. package/dist/test/index.d.ts +13 -0
  130. package/dist/test/index.d.ts.map +1 -0
  131. package/dist/test/index.js +88 -0
  132. package/dist/test/index.js.map +1 -0
  133. package/dist/test/mergeTree.annotate.deltaCallback.spec.d.ts +6 -0
  134. package/dist/test/mergeTree.annotate.deltaCallback.spec.d.ts.map +1 -0
  135. package/dist/test/mergeTree.annotate.deltaCallback.spec.js +142 -0
  136. package/dist/test/mergeTree.annotate.deltaCallback.spec.js.map +1 -0
  137. package/dist/test/mergeTree.annotate.spec.d.ts +6 -0
  138. package/dist/test/mergeTree.annotate.spec.d.ts.map +1 -0
  139. package/dist/test/mergeTree.annotate.spec.js +448 -0
  140. package/dist/test/mergeTree.annotate.spec.js.map +1 -0
  141. package/dist/test/mergeTree.insert.deltaCallback.spec.d.ts +6 -0
  142. package/dist/test/mergeTree.insert.deltaCallback.spec.d.ts.map +1 -0
  143. package/dist/test/mergeTree.insert.deltaCallback.spec.js +126 -0
  144. package/dist/test/mergeTree.insert.deltaCallback.spec.js.map +1 -0
  145. package/dist/test/mergeTree.insertingWalk.spec.d.ts +6 -0
  146. package/dist/test/mergeTree.insertingWalk.spec.d.ts.map +1 -0
  147. package/dist/test/mergeTree.insertingWalk.spec.js +279 -0
  148. package/dist/test/mergeTree.insertingWalk.spec.js.map +1 -0
  149. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts +6 -0
  150. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.d.ts.map +1 -0
  151. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js +178 -0
  152. package/dist/test/mergeTree.markRangeRemoved.deltaCallback.spec.js.map +1 -0
  153. package/dist/test/mergeTree.markRangeRemoved.spec.d.ts +6 -0
  154. package/dist/test/mergeTree.markRangeRemoved.spec.d.ts.map +1 -0
  155. package/dist/test/mergeTree.markRangeRemoved.spec.js +130 -0
  156. package/dist/test/mergeTree.markRangeRemoved.spec.js.map +1 -0
  157. package/dist/test/mergeTree.walk.spec.d.ts +6 -0
  158. package/dist/test/mergeTree.walk.spec.d.ts.map +1 -0
  159. package/dist/test/mergeTree.walk.spec.js +63 -0
  160. package/dist/test/mergeTree.walk.spec.js.map +1 -0
  161. package/dist/test/mergeTree.zamboni.spec.d.ts +6 -0
  162. package/dist/test/mergeTree.zamboni.spec.d.ts.map +1 -0
  163. package/dist/test/mergeTree.zamboni.spec.js +52 -0
  164. package/dist/test/mergeTree.zamboni.spec.js.map +1 -0
  165. package/dist/test/mergeTreeOperationRunner.d.ts +63 -0
  166. package/dist/test/mergeTreeOperationRunner.d.ts.map +1 -0
  167. package/dist/test/mergeTreeOperationRunner.js +245 -0
  168. package/dist/test/mergeTreeOperationRunner.js.map +1 -0
  169. package/dist/test/mergeTreeOperationRunner.spec.d.ts +6 -0
  170. package/dist/test/mergeTreeOperationRunner.spec.d.ts.map +1 -0
  171. package/dist/test/mergeTreeOperationRunner.spec.js +156 -0
  172. package/dist/test/mergeTreeOperationRunner.spec.js.map +1 -0
  173. package/dist/test/obliterate.concurrent.spec.d.ts +6 -0
  174. package/dist/test/obliterate.concurrent.spec.d.ts.map +1 -0
  175. package/dist/test/obliterate.concurrent.spec.js +1446 -0
  176. package/dist/test/obliterate.concurrent.spec.js.map +1 -0
  177. package/dist/test/obliterate.partialLength.spec.d.ts +6 -0
  178. package/dist/test/obliterate.partialLength.spec.d.ts.map +1 -0
  179. package/dist/test/obliterate.partialLength.spec.js +279 -0
  180. package/dist/test/obliterate.partialLength.spec.js.map +1 -0
  181. package/dist/test/obliterate.reconnect.spec.d.ts +6 -0
  182. package/dist/test/obliterate.reconnect.spec.d.ts.map +1 -0
  183. package/dist/test/obliterate.reconnect.spec.js +164 -0
  184. package/dist/test/obliterate.reconnect.spec.js.map +1 -0
  185. package/dist/test/obliterate.spec.d.ts +6 -0
  186. package/dist/test/obliterate.spec.d.ts.map +1 -0
  187. package/dist/test/obliterate.spec.js +162 -0
  188. package/dist/test/obliterate.spec.js.map +1 -0
  189. package/dist/test/ordinal.spec.d.ts +2 -0
  190. package/dist/test/ordinal.spec.d.ts.map +1 -0
  191. package/dist/test/ordinal.spec.js +43 -0
  192. package/dist/test/ordinal.spec.js.map +1 -0
  193. package/dist/test/partialLength.spec.d.ts +6 -0
  194. package/dist/test/partialLength.spec.d.ts.map +1 -0
  195. package/dist/test/partialLength.spec.js +282 -0
  196. package/dist/test/partialLength.spec.js.map +1 -0
  197. package/dist/test/properties.spec.d.ts +6 -0
  198. package/dist/test/properties.spec.d.ts.map +1 -0
  199. package/dist/test/properties.spec.js +55 -0
  200. package/dist/test/properties.spec.js.map +1 -0
  201. package/dist/test/reconnectHelper.d.ts +48 -0
  202. package/dist/test/reconnectHelper.d.ts.map +1 -0
  203. package/dist/test/reconnectHelper.js +86 -0
  204. package/dist/test/reconnectHelper.js.map +1 -0
  205. package/dist/test/resetPendingSegmentsToOp.spec.d.ts +6 -0
  206. package/dist/test/resetPendingSegmentsToOp.spec.d.ts.map +1 -0
  207. package/dist/test/resetPendingSegmentsToOp.spec.js +218 -0
  208. package/dist/test/resetPendingSegmentsToOp.spec.js.map +1 -0
  209. package/dist/test/revertibleFarm.spec.d.ts +6 -0
  210. package/dist/test/revertibleFarm.spec.d.ts.map +1 -0
  211. package/dist/test/revertibleFarm.spec.js +124 -0
  212. package/dist/test/revertibleFarm.spec.js.map +1 -0
  213. package/dist/test/revertibles.spec.d.ts +17 -0
  214. package/dist/test/revertibles.spec.d.ts.map +1 -0
  215. package/dist/test/revertibles.spec.js +385 -0
  216. package/dist/test/revertibles.spec.js.map +1 -0
  217. package/dist/test/segmentGroupCollection.spec.d.ts +6 -0
  218. package/dist/test/segmentGroupCollection.spec.d.ts.map +1 -0
  219. package/dist/test/segmentGroupCollection.spec.js +60 -0
  220. package/dist/test/segmentGroupCollection.spec.js.map +1 -0
  221. package/dist/test/snapshot.spec.d.ts +6 -0
  222. package/dist/test/snapshot.spec.d.ts.map +1 -0
  223. package/dist/test/snapshot.spec.js +178 -0
  224. package/dist/test/snapshot.spec.js.map +1 -0
  225. package/dist/test/snapshot.utils.d.ts +33 -0
  226. package/dist/test/snapshot.utils.d.ts.map +1 -0
  227. package/dist/test/snapshot.utils.js +109 -0
  228. package/dist/test/snapshot.utils.js.map +1 -0
  229. package/dist/test/snapshotlegacy.spec.d.ts +6 -0
  230. package/dist/test/snapshotlegacy.spec.d.ts.map +1 -0
  231. package/dist/test/snapshotlegacy.spec.js +139 -0
  232. package/dist/test/snapshotlegacy.spec.js.map +1 -0
  233. package/dist/test/sortedSegmentSet.spec.d.ts +6 -0
  234. package/dist/test/sortedSegmentSet.spec.d.ts.map +1 -0
  235. package/dist/test/sortedSegmentSet.spec.js +95 -0
  236. package/dist/test/sortedSegmentSet.spec.js.map +1 -0
  237. package/dist/test/testClient.d.ts +119 -0
  238. package/dist/test/testClient.d.ts.map +1 -0
  239. package/dist/test/testClient.js +439 -0
  240. package/dist/test/testClient.js.map +1 -0
  241. package/dist/test/testClientLogger.d.ts +44 -0
  242. package/dist/test/testClientLogger.d.ts.map +1 -0
  243. package/dist/test/testClientLogger.js +287 -0
  244. package/dist/test/testClientLogger.js.map +1 -0
  245. package/dist/test/testSerializer.d.ts +18 -0
  246. package/dist/test/testSerializer.d.ts.map +1 -0
  247. package/dist/test/testSerializer.js +33 -0
  248. package/dist/test/testSerializer.js.map +1 -0
  249. package/dist/test/testServer.d.ts +36 -0
  250. package/dist/test/testServer.d.ts.map +1 -0
  251. package/dist/test/testServer.js +138 -0
  252. package/dist/test/testServer.js.map +1 -0
  253. package/dist/test/testUtils.d.ts +69 -0
  254. package/dist/test/testUtils.d.ts.map +1 -0
  255. package/dist/test/testUtils.js +149 -0
  256. package/dist/test/testUtils.js.map +1 -0
  257. package/dist/test/text.d.ts +9 -0
  258. package/dist/test/text.d.ts.map +1 -0
  259. package/dist/test/text.js +76 -0
  260. package/dist/test/text.js.map +1 -0
  261. package/dist/test/tracking.spec.d.ts +6 -0
  262. package/dist/test/tracking.spec.d.ts.map +1 -0
  263. package/dist/test/tracking.spec.js +120 -0
  264. package/dist/test/tracking.spec.js.map +1 -0
  265. package/dist/test/wordUnitTests.d.ts +6 -0
  266. package/dist/test/wordUnitTests.d.ts.map +1 -0
  267. package/dist/test/wordUnitTests.js +172 -0
  268. package/dist/test/wordUnitTests.js.map +1 -0
  269. package/lib/{MergeTreeTextHelper.d.ts → MergeTreeTextHelper.d.mts} +3 -3
  270. package/lib/MergeTreeTextHelper.d.mts.map +1 -0
  271. package/lib/{MergeTreeTextHelper.js → MergeTreeTextHelper.mjs} +5 -10
  272. package/lib/MergeTreeTextHelper.mjs.map +1 -0
  273. package/lib/{attributionCollection.d.ts → attributionCollection.d.mts} +2 -2
  274. package/lib/attributionCollection.d.mts.map +1 -0
  275. package/lib/{attributionCollection.js → attributionCollection.mjs} +9 -14
  276. package/lib/attributionCollection.mjs.map +1 -0
  277. package/lib/{attributionPolicy.d.ts → attributionPolicy.d.mts} +2 -2
  278. package/lib/attributionPolicy.d.mts.map +1 -0
  279. package/lib/{attributionPolicy.js → attributionPolicy.mjs} +21 -27
  280. package/lib/attributionPolicy.mjs.map +1 -0
  281. package/lib/{client.d.ts → client.d.mts} +9 -16
  282. package/lib/client.d.mts.map +1 -0
  283. package/lib/{client.js → client.mjs} +101 -110
  284. package/lib/client.mjs.map +1 -0
  285. package/lib/collections/{index.d.ts → index.d.mts} +3 -3
  286. package/lib/collections/index.d.mts.map +1 -0
  287. package/lib/collections/index.mjs +7 -0
  288. package/lib/collections/index.mjs.map +1 -0
  289. package/lib/collections/{list.d.ts → list.d.mts} +1 -1
  290. package/lib/collections/list.d.mts.map +1 -0
  291. package/lib/collections/{list.js → list.mjs} +6 -11
  292. package/lib/collections/list.mjs.map +1 -0
  293. package/lib/collections/{rbTree.d.ts → rbTree.d.mts} +1 -1
  294. package/lib/collections/rbTree.d.mts.map +1 -0
  295. package/lib/collections/{rbTree.js → rbTree.mjs} +16 -20
  296. package/lib/collections/rbTree.mjs.map +1 -0
  297. package/lib/{constants.d.ts → constants.d.mts} +1 -1
  298. package/lib/constants.d.mts.map +1 -0
  299. package/lib/constants.mjs +32 -0
  300. package/lib/constants.mjs.map +1 -0
  301. package/lib/{endOfTreeSegment.d.ts → endOfTreeSegment.d.mts} +4 -4
  302. package/lib/endOfTreeSegment.d.mts.map +1 -0
  303. package/lib/{endOfTreeSegment.js → endOfTreeSegment.mjs} +13 -18
  304. package/lib/endOfTreeSegment.mjs.map +1 -0
  305. package/lib/{index.d.ts → index.d.mts} +21 -21
  306. package/lib/index.d.mts.map +1 -0
  307. package/lib/index.mjs +24 -0
  308. package/lib/index.mjs.map +1 -0
  309. package/lib/{localReference.d.ts → localReference.d.mts} +7 -7
  310. package/lib/localReference.d.mts.map +1 -0
  311. package/lib/{localReference.js → localReference.mjs} +38 -47
  312. package/lib/localReference.mjs.map +1 -0
  313. package/lib/{merge-tree-alpha.d.ts → merge-tree-alpha.d.mts} +27 -12
  314. package/lib/{merge-tree-beta.d.ts → merge-tree-beta.d.mts} +0 -16
  315. package/lib/{merge-tree-public.d.ts → merge-tree-public.d.mts} +0 -16
  316. package/lib/{merge-tree-untrimmed.d.ts → merge-tree-untrimmed.d.mts} +5 -29
  317. package/lib/{mergeTree.d.ts → mergeTree.d.mts} +12 -29
  318. package/lib/mergeTree.d.mts.map +1 -0
  319. package/lib/{mergeTree.js → mergeTree.mjs} +203 -340
  320. package/lib/mergeTree.mjs.map +1 -0
  321. package/lib/{mergeTreeDeltaCallback.d.ts → mergeTreeDeltaCallback.d.mts} +4 -8
  322. package/lib/mergeTreeDeltaCallback.d.mts.map +1 -0
  323. package/lib/{mergeTreeDeltaCallback.js → mergeTreeDeltaCallback.mjs} +2 -5
  324. package/lib/mergeTreeDeltaCallback.mjs.map +1 -0
  325. package/lib/{mergeTreeNodeWalk.d.ts → mergeTreeNodeWalk.d.mts} +2 -2
  326. package/lib/mergeTreeNodeWalk.d.mts.map +1 -0
  327. package/lib/{mergeTreeNodeWalk.js → mergeTreeNodeWalk.mjs} +14 -21
  328. package/lib/mergeTreeNodeWalk.mjs.map +1 -0
  329. package/lib/{mergeTreeNodes.d.ts → mergeTreeNodes.d.mts} +12 -12
  330. package/lib/mergeTreeNodes.d.mts.map +1 -0
  331. package/lib/{mergeTreeNodes.js → mergeTreeNodes.mjs} +60 -76
  332. package/lib/mergeTreeNodes.mjs.map +1 -0
  333. package/lib/{mergeTreeTracking.d.ts → mergeTreeTracking.d.mts} +3 -3
  334. package/lib/mergeTreeTracking.d.mts.map +1 -0
  335. package/lib/{mergeTreeTracking.js → mergeTreeTracking.mjs} +6 -13
  336. package/lib/mergeTreeTracking.mjs.map +1 -0
  337. package/lib/{opBuilder.d.ts → opBuilder.d.mts} +4 -4
  338. package/lib/opBuilder.d.mts.map +1 -0
  339. package/lib/{opBuilder.js → opBuilder.mjs} +15 -25
  340. package/lib/opBuilder.mjs.map +1 -0
  341. package/lib/{ops.d.ts → ops.d.mts} +2 -2
  342. package/lib/ops.d.mts.map +1 -0
  343. package/lib/{ops.js → ops.mjs} +5 -8
  344. package/lib/ops.mjs.map +1 -0
  345. package/lib/{ordinal.d.ts → ordinal.d.mts} +1 -1
  346. package/lib/ordinal.d.mts.map +1 -0
  347. package/lib/{ordinal.js → ordinal.mjs} +4 -9
  348. package/lib/ordinal.mjs.map +1 -0
  349. package/lib/{partialLengths.d.ts → partialLengths.d.mts} +4 -4
  350. package/lib/partialLengths.d.mts.map +1 -0
  351. package/lib/{partialLengths.js → partialLengths.mjs} +38 -46
  352. package/lib/partialLengths.mjs.map +1 -0
  353. package/lib/{properties.d.ts → properties.d.mts} +1 -1
  354. package/lib/properties.d.mts.map +1 -0
  355. package/lib/{properties.js → properties.mjs} +7 -16
  356. package/lib/properties.mjs.map +1 -0
  357. package/lib/{referencePositions.d.ts → referencePositions.d.mts} +5 -5
  358. package/lib/referencePositions.d.mts.map +1 -0
  359. package/lib/referencePositions.mjs +70 -0
  360. package/lib/referencePositions.mjs.map +1 -0
  361. package/lib/{revertibles.d.ts → revertibles.d.mts} +12 -12
  362. package/lib/revertibles.d.mts.map +1 -0
  363. package/lib/{revertibles.js → revertibles.mjs} +60 -67
  364. package/lib/revertibles.mjs.map +1 -0
  365. package/lib/{segmentGroupCollection.d.ts → segmentGroupCollection.d.mts} +2 -2
  366. package/lib/segmentGroupCollection.d.mts.map +1 -0
  367. package/lib/{segmentGroupCollection.js → segmentGroupCollection.mjs} +5 -9
  368. package/lib/segmentGroupCollection.mjs.map +1 -0
  369. package/lib/{segmentPropertiesManager.d.ts → segmentPropertiesManager.d.mts} +3 -3
  370. package/lib/segmentPropertiesManager.d.mts.map +1 -0
  371. package/lib/{segmentPropertiesManager.js → segmentPropertiesManager.mjs} +14 -20
  372. package/lib/{segmentPropertiesManager.js.map → segmentPropertiesManager.mjs.map} +1 -1
  373. package/lib/{snapshotChunks.d.ts → snapshotChunks.d.mts} +4 -4
  374. package/lib/snapshotChunks.d.mts.map +1 -0
  375. package/lib/{snapshotChunks.js → snapshotChunks.mjs} +10 -17
  376. package/lib/snapshotChunks.mjs.map +1 -0
  377. package/lib/{snapshotLoader.d.ts → snapshotLoader.d.mts} +3 -3
  378. package/lib/snapshotLoader.d.mts.map +1 -0
  379. package/lib/{snapshotLoader.js → snapshotLoader.mjs} +33 -38
  380. package/lib/snapshotLoader.mjs.map +1 -0
  381. package/lib/{snapshotV1.d.ts → snapshotV1.d.mts} +4 -4
  382. package/lib/snapshotV1.d.mts.map +1 -0
  383. package/lib/{snapshotV1.js → snapshotV1.mjs} +28 -32
  384. package/lib/snapshotV1.mjs.map +1 -0
  385. package/lib/{snapshotlegacy.d.ts → snapshotlegacy.d.mts} +3 -3
  386. package/lib/snapshotlegacy.d.mts.map +1 -0
  387. package/lib/{snapshotlegacy.js → snapshotlegacy.mjs} +21 -26
  388. package/lib/snapshotlegacy.mjs.map +1 -0
  389. package/lib/{sortedSegmentSet.d.ts → sortedSegmentSet.d.mts} +4 -4
  390. package/lib/sortedSegmentSet.d.mts.map +1 -0
  391. package/lib/{sortedSegmentSet.js → sortedSegmentSet.mjs} +3 -8
  392. package/lib/sortedSegmentSet.mjs.map +1 -0
  393. package/lib/{sortedSet.d.ts → sortedSet.d.mts} +1 -1
  394. package/lib/sortedSet.d.mts.map +1 -0
  395. package/lib/{sortedSet.js → sortedSet.mjs} +2 -6
  396. package/lib/sortedSet.mjs.map +1 -0
  397. package/lib/{textSegment.d.ts → textSegment.d.mts} +4 -4
  398. package/lib/textSegment.d.mts.map +1 -0
  399. package/lib/{textSegment.js → textSegment.mjs} +8 -12
  400. package/lib/textSegment.mjs.map +1 -0
  401. package/lib/{zamboni.d.ts → zamboni.d.mts} +3 -3
  402. package/lib/zamboni.d.mts.map +1 -0
  403. package/lib/{zamboni.js → zamboni.mjs} +22 -28
  404. package/lib/zamboni.mjs.map +1 -0
  405. package/package.json +95 -164
  406. package/src/client.ts +0 -8
  407. package/src/mergeTree.ts +0 -226
  408. package/src/ops.ts +1 -1
  409. package/src/revertibles.ts +4 -4
  410. package/lib/MergeTreeTextHelper.d.ts.map +0 -1
  411. package/lib/MergeTreeTextHelper.js.map +0 -1
  412. package/lib/attributionCollection.d.ts.map +0 -1
  413. package/lib/attributionCollection.js.map +0 -1
  414. package/lib/attributionPolicy.d.ts.map +0 -1
  415. package/lib/attributionPolicy.js.map +0 -1
  416. package/lib/client.d.ts.map +0 -1
  417. package/lib/client.js.map +0 -1
  418. package/lib/collections/index.d.ts.map +0 -1
  419. package/lib/collections/index.js +0 -14
  420. package/lib/collections/index.js.map +0 -1
  421. package/lib/collections/list.d.ts.map +0 -1
  422. package/lib/collections/list.js.map +0 -1
  423. package/lib/collections/rbTree.d.ts.map +0 -1
  424. package/lib/collections/rbTree.js.map +0 -1
  425. package/lib/constants.d.ts.map +0 -1
  426. package/lib/constants.js +0 -35
  427. package/lib/constants.js.map +0 -1
  428. package/lib/endOfTreeSegment.d.ts.map +0 -1
  429. package/lib/endOfTreeSegment.js.map +0 -1
  430. package/lib/index.d.ts.map +0 -1
  431. package/lib/index.js +0 -80
  432. package/lib/index.js.map +0 -1
  433. package/lib/localReference.d.ts.map +0 -1
  434. package/lib/localReference.js.map +0 -1
  435. package/lib/mergeTree.d.ts.map +0 -1
  436. package/lib/mergeTree.js.map +0 -1
  437. package/lib/mergeTreeDeltaCallback.d.ts.map +0 -1
  438. package/lib/mergeTreeDeltaCallback.js.map +0 -1
  439. package/lib/mergeTreeNodeWalk.d.ts.map +0 -1
  440. package/lib/mergeTreeNodeWalk.js.map +0 -1
  441. package/lib/mergeTreeNodes.d.ts.map +0 -1
  442. package/lib/mergeTreeNodes.js.map +0 -1
  443. package/lib/mergeTreeTracking.d.ts.map +0 -1
  444. package/lib/mergeTreeTracking.js.map +0 -1
  445. package/lib/opBuilder.d.ts.map +0 -1
  446. package/lib/opBuilder.js.map +0 -1
  447. package/lib/ops.d.ts.map +0 -1
  448. package/lib/ops.js.map +0 -1
  449. package/lib/ordinal.d.ts.map +0 -1
  450. package/lib/ordinal.js.map +0 -1
  451. package/lib/partialLengths.d.ts.map +0 -1
  452. package/lib/partialLengths.js.map +0 -1
  453. package/lib/properties.d.ts.map +0 -1
  454. package/lib/properties.js.map +0 -1
  455. package/lib/referencePositions.d.ts.map +0 -1
  456. package/lib/referencePositions.js +0 -80
  457. package/lib/referencePositions.js.map +0 -1
  458. package/lib/revertibles.d.ts.map +0 -1
  459. package/lib/revertibles.js.map +0 -1
  460. package/lib/segmentGroupCollection.d.ts.map +0 -1
  461. package/lib/segmentGroupCollection.js.map +0 -1
  462. package/lib/segmentPropertiesManager.d.ts.map +0 -1
  463. package/lib/snapshotChunks.d.ts.map +0 -1
  464. package/lib/snapshotChunks.js.map +0 -1
  465. package/lib/snapshotLoader.d.ts.map +0 -1
  466. package/lib/snapshotLoader.js.map +0 -1
  467. package/lib/snapshotV1.d.ts.map +0 -1
  468. package/lib/snapshotV1.js.map +0 -1
  469. package/lib/snapshotlegacy.d.ts.map +0 -1
  470. package/lib/snapshotlegacy.js.map +0 -1
  471. package/lib/sortedSegmentSet.d.ts.map +0 -1
  472. package/lib/sortedSegmentSet.js.map +0 -1
  473. package/lib/sortedSet.d.ts.map +0 -1
  474. package/lib/sortedSet.js.map +0 -1
  475. package/lib/textSegment.d.ts.map +0 -1
  476. package/lib/textSegment.js.map +0 -1
  477. package/lib/zamboni.d.ts.map +0 -1
  478. package/lib/zamboni.js.map +0 -1
  479. package/merge-tree.test-files.tar +0 -0
  480. package/src/mergeTreeExample1.pdf +0 -0
  481. package/tsconfig.esnext.json +0 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obliterate.concurrent.spec.js","sourceRoot":"","sources":["../../src/test/obliterate.concurrent.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 { strict as assert } from \"assert\";\nimport { LoggingError } from \"@fluidframework/telemetry-utils\";\nimport { PartialSequenceLengths, verify, verifyExpected } from \"../partialLengths\";\nimport { MergeTree } from \"../mergeTree\";\nimport { ReconnectTestHelper } from \"./reconnectHelper\";\n\n/**\n * Some tests contain ASCII diagrams of the trees to make it easier to reason about\n * structure. The format of these diagrams is this:\n * - segments are separated by `-`.\n * - removed ranges are surrounded by `[` ... `]`\n * - obliterated ranges are surrounded by `(` ... `)`\n *\n * In cases where these ranges are ambiguous, there are additional diagrams\n * containing `v` and `-`, with the `v` denoting the start and end of the range\n *\n * E.g.\n *\n * ```\n * v---v\n * [ABC]\n * ```\n *\n * This diagram describes a single segment, `ABC`, that has been removed.\n *\n *\n * ```\n * v-----v\n * v---v\n * [[ABC]]\n * ```\n *\n * This diagram describes a single segment, `ABC`, that has been concurrently\n * removed by two clients.\n */\n\nfor (const incremental of [true, false]) {\n\tdescribe(`obliterate partial lengths incremental = ${incremental}`, () => {\n\t\tbeforeEach(() => {\n\t\t\tPartialSequenceLengths.options.verifier = verify;\n\t\t\tPartialSequenceLengths.options.verifyExpected = verifyExpected;\n\t\t\tMergeTree.options.incrementalUpdate = incremental;\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tPartialSequenceLengths.options.verifier = undefined;\n\t\t\tPartialSequenceLengths.options.verifyExpected = undefined;\n\t\t\tMergeTree.options.incrementalUpdate = true;\n\t\t});\n\n\t\tit(\"length of children does not differ from parent when overlapping remove+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEFGH\n\t\t\t// I-[J]-(KLM-[ABC]-D-123456-E-[FG]-H)\n\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEFGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 0, 3);\n\t\t\thelper.insertText(\"C\", 1, \"123456\");\n\t\t\thelper.removeRange(\"A\", 5, 7);\n\t\t\thelper.insertText(\"A\", 0, \"IJKLM\");\n\t\t\thelper.obliterateRange(\"A\", 2, 11);\n\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"I\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes concurrent insert that occurs after obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.insertText(\"C\", 2, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes concurrent insert that occurs before obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"C\", 2, \"X\");\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete unacked segment at start of string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"XAB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"XAB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"XAB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"throws when local obliterate has range end outside length of local string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\n\t\t\ttry {\n\t\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\t\tassert.fail(\"should not be possible to obliterate outside local range\");\n\t\t\t} catch (e) {\n\t\t\t\tassert(e instanceof LoggingError);\n\t\t\t\tassert.equal(e.message, \"RangeOutOfBounds\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"does not delete when obliterate immediately after insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"W\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"W\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"W\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"W\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when between local insert+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"X\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when between local insert+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"X\");\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"X\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when in middle of segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"XB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"XB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"XB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes segment inserted into locally obliterated segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates lengths after obliterated insertion\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"N\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"B\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\tassert.equal(helper.clients.A.getLength(), 0);\n\t\t\tassert.equal(helper.clients.B.getLength(), 0);\n\t\t\tassert.equal(helper.clients.C.getLength(), 0);\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates lengths when insertion causes tree to split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"0\");\n\t\t\thelper.insertText(\"C\", 0, \"123\");\n\t\t\thelper.insertText(\"B\", 0, \"BB\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 5);\n\t\t\thelper.insertText(\"B\", 1, \"A\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText().length, helper.clients.A.getLength());\n\t\t\tassert.equal(helper.clients.B.getText().length, helper.clients.B.getLength());\n\t\t\tassert.equal(helper.clients.C.getText().length, helper.clients.C.getLength());\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GG30\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"length of node split by insertion does not count remotely obliterated segments\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"A\", 0, \"2\");\n\t\t\thelper.insertText(\"C\", 0, \"XXXX\");\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 6);\n\t\t\thelper.insertText(\"C\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GDGX21\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"GDGX21\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"length of node split by obliterate does not count remotely obliterated segments\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"A\", 0, \"2\");\n\t\t\thelper.insertText(\"C\", 0, \"XXXX\");\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 6);\n\t\t\thelper.insertText(\"C\", 1, \"C\");\n\t\t\thelper.insertText(\"B\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GCGX21\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"GCGX21\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"counts remotely but not concurrently inserted segments for length when tree is split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// a-b-c-d-e-123\n\t\t\t// (a-b)-c-d-e-1-[2]-3\n\n\t\t\thelper.insertText(\"B\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"e\");\n\t\t\thelper.insertText(\"C\", 0, \"d\");\n\t\t\thelper.insertText(\"C\", 0, \"c\");\n\t\t\thelper.insertText(\"C\", 0, \"b\");\n\t\t\thelper.insertText(\"C\", 0, \"a\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.removeRange(\"B\", 4, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"cde13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"cde13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does obliterate X for all clients\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"DE\");\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"X\");\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not include remote but unacked segments in partial len calculation\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 89-4567-123-X\n\t\t\t// 8-(9-4-w-567-1)-23-Y-X\n\n\t\t\thelper.insertText(\"A\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"4567\");\n\t\t\thelper.insertText(\"B\", 0, \"89\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 1, 7);\n\t\t\thelper.insertText(\"A\", 3, \"w\");\n\t\t\thelper.insertText(\"C\", 3, \"Y\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"823YX\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"823YX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"correctly accounts for overlapping obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"correctly accounts for overlapping obliterate and remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"clones movedClientIds array during insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// the bug found here:\n\t\t\t// the X was skipped over by client `A` because it had already been\n\t\t\t// deleted, so its length at refSeq was 0\n\t\t\t//\n\t\t\t// this was due to the movedClientIds array not being properly cloned\n\t\t\t// when marking obliterated during insert\n\n\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"B\", 2, \"X\");\n\t\t\thelper.obliterateRange(\"A\", 1, 3);\n\t\t\thelper.obliterateRange(\"B\", 1, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AD\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"AD\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"client partial lens consider overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"123\");\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"C\", 4, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AEF13\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"AEF13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AEF13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"client partial lens consider overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AEGX\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AEGX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"tracks obliterate refSeq when acking op for partial len calculation\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// v-----------------------v\n\t\t\t// v--v\n\t\t\t// v--v\n\t\t\t// 6-(345-AB-(CD)-E-(FG)-HI-1)-2\n\n\t\t\thelper.insertText(\"A\", 0, \"12\");\n\t\t\thelper.insertText(\"B\", 0, \"ABCDEFGHI\");\n\t\t\thelper.insertText(\"A\", 0, \"345\");\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.insertText(\"A\", 0, \"6\");\n\t\t\thelper.obliterateRange(\"B\", 3, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"62\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"62\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not have negative len when segment obliterated before insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 1234567-D-C-AB\n\t\t\t// 12-([3-X-45]-67)-D-C-AB\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 0, \"D\");\n\t\t\thelper.insertText(\"A\", 0, \"1234567\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 2, 7);\n\t\t\thelper.removeRange(\"A\", 2, 5);\n\t\t\thelper.insertText(\"C\", 3, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"12B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"12B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"12B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not have negative len when segment obliterated before insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDE-1-[2]-3\n\t\t\t// (A-XX-B)-(CD)-E-1-3\n\n\t\t\thelper.insertText(\"B\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDE\");\n\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"XX\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"E13\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"E13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"E13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes segments between two obliterates with different seq\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 90-8-1234-(5)-67-D-C-B-A\n\t\t\t// 9-(EFG-[0-8-1234-(5)-67)]-D-C-B-A\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"1234567\");\n\t\t\thelper.obliterateRange(\"B\", 4, 5);\n\t\t\thelper.insertText(\"A\", 0, \"8\");\n\t\t\thelper.insertText(\"A\", 0, \"90\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 1, 9);\n\t\t\thelper.insertText(\"A\", 1, \"EFG\");\n\t\t\thelper.obliterateRange(\"A\", 1, 11);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"9DCBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 1, \"12\");\n\t\t\thelper.insertText(\"A\", 0, \"CD\");\n\t\t\thelper.obliterateRange(\"A\", 1, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"C2\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"C2\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"C2\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"considers obliterated local segments as remotely obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// G-(H-F-I-C)-J-DE-A-(B)\n\t\t\t// G-J-(H-F-I-CD)-E\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"C\", 0, \"CDE\");\n\t\t\thelper.insertText(\"B\", 0, \"F\");\n\t\t\thelper.insertText(\"C\", 0, \"GH\");\n\t\t\thelper.obliterateRange(\"C\", 1, 3);\n\t\t\thelper.insertText(\"B\", 1, \"I\");\n\t\t\thelper.insertText(\"C\", 1, \"J\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GJDEA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"GJDEA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses hier block in obliterated when len at ref seq is >0 and len at len seq == 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 2, \"CD\");\n\t\t\thelper.removeRange(\"A\", 1, 3);\n\t\t\thelper.insertText(\"C\", 0, \"12345\");\n\t\t\thelper.insertText(\"B\", 0, \"EFG\");\n\t\t\thelper.insertText(\"B\", 1, \"HIJKL\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 6, 12);\n\t\t\thelper.removeRange(\"A\", 5, 7);\n\t\t\thelper.obliterateRange(\"C\", 7, 9);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), helper.clients.D.getText());\n\t\t\tassert.equal(helper.clients.B.getText(), \"EHIJKAD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses hier block in obliterate when len at ref seq is >0 and len at len seq == 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// [E]-FGH-12-[A]-[B]-CD\n\t\t\t// 3-4-F-[G-(H-1)-2]-CD\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.removeRange(\"B\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"12\");\n\t\t\thelper.insertText(\"A\", 0, \"EFGH\");\n\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 1, 5);\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.insertText(\"A\", 0, \"3\");\n\t\t\thelper.insertText(\"A\", 0, \"4\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"43FBD\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"43FBD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"ignores segments where movedSeq < seq for partial len calculations\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.insertText(\"A\", 0, \"DEF\");\n\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"B\", 0, \"123456\");\n\t\t\thelper.obliterateRange(\"B\", 2, 7);\n\t\t\thelper.insertText(\"A\", 1, \"Y\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 4, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"12BCX\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"12BCX\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"12BCX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"accounts for overlapping obliterates from same client\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"accounts for concurrently obliterated segments from the perspective of the inserting client for partial lengths\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 0, \"1234\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 1, 3);\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.insertText(\"A\", 4, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"1E4CBA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"1E4CBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses segments when there is a local obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"12\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 2, \"C\");\n\t\t\thelper.obliterateRange(\"A\", 0, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"keeps track of all obliterates on a segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// B-A\n\t\t\t// (B-C-(A))\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 1, 2);\n\t\t\t// bug here: because segment A has already been obliterated, we wouldn't\n\t\t\t// mark it obliterated by this op as well, meaning that segments in\n\t\t\t// this range would look to the right and not find a matching move seq\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"C\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"many overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// EF-ABCD\n\t\t\t// (1)-2-((E)-F-A)-B-(C)-D\n\n\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\thelper.insertText(\"B\", 0, \"EF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 3);\n\t\t\thelper.insertText(\"A\", 0, \"12\");\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"2BD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates at start\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 12345-B-A\n\t\t\t// ((1-C-2)-3)-4-D-5-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"A\", 0, \"12345\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"C\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"partial lengths updated when local insert is acked\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// A-BCDEF\n\t\t\t// (A-B-G-C)-D-I-E-H-F\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 1, \"BCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 3);\n\t\t\thelper.insertText(\"A\", 2, \"G\");\n\t\t\thelper.insertText(\"B\", 5, \"H\");\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"DIEHF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"two local obliterates get different seq numbers after ack\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// C-AB\n\t\t\t// (C-A)-D-(B)\n\n\t\t\thelper.insertText(\"C\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\t// bug here: when the op is acked by client C, it would incorrectly give\n\t\t\t// segment B the same movedSeq despite coming from a different op\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 2, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"D\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"D\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"acks remote segment obliterated by local op\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// (D-C-A)-B\n\t\t\t// (D-C-A)-B-E\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\t// bug here: when the op is acked by client B, it wouldn't correctly\n\t\t\t// visit the segment \"C\", leaving the obliterate unacked\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 1, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BE\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"BE\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"skips segments obliterated before refSeq when traversing for insertion\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDE-(A)-B\n\t\t\t// C-(DE-F-(A)-B)\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"CDE\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 4);\n\t\t\t// bug here: when traversing to see if segment should be obliterated after\n\t\t\t// insertion, traversal would stop at segment A because it was obliterated\n\t\t\t// before the refSeq, which made it appear as an un-deleted segment\n\t\t\thelper.insertText(\"B\", 3, \"F\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"C\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"C\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"C\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"applies correct movedSeq when right segment has multiple movedSeqs\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-C-D-(B))\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\t// bug here: for client B, segment B had multiple movedSeqs, and when\n\t\t\t// traversal went to the right and found a matching movedSeq in the movedSeqs\n\t\t\t// array, it selected the lowest seq in the array, which differed from\n\t\t\t// the correct and matching movedSeq\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"takes the correct moved client id when multiple clientIds for right segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-C-D-(B))\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\t// bug here: we would incorrectly take the client id of the first element\n\t\t\t// in the movedClientIds array because we did not take into account the\n\t\t\t// length of _both_ the local and non-local movedSeqs arrays\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"selects clientId if 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-D-E-(C)-B)\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\t// bug here: client id was 0, and the check we used was !clientId, rather\n\t\t\t// than clientId !== undefined\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.insertText(\"A\", 2, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterates unacked segment inside non-leaf-segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGHIJ-E-12345678-D-C-A-K-B\n\t\t\t// FGHIJ-E-12345-(6-[7-L-8-D]-C)-A-K-B\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"12345678\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"C\", 0, \"FGHIJ\");\n\t\t\thelper.insertText(\"A\", 2, \"K\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 12, 15);\n\t\t\t// bug here: when traversing for obliterate, we visit unacked segments\n\t\t\t// within the range, considering their length 0 but still marking them\n\t\t\t// obliterated. if the segment was inside a hiernode whose length was\n\t\t\t// also 0, we would incorrectly skip over the entire hier node, rather\n\t\t\t// than visiting the children segments\n\t\t\thelper.obliterateRange(\"A\", 11, 13);\n\t\t\thelper.insertText(\"B\", 13, \"L\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"FGHIJE12345AKB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"FGHIJE12345AKB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"FGHIJE12345AKB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"tracks length at seq of lower move/remove seq when overlapping\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// H-FG-A-CDE-B\n\t\t\t// (H-F-[G-A)-C-I-D]-E-B\n\n\t\t\thelper.insertText(\"C\", 0, \"AB\");\n\t\t\thelper.insertText(\"C\", 1, \"CDE\");\n\t\t\thelper.insertText(\"B\", 0, \"FG\");\n\t\t\thelper.insertText(\"A\", 0, \"H\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.removeRange(\"B\", 2, 6);\n\t\t\t// bug here: this insert triggers a new chunk to be created. when the\n\t\t\t// partial lengths of the new chunk were calculated, it incorrectly\n\t\t\t// used the removedSeq instead of the moveSeq, despite the latter having\n\t\t\t// occurred prior to the remove\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IEB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"IEB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"IEB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"segment obliterated on insert overlaps with local obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// ((A-C)-B)\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterates entire string when concurrent inserts inside range\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// GT\n\t\t\t// (G-O-S-Y-T)\n\n\t\t\thelper.insertText(\"B\", 0, \"GT\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.insertText(\"C\", 1, \"OY\");\n\t\t\thelper.insertText(\"C\", 2, \"S\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterate ack traverses over non-obliterated remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEFGH-1\n\t\t\t// ABCDE-(F-[G]-2-H)-1\n\t\t\t// ABCDE-(F-[G]-2-H)-1-3\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDEFGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"C\", 6, 7);\n\t\t\thelper.insertText(\"A\", 7, \"2\");\n\t\t\t// obliterate at seq 5 isn't getting acked because it stops traversal\n\t\t\t// at the removed segment, which doesn't have move info\n\t\t\thelper.obliterateRange(\"C\", 5, 7);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 6, \"3\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"ABCDE13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"ABCDE13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate when remove happens last\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGH-E-D-BC-A\n\t\t\t// ([F]-G)-H-E-D-B-I-C-A\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"B\", 0, \"FGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 5, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"HEDBICA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate when remove happens last _and_ partial length already exists\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGH-CDE-B-A\n\t\t\t// [F-(GH)-C]-D-Z-E-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"B\", 0, \"CDE\");\n\t\t\thelper.insertText(\"C\", 0, \"FGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 1, 2);\n\t\t\thelper.removeRange(\"A\", 0, 4);\n\t\t\thelper.insertText(\"A\", 1, \"Z\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DZEBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterate and remove when obliterate is larger than remove and happened last\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// H-CDEFG-B-A\n\t\t\t// (H-C-[D]-E)-F-Z-G-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"A\", 0, \"CDEFG\");\n\t\t\thelper.insertText(\"A\", 0, \"H\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"Z\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"FZGBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"wasMovedOnInsert remains after leaf node is split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CD-B-A\n\t\t\t// I-(C-(G)H-E)-F-D-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"B\", 0, \"CD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"EF\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.insertText(\"A\", 1, \"GH\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IFDBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates, segment is obliterated on insert and by local client\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// DEFG-BC-A\n\t\t\t// v-----------v\n\t\t\t// v-----v\n\t\t\t// (D-(E-H-F)-G)-B-I-C-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"BC\");\n\t\t\thelper.insertText(\"B\", 0, \"DEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.insertText(\"A\", 2, \"H\");\n\t\t\thelper.obliterateRange(\"A\", 0, 5);\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BICA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates and remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGHIJKL-BCDE-A\n\t\t\t// (FGHI-[JK-(L-B)-C]-D)-E-M-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BCDE\");\n\t\t\thelper.insertText(\"A\", 0, \"FGHIJKL\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"B\", 4, 9);\n\t\t\thelper.obliterateRange(\"A\", 6, 8);\n\t\t\thelper.obliterateRange(\"C\", 0, 10);\n\t\t\thelper.insertText(\"C\", 1, \"M\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"EMA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not mark obliterated on insert for non-acked obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDE-B-A\n\t\t\t// I-((C-F)-G-D)-H-E-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"CDE\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 1, \"FG\");\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"A\", 2, \"H\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"C\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IHEBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"partial len isLocal when seq is -1 but moveSeq > -1\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEFG-AB\n\t\t\t// C-((D-I-E)-F)-G-A-H-B\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"B\", 0, \"CDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.insertText(\"B\", 4, \"H\");\n\t\t\thelper.insertText(\"A\", 2, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"CGAHB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterated on insert by overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// B-DEFG-C-A\n\t\t\t// ((B-D-H-E)-F-I-G-C)-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 0, \"BC\");\n\t\t\thelper.insertText(\"A\", 1, \"DEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 6);\n\t\t\thelper.obliterateRange(\"A\", 0, 3);\n\t\t\thelper.insertText(\"C\", 2, \"H\");\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"A\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEF\n\t\t\t// v-------------v\n\t\t\t// v-----------v\n\t\t\t// v-------v\n\t\t\t// I-((AB-(C-G)-H-D)-E)-F\n\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.obliterateRange(\"C\", 2, 5);\n\t\t\thelper.insertText(\"A\", 3, \"GH\");\n\t\t\thelper.insertText(\"C\", 0, \"I\");\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEF-AB\n\t\t\t// v-------------------v\n\t\t\t// v---------v\n\t\t\t// v-v\n\t\t\t// ((C-(G)-H-D)-E-I-F-A)-B\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"C\", 0, \"CDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 5);\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"A\", 1, \"GH\");\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate, local obliterate does not have a remote obliterated len\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// v-v------v-v\n\t\t\t// G-(H-[F]-E)-D-[A]-B-I-C\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"A\", 0, \"F\");\n\t\t\thelper.removeRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"B\", 0, \"GH\");\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GDBIC\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"triple overlapping obliterate and overlapping remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// I-H-BCDEFG-A\n\t\t\t// v------------v\n\t\t\t// v-------v\n\t\t\t// v-v\n\t\t\t// v-------------------------v\n\t\t\t// [[I]-H-BCD-(E-(F-(J)-G))-A]\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BCDEFG\");\n\t\t\thelper.insertText(\"B\", 0, \"H\");\n\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 6, 8);\n\t\t\thelper.obliterateRange(\"A\", 5, 8);\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"C\", 6, \"J\");\n\t\t\thelper.obliterateRange(\"C\", 6, 7);\n\t\t\thelper.removeRange(\"A\", 0, 6);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"triple overlapping obliterate with one being local\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEFG-B-A\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// v------v\n\t\t\t// J-(CD-((E-H)-F))-I-G-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"CDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 2, 4);\n\t\t\thelper.insertText(\"C\", 3, \"H\");\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.insertText(\"B\", 0, \"J\");\n\t\t\thelper.obliterateRange(\"B\", 3, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.C.getText(), \"JIGBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterate ack traversal is not stopped by moved segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCD\n\t\t\t// (A-(B)-E-C)-D-F\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"C\", 2, \"E\");\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 1, \"F\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DF\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"DF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates partial lengths for segments when doing obliterate ack traversal\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// O-JKLMN-FGHI-E-CD-AB\n\t\t\t// v-v---v-----v\n\t\t\t// (P-O-JKLMN-FG-[H]-Q-[I-E-C]-D-A)-B\n\t\t\t// (P-O-JKLMN-FG-[H]-Q-[I-E-C]-D-A)-B-R\n\n\t\t\t// problematic segment: H-Q-I-E\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"CD\");\n\t\t\thelper.insertText(\"A\", 0, \"E\");\n\t\t\thelper.insertText(\"A\", 0, \"FGHI\");\n\t\t\thelper.insertText(\"C\", 0, \"JKLMN\");\n\t\t\thelper.insertText(\"B\", 0, \"O\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 0, \"P\");\n\t\t\thelper.insertText(\"B\", 9, \"Q\");\n\t\t\thelper.removeRange(\"A\", 9, 13);\n\t\t\thelper.obliterateRange(\"A\", 0, 11);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"R\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BR\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\t// fails only for incremental\n\t\tit(\"combines remote obliterated length \", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// R-XYZ12-STUVW-LMNOP-DEFGHIJK-A-34567890-Q-BC\n\t\t\t// v---------------v------------v------v--------v------------v\n\t\t\t// [R-XYZ12-STUVW-L]-abcdefghij-[MNOP-D]-klmnop-[EFGHIJK-A-34]-5-(6-x-7)-890-Q-BC\n\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// a-T-b-S-c-[def]-ghij-k-Q-l-R-mno-[p-5-8-[9]-0-Q-B]-C\n\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// segment is R-mno-[p-5-8-[9]-0-Q-B]-C\n\t\t\t// v-------------------------------v\n\t\t\t// v--------v\n\t\t\t// v------------v\n\t\t\t// R-mno-[p-[EFGHIJK-A-34]-5-(6-x-7)-8-[9]-0-Q-B]-C\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.insertText(\"C\", 0, \"DEFGHIJK\");\n\t\t\thelper.insertText(\"C\", 0, \"LMNOP\");\n\t\t\thelper.insertText(\"A\", 1, \"Q\");\n\t\t\thelper.insertText(\"B\", 0, \"RSTUVW\");\n\t\t\thelper.insertText(\"B\", 1, \"XYZ12\");\n\t\t\thelper.insertText(\"A\", 1, \"34567890\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 29, \"x\");\n\t\t\thelper.removeRange(\"B\", 0, 27);\n\t\t\thelper.insertText(\"A\", 12, \"abcdefghij\");\n\t\t\thelper.obliterateRange(\"A\", 38, 40);\n\t\t\thelper.insertText(\"C\", 17, \"klmnop\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"abcdefghijklmnop5890QBC\");\n\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"B\", 3, 6);\n\t\t\thelper.insertText(\"C\", 11, \"Q\");\n\t\t\thelper.insertText(\"B\", 9, \"R\");\n\t\t\thelper.insertText(\"B\", 2, \"S\");\n\t\t\thelper.removeRange(\"C\", 19, 23);\n\t\t\thelper.obliterateRange(\"B\", 14, 18);\n\t\t\thelper.insertText(\"B\", 1, \"T\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"aTbScghijkQlRmnoC\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"three obliterates on same segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// A\n\t\t\t// (C-B-D-((A)))\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tdescribe(\"incremental partial length updates\", () => {\n\t\t\tit(\"obliterates concurrently inserted segment\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// (C-B-A)\n\n\t\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 2 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// (C-B-D-A)\n\n\t\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\t\thelper.insertText(\"B\", 0, \"C\");\n\t\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 4 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// I-F-(G-D-H-E-C-A)-B\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"B\", 0, \"C\");\n\t\t\t\thelper.insertText(\"A\", 0, \"DE\");\n\t\t\t\thelper.insertText(\"B\", 0, \"FG\");\n\t\t\t\thelper.obliterateRange(\"B\", 1, 4);\n\t\t\t\thelper.insertText(\"A\", 1, \"H\");\n\t\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IFB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 3 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// I-G-(H-D-F-E-B)-C-A\n\n\t\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\t\thelper.insertText(\"A\", 0, \"DE\");\n\t\t\t\thelper.insertText(\"A\", 1, \"F\");\n\t\t\t\thelper.insertText(\"B\", 0, \"GH\");\n\t\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IGCA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"overlapping remove + obliterate, remove happened first\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// D-EFG-B-H-C-A\n\t\t\t\t// I-D-([E]-F)-G-B-H-C-A\n\n\t\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\t\thelper.insertText(\"C\", 0, \"DEFG\");\n\t\t\t\thelper.insertText(\"B\", 1, \"H\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\t\thelper.obliterateRange(\"A\", 1, 3);\n\t\t\t\thelper.insertText(\"A\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IDGBHCA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"overlapping remove + obliterate, remove happened last\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// DEFGH-C-B-A\n\t\t\t\t// [D]-[E-(F)-G]-H-C-B-A\n\n\t\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\t\thelper.insertText(\"B\", 0, \"DEFGH\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\t\thelper.removeRange(\"A\", 1, 4);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"HCBA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"segment inside locally obliterated segment group is split\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// CDEF-AB\n\t\t\t\t// [C]-DE-(F-(G)-H-A)-B\n\t\t\t\t// [C]-DE-(F-(G)-H-A)-(B)\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"B\", 0, \"CDEF\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 3, \"GH\");\n\t\t\t\thelper.obliterateRange(\"C\", 3, 4);\n\t\t\t\thelper.obliterateRange(\"A\", 3, 5);\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"DE\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"continues traversal past locally removed segment inserted before first obliterate\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// ABC\n\t\t\t\t// (E-D-(A)-[B]-C)\n\n\t\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 0, \"E\");\n\t\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"keeps track of remote obliterated length when hier node contains hier nodes\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// LMNO-HIJ-E-K-FG-D-C-AB\n\t\t\t\t// lmnopq-L-[M]-NO-H-ghijk-I-(J-E-K-FG-D-C-A-a)-bc-ef-d-B\n\t\t\t\t// v--------------------------------------v\n\t\t\t\t// v-------------------v\n\t\t\t\t// r-l-x-mn-[opq-L-[M]-NO-H-gh-s]-t-(u-i-[j]-k-I-(J-E-K-FG-D-C-A-a)-b-v-c-e)-f-d-B\n\n\t\t\t\t// bad segment: (I-(J-E-K-FG-D-C-A-a)-b-v-c-e)-f-d-B\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\t\thelper.insertText(\"A\", 0, \"D\");\n\t\t\t\thelper.insertText(\"B\", 0, \"EFG\");\n\t\t\t\thelper.insertText(\"C\", 0, \"HIJ\");\n\t\t\t\thelper.insertText(\"B\", 1, \"K\");\n\t\t\t\thelper.insertText(\"B\", 0, \"LMNO\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\t\thelper.insertText(\"A\", 13, \"abcd\");\n\t\t\t\thelper.obliterateRange(\"A\", 5, 14);\n\t\t\t\thelper.insertText(\"A\", 7, \"ef\"); // seq: 11, len: 7\n\t\t\t\thelper.insertText(\"B\", 5, \"ghijk\");\n\t\t\t\thelper.insertText(\"C\", 0, \"lmnopq\"); // seq: 13, len: 7\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"lmnopqLNOHghijkIbcefdB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.insertText(\"A\", 0, \"r\");\n\t\t\t\thelper.insertText(\"B\", 12, \"stu\");\n\t\t\t\thelper.insertText(\"A\", 18, \"v\"); // seq: 16, len: 8\n\t\t\t\thelper.obliterateRange(\"B\", 14, 22); // seq: 17, len: 3\n\t\t\t\thelper.removeRange(\"B\", 3, 13); // seq: 18, len: 3\n\t\t\t\thelper.removeRange(\"A\", 14, 15); // seq: 19, len: 3\n\t\t\t\thelper.insertText(\"B\", 1, \"x\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"rlxmntfdB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"combines remote obliterated length for parent node of tree with depth >=3\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// VWXYZ0-(K)-[L]-M-[N]-O-EFGHIJ-[A]-B-P-TU-QRS-CD\n\t\t\t\t// v-v------v------------v\n\t\t\t\t// v--------------------v\n\t\t\t\t// v----v---------v-v-----v-----v------------------------------v-v\n\t\t\t\t// V-c-W-[XYZ0]-(K)-[L]-[M]-[N]-[O-EFG]-[H]-a-[b-[IJ-[A]-B-P-T]-U-Q]-[R]-S-C-d-f-e-D\n\n\t\t\t\t// v-v------v-v---v-----------v\n\t\t\t\t// v-------------------------v\n\t\t\t\t// v------v---------v-v-----v---v---v--v-----------------------------------v-v\n\t\t\t\t// v---------v\n\t\t\t\t// j-i-(V-c-W-[XY)-Z0]-(K)-[L]-[M]-[N]-[O-E]-h-[FG]-[H]-a-[b-[I]-g-[J-[A]-B-P-T]-U-Q]-[R]-S-C-d-f-e-D\n\n\t\t\t\t// problem segment: j-i-(V-c-W-[XY)-Z0]-(K)-[L]-[M]-[N]-[O-E]-h-[FG]-[H]-a-[b]\n\t\t\t\t// specifically: j-(V-c-W\n\n\t\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"B\", 0, \"EFGHIJ\");\n\t\t\t\thelper.insertText(\"A\", 0, \"KLMNO\");\n\t\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 1, \"PQRS\");\n\t\t\t\thelper.insertText(\"C\", 2, \"TU\");\n\t\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\t\thelper.insertText(\"A\", 0, \"VWXYZ0\"); // seq: 10, len: 2\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"VWXYZ0MOEFGHIJBPTUQRSCD\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.insertText(\"C\", 12, \"ab\");\n\t\t\t\thelper.removeRange(\"B\", 11, 17);\n\t\t\t\thelper.removeRange(\"C\", 13, 21);\n\t\t\t\thelper.insertText(\"B\", 1, \"c\"); // seq: 14, len: 3\n\t\t\t\thelper.insertText(\"C\", 16, \"de\");\n\t\t\t\thelper.insertText(\"C\", 17, \"f\");\n\t\t\t\thelper.removeRange(\"B\", 3, 15);\n\t\t\t\thelper.insertText(\"A\", 13, \"g\");\n\t\t\t\thelper.insertText(\"A\", 9, \"h\");\n\t\t\t\thelper.obliterateRange(\"C\", 0, 4); // seq: 20, len: 0\n\t\t\t\thelper.insertText(\"C\", 0, \"i\");\n\t\t\t\thelper.insertText(\"A\", 0, \"j\"); // seq: 22, len: 1\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"jihagSCdfeD\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\t\t});\n\t});\n}\n"]}
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=obliterate.partialLength.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obliterate.partialLength.spec.d.ts","sourceRoot":"","sources":["../../src/test/obliterate.partialLength.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+ /*!
3
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const assert_1 = require("assert");
8
+ const ops_1 = require("../ops");
9
+ const partialLengths_1 = require("../partialLengths");
10
+ const testClient_1 = require("./testClient");
11
+ const testUtils_1 = require("./testUtils");
12
+ describe("obliterate partial lengths", () => {
13
+ let client;
14
+ let refSeq;
15
+ const localClientId = 17;
16
+ const remoteClientId = 18;
17
+ beforeEach(() => {
18
+ partialLengths_1.PartialSequenceLengths.options.verifier = partialLengths_1.verify;
19
+ partialLengths_1.PartialSequenceLengths.options.verifyExpected = partialLengths_1.verifyExpected;
20
+ client = new testClient_1.TestClient({
21
+ mergeTreeEnableObliterate: true,
22
+ });
23
+ client.startOrUpdateCollaboration("local");
24
+ for (const char of "hello world") {
25
+ client.applyMsg(client.makeOpMessage(client.insertTextLocal(client.getLength(), char), client.getCurrentSeq() + 1));
26
+ }
27
+ assert_1.strict.equal(client.getText(), "hello world");
28
+ refSeq = client.getCurrentSeq();
29
+ });
30
+ afterEach(() => {
31
+ partialLengths_1.PartialSequenceLengths.options.verifier = undefined;
32
+ });
33
+ it("removes text", () => {
34
+ assert_1.strict.equal(client.getText(), "hello world");
35
+ const localObliterateOp = client.obliterateRangeLocal(0, "hello world".length);
36
+ assert_1.strict.equal(client.getText(), "");
37
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [
38
+ { seq: refSeq, len: "hello world".length, localSeq: refSeq },
39
+ { seq: refSeq + 1, len: "".length, localSeq: refSeq + 1 },
40
+ ]);
41
+ client.applyMsg(client.makeOpMessage(localObliterateOp, refSeq + 1));
42
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [
43
+ { seq: refSeq, len: "hello world".length },
44
+ { seq: refSeq + 1, len: "".length },
45
+ ]);
46
+ });
47
+ it("correctly applies local remove after local obliterate", () => {
48
+ const localObliterateOp = client.obliterateRangeLocal(0, "hello ".length);
49
+ const localRemoveOp = client.removeRangeLocal(0, "world".length);
50
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [
51
+ { seq: refSeq, len: "hello world".length },
52
+ { seq: refSeq + 1, len: "world".length, localSeq: refSeq + 1 },
53
+ { seq: refSeq + 2, len: "".length, localSeq: refSeq + 2 },
54
+ ]);
55
+ client.applyMsg(client.makeOpMessage(localObliterateOp, refSeq + 1));
56
+ client.applyMsg(client.makeOpMessage(localRemoveOp, refSeq + 2));
57
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [
58
+ { seq: refSeq, len: "hello world".length },
59
+ { seq: refSeq + 1, len: "world".length },
60
+ { seq: refSeq + 2, len: "".length },
61
+ ]);
62
+ });
63
+ it("is correct for different heights", () => {
64
+ client = new testClient_1.TestClient({
65
+ mergeTreeEnableObliterate: true,
66
+ });
67
+ client.startOrUpdateCollaboration("local");
68
+ for (let i = 0; i < 100; i++) {
69
+ (0, testUtils_1.insertText)({
70
+ mergeTree: client.mergeTree,
71
+ pos: 0,
72
+ refSeq: i,
73
+ clientId: localClientId,
74
+ seq: i + 1,
75
+ text: "a",
76
+ props: undefined,
77
+ opArgs: { op: { type: ops_1.MergeTreeDeltaType.INSERT } },
78
+ });
79
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [{ seq: i + 1, len: i + 1 }]);
80
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [{ seq: i + 1, len: i + 1 }]);
81
+ refSeq += 1;
82
+ }
83
+ const localObliterateOp = client.obliterateRangeLocal(50, 100);
84
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree);
85
+ client.applyMsg(client.makeOpMessage(localObliterateOp, refSeq + 1));
86
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree);
87
+ });
88
+ describe("overlapping remove+obliterate", () => {
89
+ it("passes for local remove and remote obliterate", () => {
90
+ const localRemoveOp = client.removeRangeLocal(0, "hello ".length);
91
+ client.obliterateRange({
92
+ start: 0,
93
+ end: "hello ".length,
94
+ refSeq,
95
+ clientId: remoteClientId,
96
+ seq: refSeq + 1,
97
+ overwrite: false,
98
+ opArgs: undefined,
99
+ });
100
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [
101
+ { seq: refSeq, len: "hello world".length, localSeq: refSeq },
102
+ { seq: refSeq + 1, len: "world".length, localSeq: refSeq + 1 },
103
+ ]);
104
+ client.applyMsg(client.makeOpMessage(localRemoveOp, refSeq + 1));
105
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [
106
+ { seq: refSeq, len: "hello world".length },
107
+ { seq: refSeq + 1, len: "world".length, localSeq: refSeq + 1 },
108
+ ], refSeq);
109
+ });
110
+ it("passes for remote remove and local obliterate", () => {
111
+ client.removeRangeRemote(0, "hello ".length, refSeq + 1, refSeq, client.getLongClientId(remoteClientId));
112
+ const localObliterateOp = client.obliterateRangeLocal(0, "hello ".length);
113
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [
114
+ { seq: refSeq, len: "hello world".length, localSeq: refSeq },
115
+ { seq: refSeq + 1, len: "world".length, localSeq: refSeq + 1 },
116
+ { seq: refSeq + 2, len: "world".length, localSeq: refSeq + 2 },
117
+ ]);
118
+ client.applyMsg(client.makeOpMessage(localObliterateOp, refSeq + 2));
119
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [
120
+ { seq: refSeq, len: "hello world".length },
121
+ { seq: refSeq + 1, len: "hello world".length },
122
+ { seq: refSeq + 2, len: "world".length },
123
+ ]);
124
+ });
125
+ it("passes for remote remove and remote obliterate", () => {
126
+ client.removeRangeRemote(0, "hello ".length, refSeq + 1, refSeq, client.getLongClientId(remoteClientId));
127
+ client.obliterateRange({
128
+ start: 0,
129
+ end: "hello ".length,
130
+ refSeq,
131
+ clientId: remoteClientId + 1,
132
+ seq: refSeq + 2,
133
+ overwrite: false,
134
+ opArgs: undefined,
135
+ });
136
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [
137
+ { seq: refSeq, len: "hello world".length },
138
+ { seq: refSeq + 1, len: "hello world".length },
139
+ { seq: refSeq + 2, len: "world".length },
140
+ ]);
141
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [
142
+ { seq: refSeq, len: "hello world".length },
143
+ { seq: refSeq + 1, len: "hello world".length },
144
+ { seq: refSeq + 2, len: "world".length },
145
+ ], 0);
146
+ (0, testUtils_1.validatePartialLengths)(remoteClientId + 1, client.mergeTree, [
147
+ { seq: refSeq, len: "hello world".length },
148
+ { seq: refSeq + 1, len: "hello world".length },
149
+ { seq: refSeq + 2, len: "world".length },
150
+ ], 0);
151
+ });
152
+ });
153
+ describe("overlapping obliterate+obliterate", () => {
154
+ it("passes for local obliterate and remote obliterate", () => {
155
+ const localObliterateOp = client.obliterateRangeLocal(0, "hello ".length);
156
+ client.obliterateRange({
157
+ start: 0,
158
+ end: "hello ".length,
159
+ refSeq,
160
+ clientId: remoteClientId,
161
+ seq: refSeq + 1,
162
+ overwrite: false,
163
+ opArgs: undefined,
164
+ });
165
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [
166
+ { seq: refSeq, len: "hello world".length },
167
+ { seq: refSeq + 1, len: "world".length },
168
+ { seq: refSeq + 2, len: "world".length },
169
+ ]);
170
+ client.applyMsg(client.makeOpMessage(localObliterateOp, refSeq + 2));
171
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [
172
+ { seq: refSeq, len: "hello world".length },
173
+ { seq: refSeq + 1, len: "world".length, localSeq: refSeq + 1 },
174
+ { seq: refSeq + 2, len: "world".length, localSeq: refSeq + 2 },
175
+ ], refSeq);
176
+ });
177
+ it("passes for remote obliterate and local obliterate", () => {
178
+ client.obliterateRange({
179
+ start: 0,
180
+ end: "hello ".length,
181
+ refSeq,
182
+ clientId: remoteClientId,
183
+ seq: refSeq + 1,
184
+ overwrite: false,
185
+ opArgs: undefined,
186
+ });
187
+ const localObliterateOp = client.obliterateRangeLocal(0, "hello".length);
188
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [
189
+ { seq: refSeq, len: "hello world".length },
190
+ { seq: refSeq + 1, len: "world".length },
191
+ { seq: refSeq + 2, len: "world".length },
192
+ ]);
193
+ client.applyMsg(client.makeOpMessage(localObliterateOp, refSeq + 2));
194
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [
195
+ { seq: refSeq, len: "hello world".length, localSeq: refSeq },
196
+ { seq: refSeq + 1, len: "world".length, localSeq: refSeq + 1 },
197
+ { seq: refSeq + 2, len: "".length, localSeq: refSeq + 2 },
198
+ ], refSeq);
199
+ });
200
+ });
201
+ describe("obliterate with concurrent inserts", () => {
202
+ it("obliterates when concurrent insert in middle of string", () => {
203
+ const localObliterateOp = client.obliterateRangeLocal(0, client.getLength());
204
+ (0, testUtils_1.insertText)({
205
+ mergeTree: client.mergeTree,
206
+ pos: "hello".length,
207
+ refSeq,
208
+ clientId: remoteClientId,
209
+ seq: refSeq + 1,
210
+ text: "more ",
211
+ props: undefined,
212
+ opArgs: { op: { type: ops_1.MergeTreeDeltaType.INSERT } },
213
+ });
214
+ assert_1.strict.equal(client.getText(), "");
215
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [
216
+ { seq: refSeq, len: "hello world".length },
217
+ { seq: refSeq + 1, len: "hellomore world".length },
218
+ { seq: refSeq + 1, len: "".length, localSeq: refSeq + 1 },
219
+ ]);
220
+ client.applyMsg(client.makeOpMessage(localObliterateOp, refSeq + 2));
221
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [
222
+ { seq: refSeq, len: "hello world".length },
223
+ { seq: refSeq + 1, len: "hellomore world".length },
224
+ { seq: refSeq + 2, len: "".length, localSeq: refSeq + 2 },
225
+ ], refSeq);
226
+ });
227
+ it("obliterate does not affect concurrent insert at start of string", () => {
228
+ const localObliterateOp = client.obliterateRangeLocal(0, client.getLength());
229
+ (0, testUtils_1.insertText)({
230
+ mergeTree: client.mergeTree,
231
+ pos: 0,
232
+ refSeq,
233
+ clientId: remoteClientId,
234
+ seq: refSeq + 1,
235
+ text: "more ",
236
+ props: undefined,
237
+ opArgs: { op: { type: ops_1.MergeTreeDeltaType.INSERT } },
238
+ });
239
+ assert_1.strict.equal(client.getText(), "more ");
240
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [
241
+ { seq: refSeq, len: "hello world".length },
242
+ { seq: refSeq + 1, len: "more hello world".length },
243
+ { seq: refSeq + 1, len: "more ".length, localSeq: refSeq + 1 },
244
+ ]);
245
+ client.applyMsg(client.makeOpMessage(localObliterateOp, refSeq + 2));
246
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [
247
+ { seq: refSeq, len: "hello world".length },
248
+ { seq: refSeq + 1, len: "more hello world".length },
249
+ { seq: refSeq + 2, len: "more ".length },
250
+ ], refSeq);
251
+ });
252
+ it("obliterate does not affect concurrent insert at end of string", () => {
253
+ const localObliterateOp = client.obliterateRangeLocal(0, client.getLength());
254
+ (0, testUtils_1.insertText)({
255
+ mergeTree: client.mergeTree,
256
+ pos: "hello world".length,
257
+ refSeq,
258
+ clientId: remoteClientId,
259
+ seq: refSeq + 1,
260
+ text: "more ",
261
+ props: undefined,
262
+ opArgs: { op: { type: ops_1.MergeTreeDeltaType.INSERT } },
263
+ });
264
+ assert_1.strict.equal(client.getText(), "more ");
265
+ (0, testUtils_1.validatePartialLengths)(localClientId, client.mergeTree, [
266
+ { seq: refSeq, len: "hello world".length },
267
+ { seq: refSeq + 1, len: "hello worldmore ".length },
268
+ { seq: refSeq + 1, len: "more ".length, localSeq: refSeq + 1 },
269
+ ]);
270
+ client.applyMsg(client.makeOpMessage(localObliterateOp, refSeq + 2));
271
+ (0, testUtils_1.validatePartialLengths)(remoteClientId, client.mergeTree, [
272
+ { seq: refSeq, len: "hello world".length },
273
+ { seq: refSeq + 1, len: "hello worldmore ".length },
274
+ { seq: refSeq + 2, len: "more ".length },
275
+ ], refSeq);
276
+ });
277
+ });
278
+ });
279
+ //# sourceMappingURL=obliterate.partialLength.spec.js.map