@fluidframework/sequence 2.0.0-rc.1.0.6 → 2.0.0-rc.2.0.1

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 (379) hide show
  1. package/{.eslintrc.js → .eslintrc.cjs} +4 -1
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +8 -0
  4. package/README.md +2 -2
  5. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  6. package/api-extractor.json +1 -1
  7. package/api-report/sequence.api.md +15 -27
  8. package/dist/defaultMap.d.ts +10 -16
  9. package/dist/defaultMap.d.ts.map +1 -1
  10. package/dist/defaultMap.js +73 -70
  11. package/dist/defaultMap.js.map +1 -1
  12. package/dist/defaultMapInterfaces.d.ts +1 -8
  13. package/dist/defaultMapInterfaces.d.ts.map +1 -1
  14. package/dist/defaultMapInterfaces.js.map +1 -1
  15. package/dist/index.d.ts +11 -11
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +42 -42
  18. package/dist/index.js.map +1 -1
  19. package/dist/intervalCollection.d.ts +21 -15
  20. package/dist/intervalCollection.d.ts.map +1 -1
  21. package/dist/intervalCollection.js +59 -110
  22. package/dist/intervalCollection.js.map +1 -1
  23. package/dist/intervalIndex/endpointInRangeIndex.d.ts +3 -3
  24. package/dist/intervalIndex/endpointInRangeIndex.d.ts.map +1 -1
  25. package/dist/intervalIndex/endpointInRangeIndex.js +8 -8
  26. package/dist/intervalIndex/endpointInRangeIndex.js.map +1 -1
  27. package/dist/intervalIndex/endpointIndex.d.ts +3 -3
  28. package/dist/intervalIndex/endpointIndex.d.ts.map +1 -1
  29. package/dist/intervalIndex/endpointIndex.js +4 -4
  30. package/dist/intervalIndex/endpointIndex.js.map +1 -1
  31. package/dist/intervalIndex/idIntervalIndex.d.ts +2 -2
  32. package/dist/intervalIndex/idIntervalIndex.d.ts.map +1 -1
  33. package/dist/intervalIndex/idIntervalIndex.js +2 -2
  34. package/dist/intervalIndex/idIntervalIndex.js.map +1 -1
  35. package/dist/intervalIndex/index.d.ts +8 -8
  36. package/dist/intervalIndex/index.d.ts.map +1 -1
  37. package/dist/intervalIndex/index.js +16 -16
  38. package/dist/intervalIndex/index.js.map +1 -1
  39. package/dist/intervalIndex/intervalIndex.d.ts +1 -1
  40. package/dist/intervalIndex/intervalIndex.d.ts.map +1 -1
  41. package/dist/intervalIndex/intervalIndex.js.map +1 -1
  42. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts +7 -10
  43. package/dist/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -1
  44. package/dist/intervalIndex/overlappingIntervalsIndex.js +9 -12
  45. package/dist/intervalIndex/overlappingIntervalsIndex.js.map +1 -1
  46. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts +2 -2
  47. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -1
  48. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js +7 -7
  49. package/dist/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -1
  50. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts +2 -2
  51. package/dist/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -1
  52. package/dist/intervalIndex/sequenceIntervalIndexes.js.map +1 -1
  53. package/dist/intervalIndex/startpointInRangeIndex.d.ts +3 -3
  54. package/dist/intervalIndex/startpointInRangeIndex.d.ts.map +1 -1
  55. package/dist/intervalIndex/startpointInRangeIndex.js +8 -8
  56. package/dist/intervalIndex/startpointInRangeIndex.js.map +1 -1
  57. package/dist/intervalTree.d.ts +1 -1
  58. package/dist/intervalTree.d.ts.map +1 -1
  59. package/dist/intervalTree.js.map +1 -1
  60. package/dist/intervals/index.d.ts +3 -3
  61. package/dist/intervals/index.d.ts.map +1 -1
  62. package/dist/intervals/index.js +16 -16
  63. package/dist/intervals/index.js.map +1 -1
  64. package/dist/intervals/interval.d.ts +2 -2
  65. package/dist/intervals/interval.d.ts.map +1 -1
  66. package/dist/intervals/interval.js +2 -2
  67. package/dist/intervals/interval.js.map +1 -1
  68. package/dist/intervals/intervalUtils.d.ts +3 -3
  69. package/dist/intervals/intervalUtils.d.ts.map +1 -1
  70. package/dist/intervals/intervalUtils.js +1 -1
  71. package/dist/intervals/intervalUtils.js.map +1 -1
  72. package/dist/intervals/sequenceInterval.d.ts +2 -2
  73. package/dist/intervals/sequenceInterval.d.ts.map +1 -1
  74. package/dist/intervals/sequenceInterval.js +22 -23
  75. package/dist/intervals/sequenceInterval.js.map +1 -1
  76. package/dist/localValues.d.ts +2 -2
  77. package/dist/localValues.d.ts.map +1 -1
  78. package/dist/localValues.js.map +1 -1
  79. package/dist/package.json +3 -0
  80. package/dist/packageVersion.d.ts +1 -1
  81. package/dist/packageVersion.js +1 -1
  82. package/dist/packageVersion.js.map +1 -1
  83. package/dist/revertibles.d.ts +12 -12
  84. package/dist/revertibles.d.ts.map +1 -1
  85. package/dist/revertibles.js +26 -26
  86. package/dist/revertibles.js.map +1 -1
  87. package/dist/sequence-alpha.d.ts +167 -13
  88. package/dist/sequence-beta.d.ts +2 -0
  89. package/dist/sequence-public.d.ts +2 -0
  90. package/dist/sequence-untrimmed.d.ts +68 -14
  91. package/dist/sequence.d.ts +43 -5
  92. package/dist/sequence.d.ts.map +1 -1
  93. package/dist/sequence.js +98 -29
  94. package/dist/sequence.js.map +1 -1
  95. package/dist/sequenceFactory.d.ts +4 -1
  96. package/dist/sequenceFactory.d.ts.map +1 -1
  97. package/dist/sequenceFactory.js +8 -5
  98. package/dist/sequenceFactory.js.map +1 -1
  99. package/dist/sharedIntervalCollection.d.ts +2 -2
  100. package/dist/sharedIntervalCollection.d.ts.map +1 -1
  101. package/dist/sharedIntervalCollection.js +5 -5
  102. package/dist/sharedIntervalCollection.js.map +1 -1
  103. package/dist/sharedSequence.d.ts +1 -1
  104. package/dist/sharedSequence.d.ts.map +1 -1
  105. package/dist/sharedSequence.js +2 -2
  106. package/dist/sharedSequence.js.map +1 -1
  107. package/dist/sharedString.d.ts +2 -2
  108. package/dist/sharedString.d.ts.map +1 -1
  109. package/dist/sharedString.js +6 -6
  110. package/dist/sharedString.js.map +1 -1
  111. package/dist/tsdoc-metadata.json +1 -1
  112. package/lib/{defaultMap.d.mts → defaultMap.d.ts} +11 -17
  113. package/lib/defaultMap.d.ts.map +1 -0
  114. package/lib/{defaultMap.mjs → defaultMap.js} +72 -69
  115. package/lib/defaultMap.js.map +1 -0
  116. package/lib/{defaultMapInterfaces.d.mts → defaultMapInterfaces.d.ts} +2 -9
  117. package/lib/defaultMapInterfaces.d.ts.map +1 -0
  118. package/lib/{defaultMapInterfaces.mjs → defaultMapInterfaces.js} +1 -1
  119. package/lib/defaultMapInterfaces.js.map +1 -0
  120. package/lib/{index.d.mts → index.d.ts} +24 -12
  121. package/lib/index.d.ts.map +1 -0
  122. package/lib/{index.mjs → index.js} +11 -11
  123. package/lib/index.js.map +1 -0
  124. package/lib/{intervalCollection.d.mts → intervalCollection.d.ts} +22 -16
  125. package/lib/intervalCollection.d.ts.map +1 -0
  126. package/lib/{intervalCollection.mjs → intervalCollection.js} +23 -74
  127. package/lib/intervalCollection.js.map +1 -0
  128. package/lib/intervalIndex/{endpointInRangeIndex.d.mts → endpointInRangeIndex.d.ts} +4 -4
  129. package/lib/intervalIndex/endpointInRangeIndex.d.ts.map +1 -0
  130. package/lib/intervalIndex/{endpointInRangeIndex.mjs → endpointInRangeIndex.js} +3 -3
  131. package/lib/intervalIndex/endpointInRangeIndex.js.map +1 -0
  132. package/lib/intervalIndex/{endpointIndex.d.mts → endpointIndex.d.ts} +4 -4
  133. package/lib/intervalIndex/endpointIndex.d.ts.map +1 -0
  134. package/lib/intervalIndex/{endpointIndex.mjs → endpointIndex.js} +2 -2
  135. package/lib/intervalIndex/endpointIndex.js.map +1 -0
  136. package/lib/intervalIndex/{idIntervalIndex.d.mts → idIntervalIndex.d.ts} +3 -3
  137. package/lib/intervalIndex/idIntervalIndex.d.ts.map +1 -0
  138. package/lib/intervalIndex/{idIntervalIndex.mjs → idIntervalIndex.js} +2 -2
  139. package/lib/intervalIndex/idIntervalIndex.js.map +1 -0
  140. package/lib/intervalIndex/{index.d.mts → index.d.ts} +9 -9
  141. package/lib/intervalIndex/index.d.ts.map +1 -0
  142. package/lib/intervalIndex/{index.mjs → index.js} +7 -7
  143. package/lib/intervalIndex/index.js.map +1 -0
  144. package/lib/intervalIndex/{intervalIndex.d.mts → intervalIndex.d.ts} +2 -2
  145. package/lib/intervalIndex/intervalIndex.d.ts.map +1 -0
  146. package/lib/intervalIndex/{intervalIndex.mjs → intervalIndex.js} +1 -1
  147. package/lib/intervalIndex/intervalIndex.js.map +1 -0
  148. package/lib/intervalIndex/{intervalIndexUtils.d.mts → intervalIndexUtils.d.ts} +1 -1
  149. package/lib/intervalIndex/intervalIndexUtils.d.ts.map +1 -0
  150. package/lib/intervalIndex/{intervalIndexUtils.mjs → intervalIndexUtils.js} +1 -1
  151. package/lib/intervalIndex/intervalIndexUtils.js.map +1 -0
  152. package/lib/intervalIndex/{overlappingIntervalsIndex.d.mts → overlappingIntervalsIndex.d.ts} +8 -11
  153. package/lib/intervalIndex/overlappingIntervalsIndex.d.ts.map +1 -0
  154. package/lib/intervalIndex/{overlappingIntervalsIndex.mjs → overlappingIntervalsIndex.js} +5 -8
  155. package/lib/intervalIndex/overlappingIntervalsIndex.js.map +1 -0
  156. package/lib/intervalIndex/{overlappingSequenceIntervalsIndex.d.mts → overlappingSequenceIntervalsIndex.d.ts} +3 -3
  157. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.ts.map +1 -0
  158. package/lib/intervalIndex/{overlappingSequenceIntervalsIndex.mjs → overlappingSequenceIntervalsIndex.js} +3 -3
  159. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.js.map +1 -0
  160. package/lib/intervalIndex/{sequenceIntervalIndexes.d.mts → sequenceIntervalIndexes.d.ts} +3 -3
  161. package/lib/intervalIndex/sequenceIntervalIndexes.d.ts.map +1 -0
  162. package/lib/intervalIndex/{sequenceIntervalIndexes.mjs → sequenceIntervalIndexes.js} +1 -1
  163. package/lib/intervalIndex/sequenceIntervalIndexes.js.map +1 -0
  164. package/lib/intervalIndex/{startpointInRangeIndex.d.mts → startpointInRangeIndex.d.ts} +4 -4
  165. package/lib/intervalIndex/startpointInRangeIndex.d.ts.map +1 -0
  166. package/lib/intervalIndex/{startpointInRangeIndex.mjs → startpointInRangeIndex.js} +3 -3
  167. package/lib/intervalIndex/startpointInRangeIndex.js.map +1 -0
  168. package/lib/{intervalTree.d.mts → intervalTree.d.ts} +2 -2
  169. package/lib/intervalTree.d.ts.map +1 -0
  170. package/lib/{intervalTree.mjs → intervalTree.js} +1 -1
  171. package/lib/intervalTree.js.map +1 -0
  172. package/lib/intervals/{index.d.mts → index.d.ts} +4 -4
  173. package/lib/intervals/index.d.ts.map +1 -0
  174. package/lib/intervals/{index.mjs → index.js} +4 -4
  175. package/lib/intervals/index.js.map +1 -0
  176. package/lib/intervals/{interval.d.mts → interval.d.ts} +3 -3
  177. package/lib/intervals/{interval.d.mts.map → interval.d.ts.map} +1 -1
  178. package/lib/intervals/{interval.mjs → interval.js} +2 -2
  179. package/lib/intervals/interval.js.map +1 -0
  180. package/lib/intervals/{intervalUtils.d.mts → intervalUtils.d.ts} +4 -4
  181. package/lib/intervals/intervalUtils.d.ts.map +1 -0
  182. package/lib/intervals/{intervalUtils.mjs → intervalUtils.js} +3 -2
  183. package/lib/intervals/intervalUtils.js.map +1 -0
  184. package/lib/intervals/{sequenceInterval.d.mts → sequenceInterval.d.ts} +3 -3
  185. package/lib/intervals/sequenceInterval.d.ts.map +1 -0
  186. package/lib/intervals/{sequenceInterval.mjs → sequenceInterval.js} +5 -4
  187. package/lib/intervals/{sequenceInterval.mjs.map → sequenceInterval.js.map} +1 -1
  188. package/lib/{localValues.d.mts → localValues.d.ts} +3 -3
  189. package/lib/{localValues.d.mts.map → localValues.d.ts.map} +1 -1
  190. package/lib/{localValues.mjs → localValues.js} +1 -1
  191. package/lib/localValues.js.map +1 -0
  192. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  193. package/lib/packageVersion.d.ts.map +1 -0
  194. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  195. package/lib/packageVersion.js.map +1 -0
  196. package/lib/{revertibles.d.mts → revertibles.d.ts} +13 -13
  197. package/lib/revertibles.d.ts.map +1 -0
  198. package/lib/{revertibles.mjs → revertibles.js} +11 -10
  199. package/lib/revertibles.js.map +1 -0
  200. package/lib/{sequence-alpha.d.mts → sequence-alpha.d.ts} +180 -13
  201. package/lib/{sequence-public.d.mts → sequence-beta.d.ts} +15 -0
  202. package/lib/{sequence-beta.d.mts → sequence-public.d.ts} +15 -0
  203. package/lib/{sequence-untrimmed.d.mts → sequence-untrimmed.d.ts} +81 -14
  204. package/lib/{sequence.d.mts → sequence.d.ts} +44 -6
  205. package/lib/sequence.d.ts.map +1 -0
  206. package/lib/{sequence.mjs → sequence.js} +95 -29
  207. package/lib/sequence.js.map +1 -0
  208. package/lib/{sequenceDeltaEvent.d.mts → sequenceDeltaEvent.d.ts} +1 -1
  209. package/lib/sequenceDeltaEvent.d.ts.map +1 -0
  210. package/lib/{sequenceDeltaEvent.mjs → sequenceDeltaEvent.js} +1 -1
  211. package/lib/sequenceDeltaEvent.js.map +1 -0
  212. package/lib/{sequenceFactory.d.mts → sequenceFactory.d.ts} +5 -2
  213. package/lib/sequenceFactory.d.ts.map +1 -0
  214. package/lib/{sequenceFactory.mjs → sequenceFactory.js} +6 -3
  215. package/lib/sequenceFactory.js.map +1 -0
  216. package/lib/{sharedIntervalCollection.d.mts → sharedIntervalCollection.d.ts} +3 -3
  217. package/lib/sharedIntervalCollection.d.ts.map +1 -0
  218. package/lib/{sharedIntervalCollection.mjs → sharedIntervalCollection.js} +4 -4
  219. package/lib/sharedIntervalCollection.js.map +1 -0
  220. package/lib/{sharedSequence.d.mts → sharedSequence.d.ts} +2 -2
  221. package/lib/sharedSequence.d.ts.map +1 -0
  222. package/lib/{sharedSequence.mjs → sharedSequence.js} +2 -2
  223. package/lib/sharedSequence.js.map +1 -0
  224. package/lib/{sharedString.d.mts → sharedString.d.ts} +3 -3
  225. package/lib/sharedString.d.ts.map +1 -0
  226. package/lib/{sharedString.mjs → sharedString.js} +3 -3
  227. package/lib/sharedString.js.map +1 -0
  228. package/lib/test/collections.intervalTree.js +73 -0
  229. package/lib/test/collections.intervalTree.js.map +1 -0
  230. package/lib/test/createSnapshotFiles.js +15 -0
  231. package/lib/test/createSnapshotFiles.js.map +1 -0
  232. package/lib/test/dirname.cjs +16 -0
  233. package/lib/test/dirname.cjs.map +1 -0
  234. package/lib/test/endpointInRangeIndex.spec.js +182 -0
  235. package/lib/test/endpointInRangeIndex.spec.js.map +1 -0
  236. package/lib/test/fuzz/fuzzUtils.js +250 -0
  237. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  238. package/lib/test/fuzz/intervalCollection.fuzz.spec.js +200 -0
  239. package/lib/test/fuzz/intervalCollection.fuzz.spec.js.map +1 -0
  240. package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js +129 -0
  241. package/lib/test/fuzz/intervalRevertibles.fuzz.spec.js.map +1 -0
  242. package/lib/test/fuzz/sharedString.fuzz.spec.js +91 -0
  243. package/lib/test/fuzz/sharedString.fuzz.spec.js.map +1 -0
  244. package/lib/test/generateSharedStrings.js +138 -0
  245. package/lib/test/generateSharedStrings.js.map +1 -0
  246. package/lib/test/intervalCollection.detached.spec.js +126 -0
  247. package/lib/test/intervalCollection.detached.spec.js.map +1 -0
  248. package/lib/test/intervalCollection.events.spec.js +491 -0
  249. package/lib/test/intervalCollection.events.spec.js.map +1 -0
  250. package/lib/test/intervalCollection.perf.spec.js +88 -0
  251. package/lib/test/intervalCollection.perf.spec.js.map +1 -0
  252. package/lib/test/intervalCollection.snapshot.spec.js +171 -0
  253. package/lib/test/intervalCollection.snapshot.spec.js.map +1 -0
  254. package/lib/test/intervalCollection.spec.js +1660 -0
  255. package/lib/test/intervalCollection.spec.js.map +1 -0
  256. package/lib/test/intervalIndexTestUtils.js +49 -0
  257. package/lib/test/intervalIndexTestUtils.js.map +1 -0
  258. package/lib/test/intervalRebasing.spec.js +589 -0
  259. package/lib/test/intervalRebasing.spec.js.map +1 -0
  260. package/lib/test/intervalStashedOps.spec.js +142 -0
  261. package/lib/test/intervalStashedOps.spec.js.map +1 -0
  262. package/lib/test/intervalTestUtils.js +81 -0
  263. package/lib/test/intervalTestUtils.js.map +1 -0
  264. package/lib/test/marshalling.spec.js +55 -0
  265. package/lib/test/marshalling.spec.js.map +1 -0
  266. package/lib/test/memory/sharedSequence.spec.js +82 -0
  267. package/lib/test/memory/sharedSequence.spec.js.map +1 -0
  268. package/lib/test/memory/sharedString.spec.js +134 -0
  269. package/lib/test/memory/sharedString.spec.js.map +1 -0
  270. package/lib/test/overlappingSequenceIntervalsIndex.spec.js +348 -0
  271. package/lib/test/overlappingSequenceIntervalsIndex.spec.js.map +1 -0
  272. package/lib/test/partialLoad.spec.js +211 -0
  273. package/lib/test/partialLoad.spec.js.map +1 -0
  274. package/lib/test/rebasing.spec.js +81 -0
  275. package/lib/test/rebasing.spec.js.map +1 -0
  276. package/lib/test/reentrancy.spec.js +174 -0
  277. package/lib/test/reentrancy.spec.js.map +1 -0
  278. package/lib/test/revertibles.spec.js +971 -0
  279. package/lib/test/revertibles.spec.js.map +1 -0
  280. package/lib/test/sequenceDeltaEvent.spec.js +2144 -0
  281. package/lib/test/sequenceDeltaEvent.spec.js.map +1 -0
  282. package/lib/test/sharedIntervalCollection.spec.js +159 -0
  283. package/lib/test/sharedIntervalCollection.spec.js.map +1 -0
  284. package/lib/test/sharedString.spec.js +532 -0
  285. package/lib/test/sharedString.spec.js.map +1 -0
  286. package/lib/test/snapshotEmptyProps.spec.js +45 -0
  287. package/lib/test/snapshotEmptyProps.spec.js.map +1 -0
  288. package/lib/test/snapshotVersion.spec.js +149 -0
  289. package/lib/test/snapshotVersion.spec.js.map +1 -0
  290. package/lib/test/startpointInRangeIndex.spec.js +182 -0
  291. package/lib/test/startpointInRangeIndex.spec.js.map +1 -0
  292. package/lib/test/subSequence.spec.js +92 -0
  293. package/lib/test/subSequence.spec.js.map +1 -0
  294. package/lib/test/types/validateSequencePrevious.generated.js +162 -0
  295. package/lib/test/types/validateSequencePrevious.generated.js.map +1 -0
  296. package/lib/test/v1IntervalCollectionHelpers.js +93 -0
  297. package/lib/test/v1IntervalCollectionHelpers.js.map +1 -0
  298. package/package.json +66 -60
  299. package/src/defaultMap.ts +97 -123
  300. package/src/defaultMapInterfaces.ts +1 -9
  301. package/src/index.ts +15 -11
  302. package/src/intervalCollection.ts +57 -84
  303. package/src/intervalIndex/endpointInRangeIndex.ts +4 -4
  304. package/src/intervalIndex/endpointIndex.ts +3 -3
  305. package/src/intervalIndex/idIntervalIndex.ts +3 -4
  306. package/src/intervalIndex/index.ts +8 -8
  307. package/src/intervalIndex/intervalIndex.ts +1 -1
  308. package/src/intervalIndex/overlappingIntervalsIndex.ts +7 -10
  309. package/src/intervalIndex/overlappingSequenceIntervalsIndex.ts +4 -4
  310. package/src/intervalIndex/sequenceIntervalIndexes.ts +2 -2
  311. package/src/intervalIndex/startpointInRangeIndex.ts +4 -4
  312. package/src/intervalTree.ts +1 -1
  313. package/src/intervals/index.ts +3 -3
  314. package/src/intervals/interval.ts +2 -4
  315. package/src/intervals/intervalUtils.ts +3 -3
  316. package/src/intervals/sequenceInterval.ts +3 -4
  317. package/src/localValues.ts +2 -2
  318. package/src/packageVersion.ts +1 -1
  319. package/src/revertibles.ts +13 -13
  320. package/src/sequence.ts +121 -44
  321. package/src/sequenceFactory.ts +5 -2
  322. package/src/sharedIntervalCollection.ts +5 -5
  323. package/src/sharedSequence.ts +1 -1
  324. package/src/sharedString.ts +2 -2
  325. package/tsconfig.cjs.json +7 -0
  326. package/tsconfig.json +2 -5
  327. package/lib/defaultMap.d.mts.map +0 -1
  328. package/lib/defaultMap.mjs.map +0 -1
  329. package/lib/defaultMapInterfaces.d.mts.map +0 -1
  330. package/lib/defaultMapInterfaces.mjs.map +0 -1
  331. package/lib/index.d.mts.map +0 -1
  332. package/lib/index.mjs.map +0 -1
  333. package/lib/intervalCollection.d.mts.map +0 -1
  334. package/lib/intervalCollection.mjs.map +0 -1
  335. package/lib/intervalIndex/endpointInRangeIndex.d.mts.map +0 -1
  336. package/lib/intervalIndex/endpointInRangeIndex.mjs.map +0 -1
  337. package/lib/intervalIndex/endpointIndex.d.mts.map +0 -1
  338. package/lib/intervalIndex/endpointIndex.mjs.map +0 -1
  339. package/lib/intervalIndex/idIntervalIndex.d.mts.map +0 -1
  340. package/lib/intervalIndex/idIntervalIndex.mjs.map +0 -1
  341. package/lib/intervalIndex/index.d.mts.map +0 -1
  342. package/lib/intervalIndex/index.mjs.map +0 -1
  343. package/lib/intervalIndex/intervalIndex.d.mts.map +0 -1
  344. package/lib/intervalIndex/intervalIndex.mjs.map +0 -1
  345. package/lib/intervalIndex/intervalIndexUtils.d.mts.map +0 -1
  346. package/lib/intervalIndex/intervalIndexUtils.mjs.map +0 -1
  347. package/lib/intervalIndex/overlappingIntervalsIndex.d.mts.map +0 -1
  348. package/lib/intervalIndex/overlappingIntervalsIndex.mjs.map +0 -1
  349. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.d.mts.map +0 -1
  350. package/lib/intervalIndex/overlappingSequenceIntervalsIndex.mjs.map +0 -1
  351. package/lib/intervalIndex/sequenceIntervalIndexes.d.mts.map +0 -1
  352. package/lib/intervalIndex/sequenceIntervalIndexes.mjs.map +0 -1
  353. package/lib/intervalIndex/startpointInRangeIndex.d.mts.map +0 -1
  354. package/lib/intervalIndex/startpointInRangeIndex.mjs.map +0 -1
  355. package/lib/intervalTree.d.mts.map +0 -1
  356. package/lib/intervalTree.mjs.map +0 -1
  357. package/lib/intervals/index.d.mts.map +0 -1
  358. package/lib/intervals/index.mjs.map +0 -1
  359. package/lib/intervals/interval.mjs.map +0 -1
  360. package/lib/intervals/intervalUtils.d.mts.map +0 -1
  361. package/lib/intervals/intervalUtils.mjs.map +0 -1
  362. package/lib/intervals/sequenceInterval.d.mts.map +0 -1
  363. package/lib/localValues.mjs.map +0 -1
  364. package/lib/packageVersion.d.mts.map +0 -1
  365. package/lib/packageVersion.mjs.map +0 -1
  366. package/lib/revertibles.d.mts.map +0 -1
  367. package/lib/revertibles.mjs.map +0 -1
  368. package/lib/sequence.d.mts.map +0 -1
  369. package/lib/sequence.mjs.map +0 -1
  370. package/lib/sequenceDeltaEvent.d.mts.map +0 -1
  371. package/lib/sequenceDeltaEvent.mjs.map +0 -1
  372. package/lib/sequenceFactory.d.mts.map +0 -1
  373. package/lib/sequenceFactory.mjs.map +0 -1
  374. package/lib/sharedIntervalCollection.d.mts.map +0 -1
  375. package/lib/sharedIntervalCollection.mjs.map +0 -1
  376. package/lib/sharedSequence.d.mts.map +0 -1
  377. package/lib/sharedSequence.mjs.map +0 -1
  378. package/lib/sharedString.d.mts.map +0 -1
  379. package/lib/sharedString.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intervalCollection.spec.js","sourceRoot":"","sources":["../../src/test/intervalCollection.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 { IChannelServices } from \"@fluidframework/datastore-definitions\";\nimport {\n\tReferenceType,\n\tSlidingPreference,\n\treservedRangeLabelsKey,\n} from \"@fluidframework/merge-tree\";\nimport {\n\tMockFluidDataStoreRuntime,\n\tMockContainerRuntimeFactory,\n\tMockContainerRuntimeFactoryForReconnection,\n\tMockContainerRuntimeForReconnection,\n\tMockStorage,\n\tMockEmptyDeltaConnection,\n} from \"@fluidframework/test-runtime-utils\";\nimport { LoggingError } from \"@fluidframework/telemetry-utils\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\nimport { SharedString } from \"../sharedString.js\";\nimport { SharedStringFactory } from \"../sequenceFactory.js\";\nimport { IIntervalCollection, Side } from \"../intervalCollection.js\";\nimport { IntervalIndex } from \"../intervalIndex/index.js\";\nimport { IntervalStickiness, SequenceInterval, ISerializableInterval } from \"../intervals/index.js\";\nimport { assertSequenceIntervals } from \"./intervalTestUtils.js\";\n\nclass MockIntervalIndex<TInterval extends ISerializableInterval>\n\timplements IntervalIndex<TInterval>\n{\n\tprivate readonly intervals: TInterval[];\n\tconstructor() {\n\t\tthis.intervals = new Array<TInterval>();\n\t}\n\n\tpublic add(interval: TInterval) {\n\t\tthis.intervals.push(interval);\n\t}\n\n\tpublic remove(interval: TInterval): boolean {\n\t\tconst idx = this.intervals.indexOf(interval);\n\t\tif (idx !== -1) {\n\t\t\tthis.intervals.splice(idx, 1);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic get(idx: number): TInterval {\n\t\treturn this.intervals[idx];\n\t}\n\n\tpublic size(): number {\n\t\treturn this.intervals.length;\n\t}\n}\n\nfunction assertIntervalEquals(\n\tstring: SharedString,\n\tinterval: SequenceInterval | undefined,\n\tendpoints: { start: number; end: number },\n): void {\n\tassert(interval);\n\tassert.equal(\n\t\tstring.localReferencePositionToPosition(interval.start),\n\t\tendpoints.start,\n\t\t\"mismatched start\",\n\t);\n\tassert.equal(\n\t\tstring.localReferencePositionToPosition(interval.end),\n\t\tendpoints.end,\n\t\t\"mismatched end\",\n\t);\n}\n\ndescribe(\"SharedString interval collections\", () => {\n\tlet sharedString: SharedString;\n\tlet dataStoreRuntime1: MockFluidDataStoreRuntime;\n\n\tbeforeEach(() => {\n\t\tdataStoreRuntime1 = new MockFluidDataStoreRuntime({ clientId: \"1\" });\n\t\tsharedString = new SharedString(\n\t\t\tdataStoreRuntime1,\n\t\t\t\"shared-string-1\",\n\t\t\tSharedStringFactory.Attributes,\n\t\t);\n\t});\n\n\tdescribe(\"in a connected state with a remote SharedString\", () => {\n\t\tlet sharedString2: SharedString;\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactory;\n\n\t\tbeforeEach(() => {\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactory();\n\n\t\t\t// Connect the first SharedString.\n\t\t\tdataStoreRuntime1.setAttachState(AttachState.Attached);\n\t\t\tdataStoreRuntime1.options = {\n\t\t\t\tintervalStickinessEnabled: true,\n\t\t\t};\n\t\t\tconst containerRuntime1 =\n\t\t\t\tcontainerRuntimeFactory.createContainerRuntime(dataStoreRuntime1);\n\t\t\tconst services1 = {\n\t\t\t\tdeltaConnection: dataStoreRuntime1.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\tsharedString.initializeLocal();\n\t\t\tsharedString.connect(services1);\n\n\t\t\t// Create and connect a second SharedString.\n\t\t\tconst dataStoreRuntime2 = new MockFluidDataStoreRuntime({ clientId: \"2\" });\n\t\t\tconst containerRuntime2 =\n\t\t\t\tcontainerRuntimeFactory.createContainerRuntime(dataStoreRuntime2);\n\t\t\tdataStoreRuntime2.options = {\n\t\t\t\tintervalStickinessEnabled: true,\n\t\t\t};\n\t\t\tconst services2 = {\n\t\t\t\tdeltaConnection: dataStoreRuntime2.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\n\t\t\tsharedString2 = new SharedString(\n\t\t\t\tdataStoreRuntime2,\n\t\t\t\t\"shared-string-2\",\n\t\t\t\tSharedStringFactory.Attributes,\n\t\t\t);\n\t\t\tsharedString2.initializeLocal();\n\t\t\tsharedString2.connect(services2);\n\t\t});\n\n\t\tit(\"can maintain interval consistency\", () => {\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"xyz\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\tassert.notStrictEqual(collection2, undefined, \"undefined\");\n\t\t\tassert.strictEqual(sharedString.getText(), sharedString2.getText(), \"not equal text\");\n\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tconst interval = collection1.add({ start: 1, end: 1 });\n\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString2.insertText(0, \"wha\");\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(sharedString.getText(), \"whaabcxyz\", \"different text 1\");\n\t\t\tassert.strictEqual(sharedString.getText(), \"whaabcxyz\", \"different text 2\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 4, end: 4 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 4, end: 4 }]);\n\n\t\t\tcollection2.change(intervalId, { start: 1, end: 6 });\n\t\t\tsharedString.removeText(0, 2);\n\t\t\tcollection1.change(intervalId, { start: 0, end: 5 });\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 0, end: 5 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 0, end: 5 }]);\n\n\t\t\tcollection1.change(intervalId, {\n\t\t\t\tstart: sharedString.getLength() - 1,\n\t\t\t\tend: sharedString.getLength() - 1,\n\t\t\t});\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [\n\t\t\t\t{ start: sharedString.getLength() - 1, end: sharedString.getLength() - 1 },\n\t\t\t]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [\n\t\t\t\t{ start: sharedString2.getLength() - 1, end: sharedString2.getLength() - 1 },\n\t\t\t]);\n\t\t});\n\n\t\tdescribe(\"changing endpoints and/or properties\", () => {\n\t\t\tit(\"changes only endpoints with new signature\", () => {\n\t\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\t\tsharedString.insertText(0, \"hello world\");\n\t\t\t\tconst id = collection.add({ start: 0, end: 3, props: { a: 1 } }).getIntervalId();\n\n\t\t\t\tcollection.change(id, { start: 1, end: 4 });\n\n\t\t\t\tassertIntervalEquals(sharedString, collection.getIntervalById(id), {\n\t\t\t\t\tstart: 1,\n\t\t\t\t\tend: 4,\n\t\t\t\t});\n\t\t\t\tassert.equal(collection.getIntervalById(id)?.properties.a, 1);\n\t\t\t});\n\t\t\tit(\"changes only properties with new signature\", () => {\n\t\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\t\tsharedString.insertText(0, \"hello world\");\n\t\t\t\tconst id = collection.add({ start: 0, end: 3, props: { a: 1 } }).getIntervalId();\n\n\t\t\t\tcollection.change(id, { props: { a: 2 } });\n\n\t\t\t\tassertIntervalEquals(sharedString, collection.getIntervalById(id), {\n\t\t\t\t\tstart: 0,\n\t\t\t\t\tend: 3,\n\t\t\t\t});\n\t\t\t\tassert.equal(collection.getIntervalById(id)?.properties.a, 2);\n\t\t\t});\n\t\t\tit(\"changes endpoints and properties with new signature\", () => {\n\t\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\t\tsharedString.insertText(0, \"hello world\");\n\t\t\t\tconst id = collection.add({ start: 0, end: 3, props: { a: 1 } }).getIntervalId();\n\n\t\t\t\tcollection.change(id, { start: 1, end: 4, props: { a: 2 } });\n\n\t\t\t\tassertIntervalEquals(sharedString, collection.getIntervalById(id), {\n\t\t\t\t\tstart: 1,\n\t\t\t\t\tend: 4,\n\t\t\t\t});\n\t\t\t\tassert.equal(collection.getIntervalById(id)?.properties.a, 2);\n\t\t\t});\n\t\t\tit(\"changes endpoints and properties with new signature on a remote sharedString\", () => {\n\t\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\t\tsharedString.insertText(0, \"hello world\");\n\t\t\t\tconst id = collection.add({ start: 0, end: 3, props: { a: 1 } }).getIntervalId();\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\t\tcollection.change(id, { start: 1, end: 4, props: { a: 2 } });\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassertIntervalEquals(sharedString, collection.getIntervalById(id), {\n\t\t\t\t\tstart: 1,\n\t\t\t\t\tend: 4,\n\t\t\t\t});\n\t\t\t\tassertIntervalEquals(sharedString2, collection2.getIntervalById(id), {\n\t\t\t\t\tstart: 1,\n\t\t\t\t\tend: 4,\n\t\t\t\t});\n\t\t\t\tassert.equal(collection.getIntervalById(id)?.properties.a, 2);\n\t\t\t\tassert.equal(collection2.getIntervalById(id)?.properties.a, 2);\n\t\t\t});\n\t\t\tit(\"passes empty property set to change\", () => {\n\t\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\t\tsharedString.insertText(0, \"hello world\");\n\t\t\t\tconst id = collection.add({ start: 0, end: 3, props: { a: 1 } }).getIntervalId();\n\n\t\t\t\tcollection.change(id, { props: {} });\n\n\t\t\t\tassertIntervalEquals(sharedString, collection.getIntervalById(id), {\n\t\t\t\t\tstart: 0,\n\t\t\t\t\tend: 3,\n\t\t\t\t});\n\t\t\t\tassert.equal(collection.getIntervalById(id)?.properties.a, 1);\n\t\t\t});\n\t\t\tit(\"passes undefined endpoints and properties to change\", () => {\n\t\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\t\tsharedString.insertText(0, \"hello world\");\n\t\t\t\tconst id = collection.add({ start: 0, end: 3, props: { a: 1 } }).getIntervalId();\n\n\t\t\t\tcollection.change(id, { start: undefined, end: undefined, props: undefined });\n\n\t\t\t\tassertIntervalEquals(sharedString, collection.getIntervalById(id), {\n\t\t\t\t\tstart: 0,\n\t\t\t\t\tend: 3,\n\t\t\t\t});\n\t\t\t\tassert.equal(collection.getIntervalById(id)?.properties.a, 1);\n\t\t\t});\n\t\t});\n\n\t\t// Regression test for bug described in <https://dev.azure.com/fluidframework/internal/_workitems/edit/4477>\n\t\t//\n\t\t// This test involves a crash inside RBTree when multiple intervals slide\n\t\t// off the string\n\t\t//\n\t\t// More specifically, previously we didn't properly clear the segment\n\t\t// on local references which became detached, which caused crashes on\n\t\t// some IntervalCollection workflows\n\t\tit(\"passes regression test for #4477\", () => {\n\t\t\tsharedString.insertText(0, \"ABC\");\n\t\t\tsharedString.insertText(0, \"D\");\n\t\t\t// DABC\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\t// [D]ABC\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tcollection.add({ start: 0, end: 0, props: { intervalId: \"x\" } });\n\t\t\t// x\n\t\t\t// [D]ABC\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\t// x\n\t\t\t// [D][A]BC\n\t\t\tcollection.add({ start: 0, end: 0, props: { intervalId: \"y\" } });\n\t\t\t// x y\n\t\t\t// [D][A]BC\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\tsharedString.insertText(0, \"EFGHIJK\");\n\t\t\tsharedString.insertText(0, \"LMNO\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tsharedString.insertText(0, \"P\");\n\t\t\t// x, y are detached\n\t\t\t// [ ]\n\t\t\t// string is PLMNOEFGHIJK\n\t\t\tcollection.add({ start: 7, end: 11, props: { intervalId: \"z\" } });\n\t\t\tsharedString.removeRange(11, 12);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t});\n\n\t\tdescribe(\"remain consistent on double-delete\", () => {\n\t\t\tlet collection: IIntervalCollection<SequenceInterval>;\n\t\t\tlet collection2: IIntervalCollection<SequenceInterval>;\n\t\t\tbeforeEach(() => {\n\t\t\t\tsharedString.insertText(0, \"01234\");\n\t\t\t\tcollection = sharedString.getIntervalCollection(\"test\");\n\t\t\t\tcollection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t});\n\n\t\t\tit(\"causing references to slide forward\", () => {\n\t\t\t\tsharedString2.removeRange(2, 3);\n\t\t\t\tcollection.add({ start: 2, end: 2 });\n\t\t\t\tsharedString.removeRange(2, 4);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 2, end: 2 }]);\n\t\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 2, end: 2 }]);\n\t\t\t});\n\n\t\t\tit(\"causing references to slide backward\", () => {\n\t\t\t\tsharedString2.removeRange(2, 3);\n\t\t\t\tcollection.add({ start: 2, end: 2 });\n\t\t\t\tsharedString.removeRange(2, 5);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 1, end: 1 }]);\n\t\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 1 }]);\n\t\t\t});\n\t\t});\n\n\t\tit(\"errors creating invalid intervals\", () => {\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.throws(\n\t\t\t\t() => collection1.add({ start: 0, end: 0 }),\n\t\t\t\t\"Should throw creating interval on empty string\",\n\t\t\t);\n\t\t\tassert.throws(\n\t\t\t\t() => collection1.add({ start: 1, end: 3 }),\n\t\t\t\t\"Should throw creating interval on empty string\",\n\t\t\t);\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.throws(\n\t\t\t\t() => collection1.add({ start: 2, end: 5 }),\n\t\t\t\t\"Should throw creating interval past end of string\",\n\t\t\t);\n\t\t\t// There is no check for creating an interval at a negative offset\n\t\t\t// assert.throws(() => collection1.add(-1, 2, IntervalType.SlideOnRemove),\n\t\t\t// \"Should throw creating interval at negative position\");\n\t\t});\n\n\t\tit(\"can create and slide interval to a marker\", () => {\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tsharedString.insertMarker(4, ReferenceType.Tile, { nodeType: \"Paragraph\" });\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\n\t\t\tcollection1.add({ start: 3, end: 4 });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 3, end: 4 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 3, end: 4 }]);\n\n\t\t\tsharedString.removeRange(3, 4);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 3, end: 3 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 3, end: 3 }]);\n\t\t});\n\n\t\tit(\"can slide intervals nearer\", () => {\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\n\t\t\t// Conflicting remove/add interval at end of string\n\t\t\tcollection1.add({ start: 1, end: 3 });\n\t\t\tsharedString2.removeRange(3, 4);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 2 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 2 }]);\n\n\t\t\t// Remove location of end of interval\n\t\t\tsharedString.removeRange(2, 3);\n\t\t\tassert.equal(sharedString.getText(), \"AB\");\n\t\t\tassertSequenceIntervals(sharedString, collection1, [\n\t\t\t\t// odd behavior - end of interval doesn't slide\n\t\t\t\t// until ack, so position beyond end of string\n\t\t\t\t{ start: 1, end: 2 },\n\t\t\t]);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 1 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 1 }]);\n\n\t\t\t// Remove location of start and end of interval\n\t\t\tsharedString.removeRange(1, 2);\n\t\t\tassertSequenceIntervals(\n\t\t\t\tsharedString,\n\t\t\t\tcollection1,\n\t\t\t\t[\n\t\t\t\t\t// odd behavior - start of interval doesn't slide\n\t\t\t\t\t// until ack, so not found by overlapping search\n\t\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t],\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 0, end: 0 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 0, end: 0 }]);\n\n\t\t\t// Interval on empty string\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [\n\t\t\t\t// Search finds interval at end of string\n\t\t\t\t{ start: 0, end: 0 },\n\t\t\t]);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(\n\t\t\t\tsharedString,\n\t\t\t\tcollection1,\n\t\t\t\t[\n\t\t\t\t\t// Interval becomes detached when string is acked empty\n\t\t\t\t\t{ start: -1, end: -1 },\n\t\t\t\t],\n\t\t\t\tfalse,\n\t\t\t);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: -1, end: -1 }], false);\n\t\t});\n\n\t\tit(\"remains consistent when a change to the same position but different segment is issued\", () => {\n\t\t\t// This is a regression test for an issue in LocalIntervalCollection, which avoided actually modifying\n\t\t\t// intervals on change operations if it perceived them to already have the same position. That logic was\n\t\t\t// invalid in 2 ways:\n\t\t\t// 1. for remote ops, the position requested for change potentially refers to a different revision from\n\t\t\t// the local position.\n\t\t\t// 2. for local ops, even if an interval appears to be at the position it's being changed to, it might\n\t\t\t// actually be associated with a removed segment and pending slide. In this case, failing to update\n\t\t\t// the interval locally but still emitting a change op causes inconsistent behavior, since subsequent\n\t\t\t// slides may be to different segments (in this test, the danger is that the client issuing the change\n\t\t\t// op may end up with their interval pointing to the \"Y\" if they fail to change it locally)\n\t\t\tsharedString.insertText(0, \"ABCDE\");\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval = collection1.add({ start: 1, end: 3 });\n\t\t\tsharedString2.insertText(2, \"XY\");\n\t\t\tsharedString2.removeRange(1, 3);\n\t\t\tsharedString.removeRange(1, 4);\n\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tcollection1.change(intervalId, { start: 1, end: 1 });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.equal(sharedString.getText(), \"AYE\");\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 2, end: 2 }]);\n\t\t\tassertSequenceIntervals(sharedString2, sharedString2.getIntervalCollection(\"test\"), [\n\t\t\t\t{ start: 2, end: 2 },\n\t\t\t]);\n\t\t});\n\n\t\tit(\"can slide intervals nearer to locally removed segment\", () => {\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\n\t\t\tsharedString2.removeRange(3, 4);\n\t\t\tcollection1.add({ start: 1, end: 3 });\n\t\t\tsharedString.removeRange(1, 3);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 0, end: 0 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 0, end: 0 }]);\n\t\t});\n\n\t\tit(\"consistent after remove all/insert text conflict\", () => {\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tcollection1.add({ start: 1, end: 3 });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\n\t\t\tsharedString.insertText(0, \"XYZ\");\n\t\t\tsharedString2.removeRange(0, 4);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 2, end: 2 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 2, end: 2 }]);\n\n\t\t\tsharedString2.removeRange(0, 3);\n\t\t\tsharedString.insertText(0, \"PQ\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: -1, end: -1 }], false);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: -1, end: -1 }], false);\n\n\t\t\tsharedString2.removeRange(0, 2);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: -1, end: -1 }], false);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: -1, end: -1 }], false);\n\t\t});\n\n\t\tit(\"can slide intervals on remove ack\", () => {\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\n\t\t\tcollection1.add({ start: 1, end: 3 });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tsharedString.insertText(2, \"X\");\n\t\t\tassert.strictEqual(sharedString.getText(), \"ABXCD\");\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 4 }]);\n\n\t\t\tsharedString2.removeRange(1, 2);\n\t\t\tassert.strictEqual(sharedString2.getText(), \"ACD\");\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 2 }]);\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(sharedString.getText(), \"AXCD\");\n\t\t\tassert.strictEqual(sharedString2.getText(), \"AXCD\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 3 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 3 }]);\n\t\t});\n\n\t\tit(\"can slide intervals to segment not referenced by remove\", () => {\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\n\t\t\tsharedString.insertText(2, \"X\");\n\t\t\tassert.strictEqual(sharedString.getText(), \"ABXCD\");\n\t\t\tcollection1.add({ start: 1, end: 3 });\n\n\t\t\tsharedString2.removeRange(1, 2);\n\t\t\tassert.strictEqual(sharedString2.getText(), \"ACD\");\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(sharedString.getText(), \"AXCD\");\n\t\t\tassert.strictEqual(sharedString2.getText(), \"AXCD\");\n\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 2 }]);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 2 }]);\n\t\t});\n\n\t\tit(\"can slide intervals on create ack\", () => {\n\t\t\t// Create and connect a third SharedString.\n\t\t\tconst dataStoreRuntime3 = new MockFluidDataStoreRuntime({ clientId: \"3\" });\n\t\t\tconst containerRuntime3 =\n\t\t\t\tcontainerRuntimeFactory.createContainerRuntime(dataStoreRuntime3);\n\t\t\tconst services3 = {\n\t\t\t\tdeltaConnection: containerRuntime3.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\n\t\t\tconst sharedString3 = new SharedString(\n\t\t\t\tdataStoreRuntime3,\n\t\t\t\t\"shared-string-3\",\n\t\t\t\tSharedStringFactory.Attributes,\n\t\t\t);\n\t\t\tsharedString3.initializeLocal();\n\t\t\tsharedString3.connect(services3);\n\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\tconst collection3 = sharedString3.getIntervalCollection(\"test\");\n\n\t\t\tsharedString.removeRange(1, 2);\n\t\t\tassert.strictEqual(sharedString.getText(), \"ACD\");\n\n\t\t\tsharedString2.insertText(2, \"X\");\n\t\t\tassert.strictEqual(sharedString2.getText(), \"ABXCD\");\n\n\t\t\tcollection3.add({ start: 1, end: 3 });\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(sharedString.getText(), \"AXCD\");\n\t\t\tassert.strictEqual(sharedString2.getText(), \"AXCD\");\n\t\t\tassert.strictEqual(sharedString3.getText(), \"AXCD\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 3 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 3 }]);\n\t\t\tassertSequenceIntervals(sharedString3, collection3, [{ start: 1, end: 3 }]);\n\t\t});\n\n\t\tit(\"can slide intervals on change ack\", () => {\n\t\t\t// Create and connect a third SharedString.\n\t\t\tconst dataStoreRuntime3 = new MockFluidDataStoreRuntime({ clientId: \"3\" });\n\t\t\tconst containerRuntime3 =\n\t\t\t\tcontainerRuntimeFactory.createContainerRuntime(dataStoreRuntime3);\n\t\t\tconst services3 = {\n\t\t\t\tdeltaConnection: containerRuntime3.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\n\t\t\tconst sharedString3 = new SharedString(\n\t\t\t\tdataStoreRuntime3,\n\t\t\t\t\"shared-string-3\",\n\t\t\t\tSharedStringFactory.Attributes,\n\t\t\t);\n\t\t\tsharedString3.initializeLocal();\n\t\t\tsharedString3.connect(services3);\n\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tconst interval = collection1.add({ start: 0, end: 0 });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\tconst collection3 = sharedString3.getIntervalCollection(\"test\");\n\n\t\t\tsharedString.removeRange(1, 2);\n\t\t\tassert.strictEqual(sharedString.getText(), \"ACD\");\n\n\t\t\tsharedString2.insertText(2, \"X\");\n\t\t\tassert.strictEqual(sharedString2.getText(), \"ABXCD\");\n\n\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tcollection3.change(intervalId, { start: 1, end: 3 });\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(sharedString.getText(), \"AXCD\");\n\t\t\tassert.strictEqual(sharedString2.getText(), \"AXCD\");\n\t\t\tassert.strictEqual(sharedString3.getText(), \"AXCD\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 3 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 3 }]);\n\t\t\tassertSequenceIntervals(sharedString3, collection3, [{ start: 1, end: 3 }]);\n\n\t\t\tsharedString.removeRange(3, 4);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 3 }]);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 2 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 2 }]);\n\t\t\tassertSequenceIntervals(sharedString3, collection3, [{ start: 1, end: 2 }]);\n\t\t});\n\n\t\tit(\"can slide intervals on create before remove\", () => {\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\n\t\t\tcollection2.add({ start: 2, end: 3 });\n\n\t\t\tsharedString.removeRange(1, 3);\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 1 }]);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 1 }]);\n\t\t});\n\n\t\tit(\"can slide intervals on remove before create\", () => {\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"ABCDE\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\n\t\t\tsharedString.removeRange(1, 3);\n\t\t\tassert.strictEqual(sharedString.getText(), \"ADE\");\n\n\t\t\tcollection2.add({ start: 1, end: 3 });\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t// before fixing this, at this point the start range on sharedString\n\t\t\t// is on the removed segment. Can't detect that from the interval API.\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 1 }]);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 1 }]);\n\n\t\t\t// More operations reveal the problem\n\t\t\tsharedString.insertText(2, \"X\");\n\t\t\tassert.strictEqual(sharedString.getText(), \"ADXE\");\n\t\t\tsharedString2.removeRange(1, 2);\n\t\t\tassert.strictEqual(sharedString2.getText(), \"AE\");\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(sharedString.getText(), \"AXE\");\n\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 1 }]);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 1 }]);\n\t\t});\n\n\t\tit(\"can maintain different offsets on removed segment\", () => {\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"ABCD\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\n\t\t\tcollection1.add({ start: 1, end: 3 });\n\t\t\tsharedString.insertText(2, \"XY\");\n\t\t\tassert.strictEqual(sharedString.getText(), \"ABXYCD\");\n\n\t\t\tsharedString2.removeRange(0, 4);\n\t\t\tassert.strictEqual(sharedString2.getText(), \"\");\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(sharedString.getText(), \"XY\");\n\t\t\tassert.strictEqual(sharedString2.getText(), \"XY\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 0, end: 1 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 0, end: 1 }]);\n\t\t});\n\n\t\tit(\"tolerates creation of an interval with no segment due to concurrent delete\", () => {\n\t\t\tsharedString.insertText(0, \"ABCDEF\");\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tsharedString2.removeRange(0, sharedString2.getLength());\n\t\t\tcollection1.add({ start: 1, end: 1 });\n\t\t\tsharedString2.insertText(0, \"X\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: -1, end: -1 }], false);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: -1, end: -1 }], false);\n\t\t});\n\n\t\tit(\"can maintain consistency of LocalReference's when segments are packed\", async () => {\n\t\t\t// sharedString.insertMarker(0, ReferenceType.Tile, { nodeType: \"Paragraph\" });\n\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test2\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test2\");\n\n\t\t\tsharedString.insertText(0, \"a\");\n\t\t\tsharedString.insertText(1, \"b\");\n\t\t\tsharedString.insertText(2, \"c\");\n\t\t\tsharedString.insertText(3, \"d\");\n\t\t\tsharedString.insertText(4, \"e\");\n\t\t\tsharedString.insertText(5, \"f\");\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"abcdef\", \"incorrect text 1\");\n\t\t\tassert.strictEqual(sharedString2.getText(), \"abcdef\", \"incorrect text 2\");\n\n\t\t\tcollection1.add({ start: 2, end: 2 });\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 2, end: 2 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 2, end: 2 }]);\n\n\t\t\tsharedString.insertText(0, \"a\");\n\t\t\tsharedString.insertText(1, \"b\");\n\t\t\tsharedString.insertText(2, \"c\");\n\t\t\tsharedString.insertText(3, \"d\");\n\t\t\tsharedString.insertText(4, \"e\");\n\t\t\tsharedString.insertText(5, \"f\");\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"abcdefabcdef\", \"incorrect text 2\");\n\t\t\tassert.strictEqual(sharedString2.getText(), \"abcdefabcdef\", \"incorrect text 3\");\n\n\t\t\tcollection1.add({ start: 5, end: 5 });\n\t\t\tcollection1.add({ start: 2, end: 2 });\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [\n\t\t\t\t{ start: 2, end: 2 },\n\t\t\t\t{ start: 5, end: 5 },\n\t\t\t\t{ start: 8, end: 8 },\n\t\t\t]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [\n\t\t\t\t{ start: 2, end: 2 },\n\t\t\t\t{ start: 5, end: 5 },\n\t\t\t\t{ start: 8, end: 8 },\n\t\t\t]);\n\n\t\t\t// Summarize to cause Zamboni to pack segments. Confirm consistency after packing.\n\t\t\tawait sharedString2.summarize();\n\n\t\t\tassertSequenceIntervals(sharedString, collection1, [\n\t\t\t\t{ start: 2, end: 2 },\n\t\t\t\t{ start: 5, end: 5 },\n\t\t\t\t{ start: 8, end: 8 },\n\t\t\t]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [\n\t\t\t\t{ start: 2, end: 2 },\n\t\t\t\t{ start: 5, end: 5 },\n\t\t\t\t{ start: 8, end: 8 },\n\t\t\t]);\n\t\t});\n\n\t\tit(\"ignores remote changes that would be overridden by multiple local ones\", () => {\n\t\t\t// The idea of this test is to verify multiple pending local changes are tracked accurately.\n\t\t\t// No tracking at all of pending changes would cause collection 1 to see all 5 values: 0, 1, 2, 3, 4.\n\t\t\t// Tracking that there is only a local change, but not which one it was might cause collection 1 to\n\t\t\t// see 4 values: 0, 2, 3, 4.\n\t\t\t// Correct tracking should cause collection1 to only see 3 values: 0, 2, 4\n\t\t\tsharedString.insertText(0, \"ABCDEF\");\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tconst endpointsForCollection1: { start: number; end: number }[] = [];\n\t\t\tconst sequenceIntervalToEndpoints = (\n\t\t\t\tinterval: SequenceInterval,\n\t\t\t): { start: number; end: number } => ({\n\t\t\t\tstart: sharedString.localReferencePositionToPosition(interval.start),\n\t\t\t\tend: sharedString.localReferencePositionToPosition(interval.end),\n\t\t\t});\n\n\t\t\tcollection1.on(\"addInterval\", (interval) => {\n\t\t\t\tendpointsForCollection1.push(sequenceIntervalToEndpoints(interval));\n\t\t\t});\n\t\t\tcollection1.on(\"changeInterval\", (interval) => {\n\t\t\t\tconst { start, end } = sequenceIntervalToEndpoints(interval);\n\t\t\t\t// IntervalCollection is a bit noisy when it comes to change events; this logic makes sure\n\t\t\t\t// to only append for actually changed values.\n\t\t\t\tconst prevValue = endpointsForCollection1[endpointsForCollection1.length - 1];\n\t\t\t\tif (prevValue.start !== start || prevValue.end !== end) {\n\t\t\t\t\tendpointsForCollection1.push({ start, end });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst id = collection1.add({ start: 0, end: 0 }).getIntervalId();\n\t\t\tassert(id);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\n\t\t\tcollection2.change(id, { start: 1, end: 1 });\n\t\t\tcollection1.change(id, { start: 2, end: 2 });\n\n\t\t\tassertIntervalEquals(sharedString2, collection2.getIntervalById(id), {\n\t\t\t\tstart: 1,\n\t\t\t\tend: 1,\n\t\t\t});\n\t\t\tassertIntervalEquals(sharedString, collection1.getIntervalById(id), {\n\t\t\t\tstart: 2,\n\t\t\t\tend: 2,\n\t\t\t});\n\n\t\t\tcollection2.change(id, { start: 3, end: 3 });\n\t\t\tcollection1.change(id, { start: 4, end: 4 });\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.deepEqual(endpointsForCollection1, [\n\t\t\t\t{ start: 0, end: 0 },\n\t\t\t\t{ start: 2, end: 2 },\n\t\t\t\t{ start: 4, end: 4 },\n\t\t\t]);\n\t\t});\n\n\t\tit(\"propagates delete op to second runtime\", async () => {\n\t\t\t// Create and connect a second SharedString.\n\t\t\tconst runtime2 = new MockFluidDataStoreRuntime();\n\t\t\tcontainerRuntimeFactory.createContainerRuntime(runtime2);\n\t\t\tsharedString2 = new SharedString(\n\t\t\t\truntime2,\n\t\t\t\t\"shared-string-2\",\n\t\t\t\tSharedStringFactory.Attributes,\n\t\t\t);\n\t\t\tconst services2: IChannelServices = {\n\t\t\t\tdeltaConnection: runtime2.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\tsharedString2.initializeLocal();\n\t\t\tsharedString2.connect(services2);\n\n\t\t\tsharedString.insertText(0, \"hello friend\");\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst interval = collection1.add({ start: 6, end: 8 }); // the \"fr\" in \"friend\"\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tcollection1.removeIntervalById(intervalId);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString2, collection2, []);\n\t\t});\n\n\t\tit(\"can round trip intervals\", async () => {\n\t\t\tsharedString.insertText(0, \"ABCDEF\");\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\n\t\t\tconst id = collection1.add({ start: 2, end: 2 }).getIntervalId();\n\t\t\tassert(id);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst summaryTree = await sharedString.summarize();\n\n\t\t\tconst services: IChannelServices = {\n\t\t\t\tdeltaConnection: new MockEmptyDeltaConnection(),\n\t\t\t\tobjectStorage: MockStorage.createFromSummary(summaryTree.summary),\n\t\t\t};\n\n\t\t\tconst dataStoreRuntime2 = new MockFluidDataStoreRuntime();\n\t\t\tconst sharedString3 = new SharedString(\n\t\t\t\tdataStoreRuntime2,\n\t\t\t\t\"shared-string-3\",\n\t\t\t\tSharedStringFactory.Attributes,\n\t\t\t);\n\n\t\t\tawait sharedString3.load(services);\n\t\t\tawait sharedString3.loaded;\n\n\t\t\tconst collection2 = sharedString3.getIntervalCollection(\"test\");\n\n\t\t\tassertIntervalEquals(sharedString, collection1.getIntervalById(id), {\n\t\t\t\tstart: 2,\n\t\t\t\tend: 2,\n\t\t\t});\n\t\t\tassertIntervalEquals(sharedString3, collection2.getIntervalById(id), {\n\t\t\t\tstart: 2,\n\t\t\t\tend: 2,\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"intervalCollection comparator consistency\", () => {\n\t\t\t// This is a regression suite for an issue caught by fuzz testing:\n\t\t\t// if intervals A, B, C are created which initially compare A < B < C,\n\t\t\t// it's possible that string operations can change this order. Specifically,\n\t\t\t// removing substrings of text can make LocalReferences which previously compared\n\t\t\t// unequal now compare equal. Since the interval comparator is lexicographical on\n\t\t\t// the array [start reference, end reference, id], collapsing previously-unequal\n\t\t\t// references to now equal ones can cause issues.\n\t\t\t// The immediate way this manifests is that attempting to remove the interval fails\n\t\t\t// in red-black tree code, since the key isn't at the expected location.\n\t\t\tlet collection: IIntervalCollection<SequenceInterval>;\n\t\t\tbeforeEach(() => {\n\t\t\t\tsharedString.insertText(0, \"ABCDEFG\");\n\t\t\t\tcollection = sharedString.getIntervalCollection(\"test\");\n\t\t\t});\n\n\t\t\tit(\"retains intervalTree coherency when falling back to end comparison\", () => {\n\t\t\t\tcollection.add({ start: 1, end: 6 });\n\t\t\t\tcollection.add({ start: 2, end: 5 });\n\t\t\t\tconst initiallyLargest = collection.add({ start: 3, end: 4 });\n\t\t\t\tsharedString.removeRange(1, 4);\n\t\t\t\t// Interval slide doesn't happen until creation is acked, so interval sort order\n\t\t\t\t// is still by start position, which do not compare equal despite all appearing to be 1\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 3 },\n\t\t\t\t\t{ start: 1, end: 2 },\n\t\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t]);\n\t\t\t\tconst initiallyLargestId = initiallyLargest.getIntervalId();\n\t\t\t\tassert(initiallyLargestId);\n\t\t\t\tcollection.removeIntervalById(initiallyLargestId);\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 3 },\n\t\t\t\t\t{ start: 1, end: 2 },\n\t\t\t\t]);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\t// After processing messages, intervals slide and order is as expected.\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 2 },\n\t\t\t\t\t{ start: 1, end: 3 },\n\t\t\t\t]);\n\t\t\t});\n\n\t\t\tit(\"retains intervalTree coherency after slide when falling back to end comparison\", () => {\n\t\t\t\tcollection.add({ start: 1, end: 6 });\n\t\t\t\tcollection.add({ start: 2, end: 5 });\n\t\t\t\tconst initiallyLargest = collection.add({ start: 3, end: 4 });\n\t\t\t\tsharedString.removeRange(1, 4);\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 3 },\n\t\t\t\t\t{ start: 1, end: 2 },\n\t\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t]);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t\t{ start: 1, end: 2 },\n\t\t\t\t\t{ start: 1, end: 3 },\n\t\t\t\t]);\n\t\t\t\tconst initiallyLargestId = initiallyLargest.getIntervalId();\n\t\t\t\tassert(initiallyLargestId);\n\t\t\t\tcollection.removeIntervalById(initiallyLargestId);\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 2 },\n\t\t\t\t\t{ start: 1, end: 3 },\n\t\t\t\t]);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 2 },\n\t\t\t\t\t{ start: 1, end: 3 },\n\t\t\t\t]);\n\t\t\t});\n\n\t\t\tit(\"retains intervalTree coherency when falling back to id comparison\", () => {\n\t\t\t\tconst [idLowest, idMiddle, idLargest] = [\"a\", \"b\", \"c\"];\n\t\t\t\tcollection.add({ start: 0, end: 1, props: { intervalId: idLargest } });\n\t\t\t\tcollection.add({ start: 0, end: 2, props: { intervalId: idMiddle } });\n\t\t\t\tcollection.add({ start: 0, end: 3, props: { intervalId: idLowest } });\n\t\t\t\tsharedString.removeRange(1, 4);\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t]);\n\t\t\t\tcollection.removeIntervalById(idLowest);\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t]);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t]);\n\t\t\t});\n\n\t\t\tit(\"retains intervalTree coherency after slide when falling back to id comparison\", () => {\n\t\t\t\tconst [idLowest, idMiddle, idLargest] = [\"a\", \"b\", \"c\"];\n\t\t\t\tcollection.add({ start: 0, end: 1, props: { intervalId: idLargest } });\n\t\t\t\tcollection.add({ start: 0, end: 2, props: { intervalId: idMiddle } });\n\t\t\t\tcollection.add({ start: 0, end: 3, props: { intervalId: idLowest } });\n\t\t\t\tsharedString.removeRange(1, 4);\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t]);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t]);\n\t\t\t\tcollection.removeIntervalById(idLowest);\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t]);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t\t{ start: 0, end: 1 },\n\t\t\t\t]);\n\t\t\t});\n\n\t\t\tit(\"retains intervalTree coherency after slide on create ack\", () => {\n\t\t\t\t// The code in createAck needs to change the reference positions for an interval.\n\t\t\t\t// The test verifies that is done correctly and that the listener is added\n\t\t\t\t// to fix the interval position on subsequent slide.\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tcollection.add({ start: 4, end: 4 });\n\t\t\t\tcollection.add({ start: 4, end: 5 });\n\n\t\t\t\tsharedString2.removeRange(1, 2);\n\n\t\t\t\tconst initiallySmallest = collection.add({ start: 1, end: 6 });\n\n\t\t\t\tsharedString2.removeRange(1, 3);\n\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 6 },\n\t\t\t\t\t{ start: 4, end: 4 },\n\t\t\t\t\t{ start: 4, end: 5 },\n\t\t\t\t]);\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t\t{ start: 1, end: 2 },\n\t\t\t\t\t{ start: 1, end: 3 },\n\t\t\t\t]);\n\t\t\t\tconst initiallySmallestId = initiallySmallest.getIntervalId();\n\t\t\t\tassert(initiallySmallestId);\n\t\t\t\tcollection.removeIntervalById(initiallySmallestId);\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t\t{ start: 1, end: 2 },\n\t\t\t\t]);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassertSequenceIntervals(sharedString, collection, [\n\t\t\t\t\t{ start: 1, end: 1 },\n\t\t\t\t\t{ start: 1, end: 2 },\n\t\t\t\t]);\n\t\t\t});\n\t\t});\n\n\t\tit(\"test IntervalCollection creation events\", () => {\n\t\t\tlet createCalls1 = 0;\n\t\t\tconst createInfo1: { local: boolean; label: string }[] = [];\n\t\t\tconst createCallback1 = (label: string, local: boolean, target: SharedString) => {\n\t\t\t\tassert.strictEqual(target, sharedString, \"Expected event to target sharedString\");\n\t\t\t\tcreateInfo1[createCalls1++] = { local, label };\n\t\t\t};\n\t\t\tsharedString.on(\"createIntervalCollection\", createCallback1);\n\n\t\t\tlet createCalls2 = 0;\n\t\t\tconst createInfo2: { local: boolean; label: string }[] = [];\n\t\t\tconst createCallback2 = (label: string, local: boolean, target: SharedString) => {\n\t\t\t\tassert.strictEqual(target, sharedString2, \"Expected event to target sharedString2\");\n\t\t\t\tcreateInfo2[createCalls2++] = { local, label };\n\t\t\t};\n\t\t\tsharedString2.on(\"createIntervalCollection\", createCallback2);\n\n\t\t\tsharedString.insertText(0, \"hello world\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst collection1: IIntervalCollection<SequenceInterval> =\n\t\t\t\tsharedString.getIntervalCollection(\"test1\");\n\t\t\tconst interval1 = collection1.add({ start: 0, end: 1 });\n\t\t\tconst intervalId1 = interval1.getIntervalId();\n\t\t\tassert(intervalId1);\n\t\t\tcollection1.change(intervalId1, { start: 1, end: 4 });\n\n\t\t\tconst collection2: IIntervalCollection<SequenceInterval> =\n\t\t\t\tsharedString2.getIntervalCollection(\"test2\");\n\t\t\tconst interval2 = collection2.add({ start: 0, end: 2 });\n\t\t\tconst intervalId2 = interval2.getIntervalId();\n\t\t\tassert(intervalId2);\n\t\t\tcollection2.removeIntervalById(intervalId2);\n\n\t\t\tconst collection3: IIntervalCollection<SequenceInterval> =\n\t\t\t\tsharedString2.getIntervalCollection(\"test3\");\n\t\t\tcollection3.add({ start: 0, end: 3 });\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst verifyCreateEvents = (s: SharedString, createInfo, infoArray) => {\n\t\t\t\tlet i = 0;\n\t\t\t\tconst labels = s.getIntervalCollectionLabels();\n\t\t\t\tfor (const label of labels) {\n\t\t\t\t\tassert.equal(label, infoArray[i].label, `Bad label ${i}: ${label}`);\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\tcreateInfo[i].label,\n\t\t\t\t\t\t`Bad label ${i}: ${createInfo[i].label}`,\n\t\t\t\t\t);\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\tcreateInfo[i].local,\n\t\t\t\t\t\tinfoArray[i].local,\n\t\t\t\t\t\t`Bad local value ${i}: ${createInfo[i].local}`,\n\t\t\t\t\t);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\tassert.equal(\n\t\t\t\t\tinfoArray.length,\n\t\t\t\t\tcreateInfo.length,\n\t\t\t\t\t`Wrong number of create calls: ${i}`,\n\t\t\t\t);\n\t\t\t};\n\t\t\tverifyCreateEvents(sharedString, createInfo1, [\n\t\t\t\t{ label: \"test1\", local: true },\n\t\t\t\t{ label: \"test2\", local: false },\n\t\t\t\t{ label: \"test3\", local: false },\n\t\t\t]);\n\t\t\tverifyCreateEvents(sharedString2, createInfo2, [\n\t\t\t\t{ label: \"test2\", local: true },\n\t\t\t\t{ label: \"test3\", local: true },\n\t\t\t\t{ label: \"test1\", local: false },\n\t\t\t]);\n\t\t});\n\n\t\tit(\"can be concurrently created\", () => {\n\t\t\tsharedString.insertText(0, \"hello world\");\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.equal(Array.from(collection1).length, 0);\n\t\t\tassert.equal(Array.from(collection2).length, 0);\n\t\t});\n\n\t\tit(\"doesn't slide references on ack if there are pending remote changes\", () => {\n\t\t\tsharedString.insertText(0, \"ABCDEF\");\n\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tsharedString.removeRange(3, 6);\n\t\t\tconst interval = collection2.add({ start: 3, end: 4 });\n\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tcollection2.change(intervalId, { start: 1, end: 5 });\n\n\t\t\tassert.equal(\n\t\t\t\tcontainerRuntimeFactory.outstandingMessageCount,\n\t\t\t\t3,\n\t\t\t\t\"Unexpected number of ops\",\n\t\t\t);\n\t\t\tcontainerRuntimeFactory.processOneMessage();\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [\n\t\t\t\t{ start: 1, end: 3 /* hasn't yet been acked */ },\n\t\t\t]);\n\t\t\tcontainerRuntimeFactory.processOneMessage();\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [\n\t\t\t\t{ start: 1, end: 3 /* hasn't yet been acked */ },\n\t\t\t]);\n\t\t\tcontainerRuntimeFactory.processOneMessage();\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 1, end: 2 }]);\n\n\t\t\tassert.equal(sharedString.getText(), \"ABC\");\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 1, end: 2 }]);\n\t\t});\n\n\t\tdescribe(\"have eventually consistent property sets\", () => {\n\t\t\tit(\"when an interval is modified with a pending change\", () => {\n\t\t\t\tsharedString.insertText(0, \"ABC\");\n\t\t\t\tconst collection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\t\tconst collection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\t\tconst interval = collection1.add({ start: 0, end: 0 });\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst id = interval.getIntervalId();\n\t\t\t\tassert(id);\n\t\t\t\tcollection1.change(id, { start: 1, end: 1 });\n\t\t\t\tcollection1.change(id, { props: { propName: \"losing value\" } });\n\t\t\t\tcollection2.change(id, { props: { propName: \"winning value\" } });\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tassert.equal(collection1.getIntervalById(id)?.properties.propName, \"winning value\");\n\t\t\t\tassert.equal(collection2.getIntervalById(id)?.properties.propName, \"winning value\");\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"reconnect\", () => {\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactoryForReconnection;\n\t\tlet containerRuntime1: MockContainerRuntimeForReconnection;\n\t\tlet containerRuntime2: MockContainerRuntimeForReconnection;\n\t\tlet sharedString2: SharedString;\n\n\t\tlet collection1: IIntervalCollection<SequenceInterval>;\n\t\tlet collection2: IIntervalCollection<SequenceInterval>;\n\t\tlet interval: SequenceInterval;\n\n\t\tbeforeEach(async () => {\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactoryForReconnection();\n\n\t\t\t// Connect the first SharedString.\n\t\t\tcontainerRuntime1 = containerRuntimeFactory.createContainerRuntime(dataStoreRuntime1);\n\t\t\tconst services1: IChannelServices = {\n\t\t\t\tdeltaConnection: dataStoreRuntime1.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\tsharedString.initializeLocal();\n\t\t\tsharedString.connect(services1);\n\n\t\t\t// Create and connect a second SharedString.\n\t\t\tconst runtime2 = new MockFluidDataStoreRuntime({ clientId: \"2\" });\n\t\t\tcontainerRuntime2 = containerRuntimeFactory.createContainerRuntime(runtime2);\n\t\t\tsharedString2 = new SharedString(\n\t\t\t\truntime2,\n\t\t\t\t\"shared-string-2\",\n\t\t\t\tSharedStringFactory.Attributes,\n\t\t\t);\n\t\t\tconst services2: IChannelServices = {\n\t\t\t\tdeltaConnection: runtime2.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\tsharedString2.initializeLocal();\n\t\t\tsharedString2.connect(services2);\n\n\t\t\tsharedString.insertText(0, \"hello friend\");\n\t\t\tcollection1 = sharedString.getIntervalCollection(\"test\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tcollection2 = sharedString2.getIntervalCollection(\"test\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t// Note: at the start of each test, this interval is only visible to client 1.\n\t\t\tinterval = collection1.add({ start: 6, end: 8 }); // the \"fr\" in \"friend\"\n\t\t});\n\n\t\tit(\"addInterval resubmitted with concurrent insert\", async () => {\n\t\t\tcontainerRuntime1.connected = false;\n\n\t\t\tsharedString2.insertText(7, \"amily its my f\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tcontainerRuntime1.connected = true;\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.equal(sharedString2.getText(), \"hello family its my friend\");\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 6, end: 22 }]);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 6, end: 22 }]);\n\t\t});\n\n\t\t// This is useful to ensure rebasing reconnection ops doesn't take into account local string state\n\t\t// that has been applied since the interval addition.\n\t\tit(\"addInterval and string operations resubmitted with concurrent insert\", async () => {\n\t\t\tcontainerRuntime1.connected = false;\n\n\t\t\tsharedString2.insertText(7, \"amily its my f\");\n\t\t\tsharedString.removeText(0, 5);\n\t\t\tsharedString.insertText(0, \"hi\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tcontainerRuntime1.connected = true;\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.equal(sharedString2.getText(), \"hi family its my friend\");\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 3, end: 19 }]);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 3, end: 19 }]);\n\t\t});\n\n\t\tdescribe(\"correctly tracks pendingChanges for\", () => {\n\t\t\t// This is a regression suite for an issue involving faulty update of the pendingChange maps\n\t\t\t// when both an add and a change op are rebased. Pending change tracking should only apply\n\t\t\t// to \"change\" ops, but was also erroneously updated for \"add\" ops. Change tracking should also\n\t\t\t// properly handle rebasing ops that only affect one endpoint.\n\n\t\t\tit(\"an add followed by a change\", () => {\n\t\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\t\tassert(intervalId);\n\t\t\t\tcollection1.removeIntervalById(intervalId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\tconst newInterval = collection1.add({ start: 0, end: 1 });\n\t\t\t\tsharedString.insertText(2, \"llo he\");\n\t\t\t\tconst newIntervalId = newInterval.getIntervalId();\n\t\t\t\tassert(newIntervalId);\n\t\t\t\tcollection1.change(newIntervalId, { start: 6, end: 7 });\n\t\t\t\t// Previously would fail: rebase of the \"add\" op would cause \"Mismatch in pending changes\"\n\t\t\t\t// assert to fire (since the pending change wasn't actually the addition of the interval;\n\t\t\t\t// it was the change)\n\t\t\t\tcontainerRuntime1.connected = true;\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst expectedIntervals = [{ start: 6, end: 7 }];\n\t\t\t\tassertSequenceIntervals(sharedString, collection1, expectedIntervals);\n\t\t\t\tassertSequenceIntervals(sharedString2, collection2, expectedIntervals);\n\t\t\t});\n\n\t\t\tit(\"a change\", () => {\n\t\t\t\t// Like above, but the string-modifying operation is performed remotely. This means the pendingChange\n\t\t\t\t// recorded prior to rebasing will have a different index from the pendingChange that would be generated\n\t\t\t\t// upon rebasing (so failing to update would cause mismatch)\n\t\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\t\tconst start = 6;\n\t\t\t\tconst end = 7;\n\t\t\t\tassert(intervalId);\n\t\t\t\tcollection1.removeIntervalById(intervalId);\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tcontainerRuntime1.connected = false;\n\t\t\t\tconst newInterval = collection1.add({ start: 0, end: 1 });\n\t\t\t\tsharedString2.insertText(2, \"llo he\");\n\t\t\t\tconst newIntervalId = newInterval.getIntervalId();\n\t\t\t\tassert(newIntervalId);\n\t\t\t\tcollection1.change(newIntervalId, { start, end });\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tcontainerRuntime1.connected = true;\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst expectedStart = start + \"llo he\".length;\n\t\t\t\tconst expectedEnd = end + \"llo he\".length;\n\t\t\t\tconst expectedIntervals = [{ start: expectedStart ?? 0, end: expectedEnd }];\n\t\t\t\tassertSequenceIntervals(sharedString, collection1, expectedIntervals);\n\t\t\t\tassertSequenceIntervals(sharedString2, collection2, expectedIntervals);\n\t\t\t});\n\t\t});\n\n\t\tit(\"can rebase a change operation to positions that are invalid in the current view\", () => {\n\t\t\t// This is a regression test for an issue in which attempting to rebase an interval op could hit\n\t\t\t// issues in local position validation. The root cause was that the rebase logic round-tripped its\n\t\t\t// rebase positions through a SequenceInterval (i.e. constructed an interval with the desired rebase\n\t\t\t// positions, then serialized it). The problem is that interval isn't always valid to construct on\n\t\t\t// the state of the local client's merge tree.\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tcontainerRuntime1.connected = false;\n\t\t\t// Since there aren't any other ops, the idea is the rebased version of this op would be the same as\n\t\t\t// the original version. However, at the time the client is rebasing, it only has a single character of\n\t\t\t// text. So it's impossible to generate valid LocalReference_s with positions that evaluate to 8 and 9\n\t\t\t// as the original problematic implementation did.\n\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tcollection1.change(intervalId, { start: 8, end: 9 });\n\t\t\tsharedString.removeRange(1, sharedString.getLength());\n\t\t\tcontainerRuntime1.connected = true;\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 0, end: 0 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 0, end: 0 }]);\n\t\t});\n\n\t\tit(\"can rebase changeProperty ops\", () => {\n\t\t\tcontainerRuntime1.connected = false;\n\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tcollection1.change(intervalId, { props: { foo: \"prop\" } });\n\t\t\tcontainerRuntime1.connected = true;\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 6, end: 8 }]);\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 6, end: 8 }]);\n\t\t\tconst interval2 = collection2.getIntervalById(intervalId);\n\t\t\tassert.equal(interval2?.properties.foo, \"prop\");\n\t\t\tassert.equal(interval.properties.foo, \"prop\");\n\t\t});\n\n\t\tit(\"addInterval resubmitted with concurrent delete\", async () => {\n\t\t\tcontainerRuntime1.connected = false;\n\n\t\t\tsharedString2.removeText(5, 9);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tcontainerRuntime1.connected = true;\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.equal(sharedString2.getText(), \"helloend\");\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 5, end: 5 }]);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 5, end: 5 }]);\n\t\t});\n\n\t\tit(\"delete resubmitted with concurrent insert\", async () => {\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tcontainerRuntime1.connected = false;\n\n\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tcollection1.removeIntervalById(intervalId);\n\t\t\tsharedString2.insertText(7, \"amily its my f\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tcontainerRuntime1.connected = true;\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\t// Verify that the changes were correctly received by the second SharedString\n\t\t\tassert.equal(sharedString2.getText(), \"hello family its my friend\");\n\t\t\tassertSequenceIntervals(sharedString2, collection2, []);\n\t\t\tassertSequenceIntervals(sharedString, collection1, []);\n\t\t});\n\n\t\tit(\"change resubmitted with concurrent insert\", async () => {\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tcontainerRuntime1.connected = false;\n\n\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tcollection1.change(intervalId, { start: 5, end: 9 }); // \" fri\"\n\t\t\tsharedString2.insertText(7, \"amily its my f\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tcontainerRuntime1.connected = true;\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.equal(sharedString2.getText(), \"hello family its my friend\");\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 5, end: 23 }]);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 5, end: 23 }]);\n\t\t});\n\n\t\tit(\"change resubmitted with concurrent delete\", async () => {\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tcontainerRuntime1.connected = false;\n\n\t\t\tconst intervalId = interval.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tcollection1.change(intervalId, { start: 5, end: 9 }); // \" fri\"\n\t\t\tsharedString2.removeText(8, 10);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tcontainerRuntime1.connected = true;\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.equal(sharedString2.getText(), \"hello frnd\");\n\t\t\tassertSequenceIntervals(sharedString2, collection2, [{ start: 5, end: 8 }]);\n\t\t\tassertSequenceIntervals(sharedString, collection1, [{ start: 5, end: 8 }]);\n\t\t});\n\t});\n\n\tdescribe(\"querying intervals with index API's\", () => {\n\t\tdescribe(\"support attaching/detaching an index\", () => {\n\t\t\tlet collection;\n\t\t\tlet mockIntervalIndex;\n\t\t\tlet id1;\n\t\t\tlet id2;\n\n\t\t\tbeforeEach(() => {\n\t\t\t\tsharedString.initializeLocal();\n\t\t\t\tcollection = sharedString.getIntervalCollection(\"test\");\n\t\t\t\tsharedString.insertText(0, \"xyzabc\");\n\t\t\t\tid1 = collection.add({ start: 1, end: 1 }).getIntervalId();\n\t\t\t\tid2 = collection.add({ start: 1, end: 3 }).getIntervalId();\n\n\t\t\t\tmockIntervalIndex = new MockIntervalIndex();\n\t\t\t\tcollection.attachIndex(mockIntervalIndex);\n\t\t\t});\n\n\t\t\tit(\"can add all intervals in collection to the attached index\", () => {\n\t\t\t\tassert.strictEqual(collection.getIntervalById(id1), mockIntervalIndex.get(0));\n\t\t\t\tassert.strictEqual(collection.getIntervalById(id2), mockIntervalIndex.get(1));\n\t\t\t});\n\n\t\t\tit(\"the intervals in attached index should be synced with those in collection after updating\", () => {\n\t\t\t\tconst id3 = collection.add({ start: 2, end: 5 }).getIntervalId();\n\t\t\t\tassert.strictEqual(collection.getIntervalById(id3), mockIntervalIndex.get(2));\n\t\t\t\tcollection.removeIntervalById(id2);\n\t\t\t\tassert.strictEqual(collection.getIntervalById(id1), mockIntervalIndex.get(0));\n\t\t\t\tassert.strictEqual(collection.getIntervalById(id3), mockIntervalIndex.get(1));\n\t\t\t});\n\n\t\t\tit(\"detached index should not affect the intervals in collection\", () => {\n\t\t\t\tassert.equal(collection.detachIndex(mockIntervalIndex), true);\n\t\t\t\tassert.equal(mockIntervalIndex.size(), 0);\n\t\t\t\tassertIntervalEquals(sharedString, collection.getIntervalById(id1), {\n\t\t\t\t\tstart: 1,\n\t\t\t\t\tend: 1,\n\t\t\t\t});\n\t\t\t\tassertIntervalEquals(sharedString, collection.getIntervalById(id2), {\n\t\t\t\t\tstart: 1,\n\t\t\t\t\tend: 3,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tit(\"can not detach the index does not exist\", () => {\n\t\t\t\tassert.equal(collection.detachIndex(mockIntervalIndex), true);\n\t\t\t\tassert.equal(collection.detachIndex(mockIntervalIndex), false);\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"maintain consistency between the collection label and that in interval properties\", () => {\n\t\tlet collection;\n\n\t\tbeforeEach(() => {\n\t\t\tsharedString.initializeLocal();\n\t\t\tcollection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"xyz\");\n\t\t});\n\n\t\tit(\"can not insert the interval which does not belong to this collection\", () => {\n\t\t\tassert.throws(\n\t\t\t\t() => {\n\t\t\t\t\tcollection.add({\n\t\t\t\t\t\tstart: 1,\n\t\t\t\t\t\tend: 1,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t[reservedRangeLabelsKey]: [\"test2\"],\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tLoggingError,\n\t\t\t\t\"The collection is unable to add an interval which does not belong to it\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"can not modify the interval's label after it has been inserted to the collection\", () => {\n\t\t\tconst id = collection.add({ start: 1, end: 1 }).getIntervalId();\n\t\t\tassert.throws(\n\t\t\t\t() => {\n\t\t\t\t\tcollection.change(id, { props: { [reservedRangeLabelsKey]: [\"test2\"] } });\n\t\t\t\t},\n\t\t\t\tLoggingError,\n\t\t\t\t\"The label property of an interval should not be modified once inserted to the collection\",\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"interval stickiness\", () => {\n\t\tlet containerRuntimeFactory: MockContainerRuntimeFactory;\n\n\t\tbeforeEach(() => {\n\t\t\tdataStoreRuntime1 = new MockFluidDataStoreRuntime({ clientId: \"1\" });\n\t\t\tdataStoreRuntime1.options = {\n\t\t\t\tintervalStickinessEnabled: true,\n\t\t\t\tmergeTreeReferencesCanSlideToEndpoint: true,\n\t\t\t};\n\t\t\tsharedString = new SharedString(\n\t\t\t\tdataStoreRuntime1,\n\t\t\t\t\"shared-string-1\",\n\t\t\t\tSharedStringFactory.Attributes,\n\t\t\t);\n\n\t\t\tcontainerRuntimeFactory = new MockContainerRuntimeFactory();\n\t\t\tdataStoreRuntime1.setAttachState(AttachState.Attached);\n\t\t\tconst containerRuntime1 =\n\t\t\t\tcontainerRuntimeFactory.createContainerRuntime(dataStoreRuntime1);\n\t\t\tconst services1 = {\n\t\t\t\tdeltaConnection: containerRuntime1.createDeltaConnection(),\n\t\t\t\tobjectStorage: new MockStorage(),\n\t\t\t};\n\t\t\tsharedString.initializeLocal();\n\t\t\tsharedString.connect(services1);\n\t\t});\n\n\t\tit(\"has start stickiness\", () => {\n\t\t\t// (-Xabc)-\n\t\t\t// (-Xdefabc)-\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"Xabc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: \"start\",\n\t\t\t\tend: { pos: 3, side: Side.After },\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.START);\n\t\t\tassert.equal(interval1.startSide, Side.Before);\n\t\t\tassert.equal(interval1.endSide, Side.After);\n\t\t\tassert.equal(interval1.start.slidingPreference, SlidingPreference.BACKWARD);\n\t\t\tassert.equal(interval1.end.slidingPreference, SlidingPreference.BACKWARD);\n\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.insertText(1, \"def\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"Xdefabc\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 6 }]);\n\t\t});\n\n\t\tit(\"has start stickiness during delete inside interval\", () => {\n\t\t\t// (-Xabc)-\n\t\t\t// (-Xdefabc)-\n\t\t\t// (-Xfabc)-\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"Xabc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({ start: \"start\", end: { pos: 3, side: Side.After } });\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.START);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.insertText(1, \"def\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tsharedString.removeRange(1, 3);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"Xfabc\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 4 }]);\n\t\t});\n\n\t\tit(\"has start stickiness during delete of start of interval\", () => {\n\t\t\t// -abc(Xdef]-\n\t\t\t// -abc(Xghidef]-\n\t\t\t// -(aghidef]-\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abcXdef\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: { pos: 3, side: Side.After },\n\t\t\t\tend: { pos: 6, side: Side.After },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.START);\n\t\t\tassert.equal(interval1.startSide, Side.After);\n\t\t\tassert.equal(interval1.endSide, Side.After);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.insertText(4, \"ghi\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"abcXghidef\", \"different text\");\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 3, end: 9 }]);\n\n\t\t\tsharedString.removeRange(1, 4);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(interval1.start.getSegment()?.constructor.name, \"TextSegment\");\n\t\t\tassert.strictEqual(interval1.start.getSegment()?.isLeaf(), true);\n\t\t\tassert.strictEqual(interval1.end.getSegment()?.constructor.name, \"TextSegment\");\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"aghidef\", \"different text\");\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 6 }]);\n\t\t});\n\n\t\tit(\"has start stickiness when spanning whole string and insertion at index 0\", () => {\n\t\t\t// (-abc]-\n\t\t\t// (-Xabc]-\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({ start: \"start\", end: { pos: 2, side: Side.After } });\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.START);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.insertText(0, \"X\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(\n\t\t\t\tinterval1.start.getSegment()?.constructor.name,\n\t\t\t\t\"StartOfTreeSegment\",\n\t\t\t);\n\t\t\tassert.strictEqual(interval1.end.getSegment()?.constructor.name, \"TextSegment\");\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"Xabc\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 3 }], false);\n\t\t});\n\n\t\tit(\"has full stickiness when spanning whole string and insertion at index 0\", () => {\n\t\t\t// (-abc)-\n\t\t\t// (-Xabc)-\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: \"start\",\n\t\t\t\tend: { pos: 2, side: Side.Before },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.FULL);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.insertText(0, \"X\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(\n\t\t\t\tinterval1.start.getSegment()?.constructor.name,\n\t\t\t\t\"StartOfTreeSegment\",\n\t\t\t);\n\t\t\tassert.strictEqual(interval1.end.getSegment()?.constructor.name, \"TextSegment\");\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"Xabc\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 3 }], false);\n\t\t});\n\n\t\tit(\"has end stickiness when spanning whole string and insertion at index 0\", () => {\n\t\t\t// -[abc-)\n\t\t\t// -X[abc-)\n\t\t\t// -X[abcX-)\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({ start: 0, end: \"end\" });\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.END);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.insertText(0, \"X\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(interval1.start.getSegment()?.constructor.name, \"TextSegment\");\n\t\t\tassert.strictEqual(interval1.end.getSegment()?.constructor.name, \"EndOfTreeSegment\");\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"Xabc\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 1, end: 4 }], false);\n\n\t\t\tsharedString.insertText(4, \"X\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.strictEqual(interval1.start.getSegment()?.constructor.name, \"TextSegment\");\n\t\t\tassert.strictEqual(interval1.end.getSegment()?.constructor.name, \"EndOfTreeSegment\");\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"XabcX\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 1, end: 5 }], false);\n\t\t});\n\n\t\tit(\"full stickiness doesn't slide off string when entire string is deleted\", () => {\n\t\t\t// -(abc)def-\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abcdef\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: { pos: 0, side: Side.After },\n\t\t\t\tend: { pos: 2, side: Side.Before },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.FULL);\n\t\t\tassert.equal(interval1.startSide, Side.After);\n\t\t\tassert.equal(interval1.endSide, Side.Before);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.removeRange(0, 6);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tsharedString.insertText(0, \"XXX\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"XXX\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 3 }], false);\n\t\t});\n\n\t\tit(\"none stickiness slides off string when entire string is deleted\", () => {\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: { pos: 1, side: Side.Before },\n\t\t\t\tend: { pos: 2, side: Side.After },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.NONE);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.removeRange(0, 3);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tsharedString.insertText(0, \"XXX\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"XXX\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: -1, end: -1 }], false);\n\t\t});\n\n\t\tit(\"none stickiness slides off string when entire string is deleted incrementally\", () => {\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: { pos: 1, side: Side.Before },\n\t\t\t\tend: { pos: 2, side: Side.After },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.NONE);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tsharedString.insertText(0, \"XXX\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"XXX\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: -1, end: -1 }], false);\n\t\t});\n\n\t\tit(\"full stickiness doesn't slide off string when entire string is deleted incrementally\", () => {\n\t\t\t// -(abc)-\n\t\t\t// (--)\n\t\t\t// (-XXX-)\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: { pos: 0, side: Side.After },\n\t\t\t\tend: { pos: 2, side: Side.Before },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.FULL);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\tsharedString.removeRange(0, 1);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tsharedString.insertText(0, \"XXX\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"XXX\", \"different text\");\n\n\t\t\tassert.strictEqual(interval1.start.slidingPreference, SlidingPreference.BACKWARD);\n\t\t\tassert.strictEqual(interval1.end.slidingPreference, SlidingPreference.FORWARD);\n\t\t\tassert.strictEqual(\n\t\t\t\tinterval1.start.getSegment()?.constructor.name,\n\t\t\t\t\"StartOfTreeSegment\",\n\t\t\t);\n\t\t\tassert.strictEqual(interval1.end.getSegment()?.constructor.name, \"EndOfTreeSegment\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 3 }], false);\n\t\t});\n\n\t\tit(\"doesn't have start stickiness when spanning whole string and insertion at index 0\", () => {\n\t\t\t// -[abc-)\n\t\t\t// -X[abc-)\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: { pos: 0, side: Side.Before },\n\t\t\t\tend: \"end\",\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.END);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.insertText(0, \"X\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tassert.notStrictEqual(\n\t\t\t\tinterval1.start.getSegment()?.constructor.name,\n\t\t\t\t\"StartOfTreeSegment\",\n\t\t\t);\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"Xabc\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 1, end: 4 }], false);\n\t\t});\n\n\t\tit(\"slides to endpoint after deleting all text to left of start-sticky+exclusive reference\", () => {\n\t\t\t// -a(bcde]f-\n\t\t\t// (-Xde]f\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abcdef\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: { pos: 1, side: Side.After },\n\t\t\t\tend: { pos: 5, side: Side.After },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.START);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.removeRange(0, 3);\n\t\t\tsharedString.insertText(0, \"X\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"Xdef\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 3 }], false);\n\t\t});\n\n\t\tit(\"has end stickiness\", () => {\n\t\t\t// -[abc)-\n\t\t\t// -[abdefc)-\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: { pos: 0, side: Side.Before },\n\t\t\t\tend: { pos: 2, side: Side.Before },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.END);\n\t\t\tassert.equal(interval1.start.slidingPreference, SlidingPreference.FORWARD);\n\t\t\tassert.equal(interval1.end.slidingPreference, SlidingPreference.FORWARD);\n\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.insertText(2, \"def\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"abdefc\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 5 }]);\n\t\t});\n\n\t\tit(\"has end stickiness during delete of end of interval\", () => {\n\t\t\t// -[abcX)-\n\t\t\t// -[abcf)-\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abcXdef\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: { pos: 0, side: Side.Before },\n\t\t\t\tend: { pos: 4, side: Side.Before },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.END);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tsharedString.removeRange(3, 6);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"abcf\", \"different text\");\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 3 }]);\n\t\t});\n\n\t\tit(\"has end stickiness by default\", () => {\n\t\t\t// [abcX)\n\t\t\t// [abcf)\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abcXdef\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({ start: 0, end: 3 });\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.END);\n\t\t\tassert.equal(interval1.start.slidingPreference, SlidingPreference.FORWARD);\n\t\t\tassert.equal(interval1.end.slidingPreference, SlidingPreference.FORWARD);\n\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tsharedString.removeRange(3, 6);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"abcf\", \"different text\");\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 3 }]);\n\t\t});\n\n\t\tit(\"has none stickiness during insert\", () => {\n\t\t\t// -[ab]c-\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: { pos: 0, side: Side.Before },\n\t\t\t\tend: { pos: 1, side: Side.After },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.NONE);\n\t\t\tassert.equal(interval1.start.slidingPreference, SlidingPreference.FORWARD);\n\t\t\tassert.equal(interval1.end.slidingPreference, SlidingPreference.BACKWARD);\n\t\t\tconst intervalId = interval1.getIntervalId();\n\t\t\tassert(intervalId);\n\t\t\tsharedString.insertText(2, \"def\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(sharedString.getText(), \"abdefc\", \"different text\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 1 }]);\n\t\t});\n\n\t\tit(\"has correct sliding preference for full stickiness\", () => {\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tsharedString.insertText(0, \"abc\");\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst interval1 = collection.add({\n\t\t\t\tstart: \"start\",\n\t\t\t\tend: { pos: 2, side: Side.Before },\n\t\t\t\tprops: undefined,\n\t\t\t});\n\t\t\tassert.equal(interval1.stickiness, IntervalStickiness.FULL);\n\t\t\tassert.equal(interval1.start.slidingPreference, SlidingPreference.BACKWARD);\n\t\t\tassert.equal(interval1.end.slidingPreference, SlidingPreference.FORWARD);\n\t\t});\n\n\t\tit(\"slides backward reference to correct position when remove is unacked\", () => {\n\t\t\tsharedString.insertText(0, \"ABC\");\n\n\t\t\t// (AB]C\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst start = { pos: 0, side: Side.After };\n\t\t\tconst end = { pos: 1, side: Side.After };\n\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tcollection.add({ end, start });\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 1 }]);\n\n\t\t\tsharedString.removeText(1, 2);\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 0 }]);\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 0 }]);\n\t\t});\n\n\t\tit(\"slides backward reference to correct position when remove multiple segments is unacked\", () => {\n\t\t\tsharedString.insertText(0, \"ABC\");\n\n\t\t\t// (AB]C\n\t\t\t// (AYYYXXXB]C\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst start = { pos: 0, side: Side.After };\n\t\t\tconst end = { pos: 1, side: Side.After };\n\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tcollection.add({ end, start });\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 1 }]);\n\n\t\t\tsharedString.insertText(1, \"XXX\");\n\t\t\tsharedString.insertText(1, \"YYY\");\n\t\t\tsharedString.removeText(1, 8);\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 0 }]);\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 0 }]);\n\t\t});\n\n\t\tit(\"slides backward reference to correct position when start of string remove is unacked\", () => {\n\t\t\tsharedString.insertText(0, \"ABC\");\n\n\t\t\t// (AB]C\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst start = { pos: 0, side: Side.After };\n\t\t\tconst end = { pos: 1, side: Side.Before };\n\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tconst interval = collection.add({ end, start });\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 1 }]);\n\n\t\t\tsharedString.removeText(0, 2);\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 0 }]);\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassert.strictEqual(interval.start.getSegment()?.constructor.name, \"StartOfTreeSegment\");\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 0 }]);\n\t\t});\n\n\t\tit.skip(\"slides forward reference to correct position when remove of end of string is unacked\", () => {\n\t\t\tdataStoreRuntime1.options.mergeTreeReferencesCanSlideToEndpoint = false;\n\t\t\tsharedString.insertText(0, \"ABC\");\n\n\t\t\t// (ABC]\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst start = 0;\n\t\t\tconst end = 2;\n\n\t\t\tconst collection = sharedString.getIntervalCollection(\"test\");\n\t\t\tcollection.add({ end, start });\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 2 }]);\n\n\t\t\tsharedString.removeText(1, 3);\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 0 }]);\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tassertSequenceIntervals(sharedString, collection, [{ start: 0, end: 0 }]);\n\t\t});\n\t});\n});\n"]}
@@ -0,0 +1,49 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { strict as assert } from "assert";
6
+ import { v4 as uuid } from "uuid";
7
+ import { Interval } from "../intervals/index.js";
8
+ const reservedIntervalIdKey = "intervalId";
9
+ /**
10
+ * Asserts that the results match the expected endpoints or intervals.
11
+ * @param results - The generated intervals to compare.
12
+ * @param expectedEndpoints - The expected start and end points or intervals.
13
+ */
14
+ export function assertPlainNumberIntervals(results, expectedEndpoints) {
15
+ assert.equal(results.length, expectedEndpoints.length, "Mismatched result count");
16
+ for (let i = 0; i < results.length; ++i) {
17
+ assert(results[i]);
18
+ assert.equal(results[i].start, expectedEndpoints[i].start, "mismatched start");
19
+ assert.equal(results[i].end, expectedEndpoints[i].end, "mismatched end");
20
+ }
21
+ }
22
+ /**
23
+ * Creates a new (regular) Interval object with the specified start and end values.
24
+ * @param start - The start value of the interval.
25
+ * @param end - The end value of the interval.
26
+ * @returns The created Interval object.
27
+ */
28
+ export function createTestInterval(start, end) {
29
+ const props = {};
30
+ props[reservedIntervalIdKey] = [uuid()];
31
+ return new Interval(start, end, props);
32
+ }
33
+ /**
34
+ * Generates random intervals based on the randomness-related options.
35
+ * @param options - The options for generating random intervals.
36
+ * @returns An array of generated Interval objects.
37
+ */
38
+ export function generateRandomIntervals(options) {
39
+ const intervals = [];
40
+ const { random, count, min, max } = options;
41
+ for (let i = 0; i < count; ++i) {
42
+ const start = random.integer(min, max);
43
+ const end = random.integer(start, max);
44
+ const interval = createTestInterval(start, end);
45
+ intervals.push(interval);
46
+ }
47
+ return intervals;
48
+ }
49
+ //# sourceMappingURL=intervalIndexTestUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intervalIndexTestUtils.js","sourceRoot":"","sources":["../../src/test/intervalIndexTestUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAS3C;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACzC,OAAmB,EACnB,iBAAgE;IAEhE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;KACzE;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,GAAW;IAC5D,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAExC,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA8B;IACrE,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,EAAE;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACzB;IAED,OAAO,SAAS,CAAC;AAClB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { strict as assert } from \"assert\";\nimport { v4 as uuid } from \"uuid\";\nimport { IRandom } from \"@fluid-private/stochastic-test-utils\";\nimport { PropertySet } from \"@fluidframework/merge-tree\";\nimport { Interval } from \"../intervals/index.js\";\n\nconst reservedIntervalIdKey = \"intervalId\";\n\nexport interface RandomIntervalOptions {\n\trandom: IRandom;\n\tcount: number;\n\tmin: number;\n\tmax: number;\n}\n\n/**\n * Asserts that the results match the expected endpoints or intervals.\n * @param results - The generated intervals to compare.\n * @param expectedEndpoints - The expected start and end points or intervals.\n */\nexport function assertPlainNumberIntervals(\n\tresults: Interval[],\n\texpectedEndpoints: { start: number; end: number }[] | Interval[],\n): void {\n\tassert.equal(results.length, expectedEndpoints.length, \"Mismatched result count\");\n\tfor (let i = 0; i < results.length; ++i) {\n\t\tassert(results[i]);\n\t\tassert.equal(results[i].start, expectedEndpoints[i].start, \"mismatched start\");\n\t\tassert.equal(results[i].end, expectedEndpoints[i].end, \"mismatched end\");\n\t}\n}\n\n/**\n * Creates a new (regular) Interval object with the specified start and end values.\n * @param start - The start value of the interval.\n * @param end - The end value of the interval.\n * @returns The created Interval object.\n */\nexport function createTestInterval(start: number, end: number): Interval {\n\tconst props: PropertySet = {};\n\tprops[reservedIntervalIdKey] = [uuid()];\n\n\treturn new Interval(start, end, props);\n}\n\n/**\n * Generates random intervals based on the randomness-related options.\n * @param options - The options for generating random intervals.\n * @returns An array of generated Interval objects.\n */\nexport function generateRandomIntervals(options: RandomIntervalOptions) {\n\tconst intervals: Interval[] = [];\n\tconst { random, count, min, max } = options;\n\n\tfor (let i = 0; i < count; ++i) {\n\t\tconst start = random.integer(min, max);\n\t\tconst end = random.integer(start, max);\n\t\tconst interval = createTestInterval(start, end);\n\t\tintervals.push(interval);\n\t}\n\n\treturn intervals;\n}\n"]}