@fluid-experimental/property-changeset 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/ajvFactory.cjs +19 -0
  2. package/dist/ajvFactory.cjs.map +1 -0
  3. package/dist/ajvFactory.d.cts +7 -0
  4. package/dist/ajvFactory.d.cts.map +1 -0
  5. package/dist/changeset.d.ts +3 -6
  6. package/dist/changeset.d.ts.map +1 -1
  7. package/dist/changeset.js +75 -75
  8. package/dist/changeset.js.map +1 -1
  9. package/dist/changeset_operations/array.d.ts +6 -2
  10. package/dist/changeset_operations/array.d.ts.map +1 -1
  11. package/dist/changeset_operations/array.js +94 -96
  12. package/dist/changeset_operations/array.js.map +1 -1
  13. package/dist/changeset_operations/arrayChangesetIterator.d.ts +2 -5
  14. package/dist/changeset_operations/arrayChangesetIterator.d.ts.map +1 -1
  15. package/dist/changeset_operations/arrayChangesetIterator.js +11 -12
  16. package/dist/changeset_operations/arrayChangesetIterator.js.map +1 -1
  17. package/dist/changeset_operations/changesetConflictTypes.d.ts.map +1 -1
  18. package/dist/changeset_operations/changesetConflictTypes.js +2 -2
  19. package/dist/changeset_operations/changesetConflictTypes.js.map +1 -1
  20. package/dist/changeset_operations/indexedCollection.d.ts +1 -4
  21. package/dist/changeset_operations/indexedCollection.d.ts.map +1 -1
  22. package/dist/changeset_operations/indexedCollection.js +48 -49
  23. package/dist/changeset_operations/indexedCollection.js.map +1 -1
  24. package/dist/changeset_operations/isEmptyChangeset.d.ts +1 -4
  25. package/dist/changeset_operations/isEmptyChangeset.d.ts.map +1 -1
  26. package/dist/changeset_operations/isEmptyChangeset.js +9 -9
  27. package/dist/changeset_operations/isEmptyChangeset.js.map +1 -1
  28. package/dist/helpers/typeidHelper.d.ts +0 -3
  29. package/dist/helpers/typeidHelper.d.ts.map +1 -1
  30. package/dist/helpers/typeidHelper.js +10 -10
  31. package/dist/helpers/typeidHelper.js.map +1 -1
  32. package/dist/index.d.ts +8 -8
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +19 -19
  35. package/dist/index.js.map +1 -1
  36. package/dist/isReservedKeyword.d.ts.map +1 -1
  37. package/dist/isReservedKeyword.js +2 -2
  38. package/dist/isReservedKeyword.js.map +1 -1
  39. package/dist/package.json +3 -0
  40. package/dist/pathHelper.d.ts +0 -3
  41. package/dist/pathHelper.d.ts.map +1 -1
  42. package/dist/pathHelper.js +2 -2
  43. package/dist/pathHelper.js.map +1 -1
  44. package/dist/rebase.js +8 -8
  45. package/dist/rebase.js.map +1 -1
  46. package/dist/templateSchema.d.ts.map +1 -1
  47. package/dist/templateSchema.js +2 -2
  48. package/dist/templateSchema.js.map +1 -1
  49. package/dist/templateValidator.d.ts +1 -1
  50. package/dist/templateValidator.d.ts.map +1 -1
  51. package/dist/templateValidator.js +49 -54
  52. package/dist/templateValidator.js.map +1 -1
  53. package/dist/test/array.spec.js +34 -36
  54. package/dist/test/array.spec.js.map +1 -1
  55. package/dist/test/indexedCollection.spec.js +9 -6
  56. package/dist/test/indexedCollection.spec.js.map +1 -1
  57. package/dist/test/map.spec.js +4 -4
  58. package/dist/test/map.spec.js.map +1 -1
  59. package/dist/test/pathHelper.spec.js +185 -185
  60. package/dist/test/pathHelper.spec.js.map +1 -1
  61. package/dist/test/reversibleCs.spec.js +5 -5
  62. package/dist/test/reversibleCs.spec.js.map +1 -1
  63. package/dist/test/schemaValidator.js +12 -11
  64. package/dist/test/schemaValidator.js.map +1 -1
  65. package/dist/test/schemas/badBothPropertiesAndTypeid.js +18 -18
  66. package/dist/test/schemas/badBothPropertiesAndTypeid.js.map +1 -1
  67. package/dist/test/schemas/badInvalidSemverInTypeid.js +40 -40
  68. package/dist/test/schemas/badInvalidSemverInTypeid.js.map +1 -1
  69. package/dist/test/schemas/badMissingSemverInTypeid.js +40 -40
  70. package/dist/test/schemas/badMissingSemverInTypeid.js.map +1 -1
  71. package/dist/test/schemas/badNestedProperties.js +40 -40
  72. package/dist/test/schemas/badNestedProperties.js.map +1 -1
  73. package/dist/test/schemas/badPrimitiveTypeid.js +25 -25
  74. package/dist/test/schemas/badPrimitiveTypeid.js.map +1 -1
  75. package/dist/test/schemas/badVersionedTypeid.js +41 -41
  76. package/dist/test/schemas/badVersionedTypeid.js.map +1 -1
  77. package/dist/test/schemas/goodColorPalette.js +15 -15
  78. package/dist/test/schemas/goodColorPalette.js.map +1 -1
  79. package/dist/test/schemas/goodDraftAsVersion.js +12 -12
  80. package/dist/test/schemas/goodDraftAsVersion.js.map +1 -1
  81. package/dist/test/schemas/goodPointId.js +40 -40
  82. package/dist/test/schemas/goodPointId.js.map +1 -1
  83. package/dist/test/schemas/goodReferenceAndRegular.js +16 -16
  84. package/dist/test/schemas/goodReferenceAndRegular.js.map +1 -1
  85. package/dist/test/schemas/goodReservedTypes.js +22 -22
  86. package/dist/test/schemas/goodReservedTypes.js.map +1 -1
  87. package/dist/test/schemas/goodUIBorder.js +34 -34
  88. package/dist/test/schemas/goodUIBorder.js.map +1 -1
  89. package/dist/test/schemas/index.js +55 -0
  90. package/dist/test/schemas/index.js.map +1 -0
  91. package/dist/test/tsconfig.cjs.tsbuildinfo +1 -0
  92. package/dist/test/validator/templateSyntax.spec.js +20 -25
  93. package/dist/test/validator/templateSyntax.spec.js.map +1 -1
  94. package/dist/test/validator/templateValidator.spec.js +118 -89
  95. package/dist/test/validator/templateValidator.spec.js.map +1 -1
  96. package/dist/test/validator/typeidHelper.spec.js +42 -41
  97. package/dist/test/validator/typeidHelper.spec.js.map +1 -1
  98. package/dist/utils.d.ts +17 -13
  99. package/dist/utils.d.ts.map +1 -1
  100. package/dist/utils.js +79 -79
  101. package/dist/utils.js.map +1 -1
  102. package/dist/validationResultBuilder.d.ts +2 -1
  103. package/dist/validationResultBuilder.d.ts.map +1 -1
  104. package/dist/validationResultBuilder.js.map +1 -1
  105. package/lib/ajvFactory.cjs +19 -0
  106. package/lib/ajvFactory.cjs.map +1 -0
  107. package/lib/ajvFactory.d.cts +7 -0
  108. package/lib/ajvFactory.d.cts.map +1 -0
  109. package/lib/changeset.d.ts +3 -6
  110. package/lib/changeset.d.ts.map +1 -1
  111. package/lib/changeset.js +16 -16
  112. package/lib/changeset.js.map +1 -1
  113. package/lib/changeset_operations/array.d.ts +6 -2
  114. package/lib/changeset_operations/array.d.ts.map +1 -1
  115. package/lib/changeset_operations/array.js +7 -9
  116. package/lib/changeset_operations/array.js.map +1 -1
  117. package/lib/changeset_operations/arrayChangesetIterator.d.ts +2 -5
  118. package/lib/changeset_operations/arrayChangesetIterator.d.ts.map +1 -1
  119. package/lib/changeset_operations/arrayChangesetIterator.js +3 -4
  120. package/lib/changeset_operations/arrayChangesetIterator.js.map +1 -1
  121. package/lib/changeset_operations/changesetConflictTypes.d.ts.map +1 -1
  122. package/lib/changeset_operations/changesetConflictTypes.js.map +1 -1
  123. package/lib/changeset_operations/indexedCollection.d.ts +1 -4
  124. package/lib/changeset_operations/indexedCollection.d.ts.map +1 -1
  125. package/lib/changeset_operations/indexedCollection.js +10 -11
  126. package/lib/changeset_operations/indexedCollection.js.map +1 -1
  127. package/lib/changeset_operations/isEmptyChangeset.d.ts +1 -4
  128. package/lib/changeset_operations/isEmptyChangeset.d.ts.map +1 -1
  129. package/lib/changeset_operations/isEmptyChangeset.js +3 -3
  130. package/lib/changeset_operations/isEmptyChangeset.js.map +1 -1
  131. package/lib/helpers/typeidHelper.d.ts +0 -3
  132. package/lib/helpers/typeidHelper.d.ts.map +1 -1
  133. package/lib/helpers/typeidHelper.js +1 -1
  134. package/lib/helpers/typeidHelper.js.map +1 -1
  135. package/lib/index.d.ts +8 -8
  136. package/lib/index.d.ts.map +1 -1
  137. package/lib/index.js +8 -8
  138. package/lib/index.js.map +1 -1
  139. package/lib/isReservedKeyword.d.ts.map +1 -1
  140. package/lib/isReservedKeyword.js.map +1 -1
  141. package/lib/pathHelper.d.ts +0 -3
  142. package/lib/pathHelper.d.ts.map +1 -1
  143. package/lib/pathHelper.js.map +1 -1
  144. package/lib/rebase.js +2 -2
  145. package/lib/rebase.js.map +1 -1
  146. package/lib/templateSchema.d.ts.map +1 -1
  147. package/lib/templateSchema.js.map +1 -1
  148. package/lib/templateValidator.d.ts +1 -1
  149. package/lib/templateValidator.d.ts.map +1 -1
  150. package/lib/templateValidator.js +24 -29
  151. package/lib/templateValidator.js.map +1 -1
  152. package/lib/test/array.spec.js +768 -0
  153. package/lib/test/array.spec.js.map +1 -0
  154. package/lib/test/indexedCollection.spec.js +75 -0
  155. package/lib/test/indexedCollection.spec.js.map +1 -0
  156. package/lib/test/map.spec.js +17 -0
  157. package/lib/test/map.spec.js.map +1 -0
  158. package/lib/test/pathHelper.spec.js +435 -0
  159. package/lib/test/pathHelper.spec.js.map +1 -0
  160. package/lib/test/reversibleCs.spec.js +42 -0
  161. package/lib/test/reversibleCs.spec.js.map +1 -0
  162. package/lib/test/schemaValidator.js +103 -0
  163. package/lib/test/schemaValidator.js.map +1 -0
  164. package/lib/test/schemas/badBothPropertiesAndTypeid.js +24 -0
  165. package/lib/test/schemas/badBothPropertiesAndTypeid.js.map +1 -0
  166. package/lib/test/schemas/badInvalidSemverInTypeid.js +46 -0
  167. package/lib/test/schemas/badInvalidSemverInTypeid.js.map +1 -0
  168. package/lib/test/schemas/badMissingSemverInTypeid.js +46 -0
  169. package/lib/test/schemas/badMissingSemverInTypeid.js.map +1 -0
  170. package/lib/test/schemas/badNestedProperties.js +46 -0
  171. package/lib/test/schemas/badNestedProperties.js.map +1 -0
  172. package/lib/test/schemas/badPrimitiveTypeid.js +31 -0
  173. package/lib/test/schemas/badPrimitiveTypeid.js.map +1 -0
  174. package/lib/test/schemas/badVersionedTypeid.js +47 -0
  175. package/lib/test/schemas/badVersionedTypeid.js.map +1 -0
  176. package/lib/test/schemas/goodColorPalette.js +21 -0
  177. package/lib/test/schemas/goodColorPalette.js.map +1 -0
  178. package/lib/test/schemas/goodDraftAsVersion.js +18 -0
  179. package/lib/test/schemas/goodDraftAsVersion.js.map +1 -0
  180. package/lib/test/schemas/goodPointId.js +46 -0
  181. package/lib/test/schemas/goodPointId.js.map +1 -0
  182. package/lib/test/schemas/goodReferenceAndRegular.js +22 -0
  183. package/lib/test/schemas/goodReferenceAndRegular.js.map +1 -0
  184. package/lib/test/schemas/goodReservedTypes.js +29 -0
  185. package/lib/test/schemas/goodReservedTypes.js.map +1 -0
  186. package/lib/test/schemas/goodUIBorder.js +41 -0
  187. package/lib/test/schemas/goodUIBorder.js.map +1 -0
  188. package/lib/test/schemas/index.js +29 -0
  189. package/lib/test/schemas/index.js.map +1 -0
  190. package/lib/test/tsconfig.tsbuildinfo +1 -0
  191. package/lib/test/validator/templateSyntax.spec.js +83 -0
  192. package/lib/test/validator/templateSyntax.spec.js.map +1 -0
  193. package/lib/test/validator/templateValidator.spec.js +1022 -0
  194. package/lib/test/validator/templateValidator.spec.js.map +1 -0
  195. package/lib/test/validator/typeidHelper.spec.js +142 -0
  196. package/lib/test/validator/typeidHelper.spec.js.map +1 -0
  197. package/lib/utils.d.ts +17 -13
  198. package/lib/utils.d.ts.map +1 -1
  199. package/lib/utils.js +23 -23
  200. package/lib/utils.js.map +1 -1
  201. package/lib/validationResultBuilder.d.ts +2 -1
  202. package/lib/validationResultBuilder.d.ts.map +1 -1
  203. package/lib/validationResultBuilder.js.map +1 -1
  204. package/package.json +37 -16
  205. package/dist/test/tsconfig.tsbuildinfo +0 -1
@@ -10,15 +10,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
10
10
  /**
11
11
  * @fileoverview Tests for the array changeset operations
12
12
  */
13
- const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
14
- const isNumber_1 = __importDefault(require("lodash/isNumber"));
15
- const fastest_json_copy_1 = require("fastest-json-copy");
16
- const range_1 = __importDefault(require("lodash/range"));
17
13
  const chai_1 = require("chai");
18
- const changeset_1 = require("../changeset");
14
+ const fastest_json_copy_1 = require("fastest-json-copy");
15
+ const isEmpty_js_1 = __importDefault(require("lodash/isEmpty.js"));
16
+ const isNumber_js_1 = __importDefault(require("lodash/isNumber.js"));
17
+ const range_js_1 = __importDefault(require("lodash/range.js"));
18
+ const changeset_js_1 = require("../changeset.js");
19
19
  describe("Array Operations", function () {
20
20
  let guidCounter = 1;
21
- const generateNamedEntities = (count, offsets, type) => (0, range_1.default)(count).map((i) => {
21
+ const generateNamedEntities = (count, offsets, type) => (0, range_js_1.default)(count).map((i) => {
22
22
  const offsetShift = offsets !== undefined ? offsets.shift() : undefined;
23
23
  const id = offsetShift !== undefined ? guidCounter - offsetShift : guidCounter++;
24
24
  if (type === undefined) {
@@ -45,10 +45,10 @@ describe("Array Operations", function () {
45
45
  };
46
46
  }
47
47
  function getArrayCS(CS) {
48
- if (CS instanceof changeset_1.ChangeSet) {
48
+ if (CS instanceof changeset_js_1.ChangeSet) {
49
49
  CS = CS.getSerializedChangeSet();
50
50
  }
51
- if ((0, isEmpty_1.default)(CS)) {
51
+ if ((0, isEmpty_js_1.default)(CS)) {
52
52
  return {};
53
53
  }
54
54
  const first = (x) => Object.values(x)[0];
@@ -66,7 +66,7 @@ describe("Array Operations", function () {
66
66
  const op2 = createArrayCS({
67
67
  remove: [[0, generateNamedEntities(2)]],
68
68
  });
69
- const result = new changeset_1.ChangeSet(op1);
69
+ const result = new changeset_js_1.ChangeSet(op1);
70
70
  result.applyChangeSet(op2);
71
71
  // We expect the two ranges to be non overlapping
72
72
  const arrayCS = result.getSerializedChangeSet().modify["array<test:namedEntry-1.0.0>"].array;
@@ -84,7 +84,7 @@ describe("Array Operations", function () {
84
84
  insert: [[0, generateNamedEntities(1)]],
85
85
  });
86
86
  const conflicts = [];
87
- const CS = new changeset_1.ChangeSet(base);
87
+ const CS = new changeset_js_1.ChangeSet(base);
88
88
  CS._rebaseChangeSet(rebaseCS, conflicts);
89
89
  // We expect the rebase to keep the insert at position 0. The base changeSet contains an
90
90
  // insert at position 3. There is also a remove within the same CS, which causes both
@@ -108,14 +108,14 @@ describe("Array Operations", function () {
108
108
  const originalRebaseCS = (0, fastest_json_copy_1.copy)(rebaseCS);
109
109
  const conflicts = [];
110
110
  const applyAfterMetaInformation = new Map();
111
- const CS = new changeset_1.ChangeSet(base);
111
+ const CS = new changeset_js_1.ChangeSet(base);
112
112
  CS._rebaseChangeSet(rebaseCS, conflicts, { applyAfterMetaInformation });
113
113
  // Whether the insert in the rebaseCS is moved depends on the insert in the base CS. If the base CS
114
114
  // is the result of an I(3, 3) followed by a R(0,3), it would not be moved since the insert in the baseCS
115
115
  // is behind the insert in the rebase CS. Otherwise, if it is an I(0, 0) our rebase rules would move it
116
116
  // to index 3 behind the other insert
117
117
  (0, chai_1.expect)(rebaseCS.modify["array<test:namedEntry-1.0.0>"].array.insert[0][0]).to.equal(i === 0 ? 3 : 0);
118
- const combinedCS = new changeset_1.ChangeSet(originalRebaseCS);
118
+ const combinedCS = new changeset_js_1.ChangeSet(originalRebaseCS);
119
119
  combinedCS.toInverseChangeSet();
120
120
  combinedCS.applyChangeSet(base);
121
121
  combinedCS.applyChangeSet(rebaseCS, { applyAfterMetaInformation });
@@ -135,7 +135,7 @@ describe("Array Operations", function () {
135
135
  const op2 = createArrayCS({
136
136
  insert: [[4, generateNamedEntities(2)]],
137
137
  });
138
- const combinedCS = new changeset_1.ChangeSet(op1);
138
+ const combinedCS = new changeset_js_1.ChangeSet(op1);
139
139
  combinedCS.applyChangeSet(op2);
140
140
  const arrayCS = combinedCS.getSerializedChangeSet().modify["array<test:namedEntry-1.0.0>"].array;
141
141
  (0, chai_1.expect)(arrayCS.insert.length).to.equal(1);
@@ -144,10 +144,10 @@ describe("Array Operations", function () {
144
144
  const conflicts = [];
145
145
  const rebaseMetaInformation = new Map();
146
146
  const originalRebaseChangeSet = (0, fastest_json_copy_1.copy)(localBranchChangeSet);
147
- const deltaChangeSet = new changeset_1.ChangeSet((0, fastest_json_copy_1.copy)(localBranchChangeSet));
147
+ const deltaChangeSet = new changeset_js_1.ChangeSet((0, fastest_json_copy_1.copy)(localBranchChangeSet));
148
148
  deltaChangeSet.toInverseChangeSet();
149
149
  const rebaseChangeSet = (0, fastest_json_copy_1.copy)(localBranchChangeSet);
150
- new changeset_1.ChangeSet(baseChangeSet)._rebaseChangeSet(rebaseChangeSet, conflicts, {
150
+ new changeset_js_1.ChangeSet(baseChangeSet)._rebaseChangeSet(rebaseChangeSet, conflicts, {
151
151
  applyAfterMetaInformation: rebaseMetaInformation,
152
152
  });
153
153
  deltaChangeSet.applyChangeSet(baseChangeSet);
@@ -159,11 +159,11 @@ describe("Array Operations", function () {
159
159
  validateChangeSet(deltaChangeSet);
160
160
  // This path first walks onto the local branch (applying the original changeset from the local branch)
161
161
  // and then the delta to the new tip (going back one step, and then forward again)
162
- const deltaPath = new changeset_1.ChangeSet((0, fastest_json_copy_1.copy)(baseState));
162
+ const deltaPath = new changeset_js_1.ChangeSet((0, fastest_json_copy_1.copy)(baseState));
163
163
  deltaPath.applyChangeSet(originalRebaseChangeSet);
164
164
  deltaPath.applyChangeSet(deltaChangeSet);
165
165
  // This computes the same state, but not starting from the local branch, but from the base commit itself
166
- const directPath = new changeset_1.ChangeSet((0, fastest_json_copy_1.copy)(baseState));
166
+ const directPath = new changeset_js_1.ChangeSet((0, fastest_json_copy_1.copy)(baseState));
167
167
  directPath.applyChangeSet(baseChangeSet);
168
168
  directPath.applyChangeSet(rebaseChangeSet);
169
169
  (0, chai_1.expect)(deltaPath.getSerializedChangeSet()).to.deep.equal(directPath.getSerializedChangeSet());
@@ -212,25 +212,25 @@ describe("Array Operations", function () {
212
212
  const rebasedCS1 = (0, fastest_json_copy_1.copy)(rebaseChangeSet);
213
213
  for (const baseChangeSet of baseChangesets) {
214
214
  const conflicts = [];
215
- new changeset_1.ChangeSet(baseChangeSet)._rebaseChangeSet(rebasedCS1, conflicts);
215
+ new changeset_js_1.ChangeSet(baseChangeSet)._rebaseChangeSet(rebasedCS1, conflicts);
216
216
  validateChangeSet(rebasedCS1);
217
217
  }
218
218
  // Now rebase with respect to the squashed base ChangeSets
219
- const squashedBaseChangeSets = new changeset_1.ChangeSet();
219
+ const squashedBaseChangeSets = new changeset_js_1.ChangeSet();
220
220
  for (const baseChangeSet of baseChangesets) {
221
221
  squashedBaseChangeSets.applyChangeSet(baseChangeSet);
222
222
  }
223
223
  // Test whether squashed base changes are consistent
224
- const directApplication = new changeset_1.ChangeSet((0, fastest_json_copy_1.copy)(base));
224
+ const directApplication = new changeset_js_1.ChangeSet((0, fastest_json_copy_1.copy)(base));
225
225
  for (const baseChangeSet of baseChangesets) {
226
226
  directApplication.applyChangeSet(baseChangeSet);
227
227
  }
228
- const squashApplication = new changeset_1.ChangeSet((0, fastest_json_copy_1.copy)(base));
228
+ const squashApplication = new changeset_js_1.ChangeSet((0, fastest_json_copy_1.copy)(base));
229
229
  squashApplication.applyChangeSet(squashedBaseChangeSets);
230
230
  (0, chai_1.expect)(directApplication.getSerializedChangeSet()).to.deep.equal(squashApplication.getSerializedChangeSet());
231
231
  const conflicts2 = [];
232
232
  const rebasedCS2 = (0, fastest_json_copy_1.copy)(rebaseChangeSet);
233
- new changeset_1.ChangeSet(squashedBaseChangeSets)._rebaseChangeSet(rebasedCS2, conflicts2);
233
+ new changeset_js_1.ChangeSet(squashedBaseChangeSets)._rebaseChangeSet(rebasedCS2, conflicts2);
234
234
  validateChangeSet(rebasedCS2);
235
235
  (0, chai_1.expect)(rebasedCS1).to.deep.equal(rebasedCS2);
236
236
  return testRebasedApplies((0, fastest_json_copy_1.copy)(rebaseChangeSet), squashedBaseChangeSets, base);
@@ -469,7 +469,7 @@ describe("Array Operations", function () {
469
469
  }
470
470
  (0, chai_1.assert)(entry[0] >= lastIndex + indexOffset, "Changeset operations are not sorted or not merged");
471
471
  lastIndex = entry[0];
472
- lastLength = !(0, isNumber_1.default)(entry[1]) ? entry[1].length : entry[1];
472
+ lastLength = !(0, isNumber_js_1.default)(entry[1]) ? entry[1].length : entry[1];
473
473
  // Inserts must not lie within modify or remove ranges
474
474
  if (type === "remove" || type === "modify") {
475
475
  insertPositions.forEach((i) => (0, chai_1.assert)(i <= lastIndex || i >= lastIndex + lastLength, `Insert within ${type} range.`));
@@ -479,15 +479,15 @@ describe("Array Operations", function () {
479
479
  }
480
480
  }
481
481
  function testApplyAssociativity(base, operations, customValidator) {
482
- const combinedCS = new changeset_1.ChangeSet();
482
+ const combinedCS = new changeset_js_1.ChangeSet();
483
483
  operations.forEach(combinedCS.applyChangeSet.bind(combinedCS));
484
484
  validateChangeSet(combinedCS);
485
485
  // Individually apply the operations
486
- const separateApplysResult = new changeset_1.ChangeSet((0, fastest_json_copy_1.copy)(base));
486
+ const separateApplysResult = new changeset_js_1.ChangeSet((0, fastest_json_copy_1.copy)(base));
487
487
  operations.forEach(separateApplysResult.applyChangeSet.bind(separateApplysResult));
488
488
  validateChangeSet(separateApplysResult);
489
489
  // And apply the combined CS
490
- const combinedApplyResult = new changeset_1.ChangeSet((0, fastest_json_copy_1.copy)(base));
490
+ const combinedApplyResult = new changeset_js_1.ChangeSet((0, fastest_json_copy_1.copy)(base));
491
491
  combinedApplyResult.applyChangeSet(combinedCS);
492
492
  if (customValidator !== undefined) {
493
493
  customValidator(combinedCS, separateApplysResult, combinedApplyResult);
@@ -519,19 +519,17 @@ describe("Array Operations", function () {
519
519
  " with insert at the end",
520
520
  ]) {
521
521
  const offset = additionalInserts === " with insert at the beginning" ? 2 : 0;
522
- for (const i of (0, range_1.default)(1, 9)) {
522
+ for (const i of (0, range_js_1.default)(1, 9)) {
523
523
  it(`at position ${i + offset}${additionalInserts}`, () => {
524
524
  const initial = createArrayCS({
525
525
  insert: [[0, generateNamedEntities(10, undefined, "number")]],
526
526
  }, "insert", "array<Float64>");
527
- let initialInserts = [];
528
- let finalInserts = [];
529
- if (additionalInserts === " with insert at the beginning") {
530
- initialInserts = [[0, generateNamedEntities(2, undefined, "number")]];
531
- }
532
- if (additionalInserts === " with insert at the end") {
533
- finalInserts = [[10, generateNamedEntities(2, undefined, "number")]];
534
- }
527
+ const initialInserts = additionalInserts === " with insert at the beginning"
528
+ ? [[0, generateNamedEntities(2, undefined, "number")]]
529
+ : [];
530
+ const finalInserts = additionalInserts === " with insert at the end"
531
+ ? [[10, generateNamedEntities(2, undefined, "number")]]
532
+ : [];
535
533
  const ops = [
536
534
  createArrayCS({
537
535
  insert: [
@@ -761,7 +759,7 @@ describe("Array Operations", function () {
761
759
  insert: insertsB,
762
760
  remove: removesB,
763
761
  });
764
- const CS = new changeset_1.ChangeSet(CS1);
762
+ const CS = new changeset_js_1.ChangeSet(CS1);
765
763
  CS.applyChangeSet(CS2);
766
764
  validateChangeSet(CS.getSerializedChangeSet());
767
765
  });
@@ -1 +1 @@
1
- {"version":3,"file":"array.spec.js","sourceRoot":"","sources":["../../src/test/array.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\n/**\n * @fileoverview Tests for the array changeset operations\n */\n\nimport isEmpty from \"lodash/isEmpty\";\nimport isNumber from \"lodash/isNumber\";\nimport { copy as cloneDeep } from \"fastest-json-copy\";\nimport range from \"lodash/range\";\n\nimport { expect, assert } from \"chai\";\nimport { ChangeSet, SerializedChangeSet } from \"../changeset\";\n\ndescribe(\"Array Operations\", function () {\n\tlet guidCounter = 1;\n\n\tconst generateNamedEntities = (count, offsets?, type?) =>\n\t\trange(count).map((i) => {\n\t\t\tconst offsetShift = offsets !== undefined ? offsets.shift() : undefined;\n\t\t\tconst id = offsetShift !== undefined ? guidCounter - offsetShift : guidCounter++;\n\t\t\tif (type === undefined) {\n\t\t\t\treturn {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tguid: `00000000-0000-0000-0000-${`000000000000${id}`.substr(-12)}`,\n\t\t\t\t\t},\n\t\t\t\t\ttypeid: \"test:namedEntry-1.0.0\",\n\t\t\t\t};\n\t\t\t} else if (type === \"number\") {\n\t\t\t\treturn id;\n\t\t\t}\n\t\t});\n\n\tfunction createArrayCS(arrayOperations, baseOperation?, type?): SerializedChangeSet {\n\t\tbaseOperation = baseOperation || \"modify\";\n\t\ttype = type || \"array<test:namedEntry-1.0.0>\";\n\t\treturn {\n\t\t\t[baseOperation]: {\n\t\t\t\t[type]: {\n\t\t\t\t\tarray: arrayOperations,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tfunction getArrayCS(CS): SerializedChangeSet {\n\t\tif (CS instanceof ChangeSet) {\n\t\t\tCS = CS.getSerializedChangeSet();\n\t\t}\n\t\tif (isEmpty(CS)) {\n\t\t\treturn {};\n\t\t}\n\t\tconst first = (x) => Object.values(x)[0];\n\t\treturn first(first(first(CS)));\n\t}\n\n\tit(\"Avoid merging of adjacent remove operations with an insert in between\", () => {\n\t\t// This test creates a condition where there are two adjacent removes, with an insert\n\t\t// in between. Those two removes must not be merged when applying the two changesets\n\t\t// as otherwise overlapping ranges would be created in the result, which are not allowed\n\t\t// by the spec\n\t\tconst op1 = createArrayCS({\n\t\t\tinsert: [[1, generateNamedEntities(3)]],\n\t\t\tremove: [[1, generateNamedEntities(1)]],\n\t\t});\n\n\t\tconst op2 = createArrayCS({\n\t\t\tremove: [[0, generateNamedEntities(2)]],\n\t\t});\n\n\t\tconst result = new ChangeSet(op1);\n\t\tresult.applyChangeSet(op2);\n\n\t\t// We expect the two ranges to be non overlapping\n\t\tconst arrayCS =\n\t\t\tresult.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n\t\tconst removeStart = arrayCS.remove[0][0];\n\t\tconst removeEnd = arrayCS.remove[0][0] + arrayCS.remove[0][1].length;\n\t\tconst insertStart = arrayCS.insert[0][0];\n\n\t\texpect(insertStart <= removeStart || insertStart >= removeEnd).to.be.true;\n\t});\n\n\tit(\"Rebasing with a base changeset containing adjacent removes and inserts\", () => {\n\t\tconst base = createArrayCS({\n\t\t\tinsert: [[1, generateNamedEntities(3)]],\n\t\t\tremove: [[0, generateNamedEntities(1)]],\n\t\t});\n\n\t\tconst rebaseCS = createArrayCS({\n\t\t\tinsert: [[0, generateNamedEntities(1)]],\n\t\t});\n\n\t\tconst conflicts = [];\n\t\tconst CS = new ChangeSet(base);\n\t\tCS._rebaseChangeSet(rebaseCS, conflicts);\n\n\t\t// We expect the rebase to keep the insert at position 0. The base changeSet contains an\n\t\t// insert at position 3. There is also a remove within the same CS, which causes both\n\t\t// inserts to be with respect to the same position in the resulting array, but we have\n\t\t// to keep the order of the inserts, since we can only guarantee the distributivity of\n\t\t// the rebase this way. The CS above could have been generated by a combination of a\n\t\t// I(1,3) followed by a R(0,1). If the rebase CS would have been rebased separately\n\t\t// with respect to those two CS, it would have remained a I(0,3).\n\t\texpect(\n\t\t\t(rebaseCS as SerializedChangeSet).modify[\"array<test:namedEntry-1.0.0>\"].array\n\t\t\t\t.insert[0][0],\n\t\t).to.equal(0);\n\t});\n\n\tfor (const i of [0, 3]) {\n\t\tit(`Rebasing an insert behind a remove insert base changeset with insert position ${i}`, () => {\n\t\t\tconst base = createArrayCS({\n\t\t\t\tinsert: [[i, generateNamedEntities(3)]],\n\t\t\t\tremove: [[0, generateNamedEntities(3)]],\n\t\t\t});\n\t\t\tconst rebaseCS = createArrayCS({\n\t\t\t\tinsert: [[0, generateNamedEntities(1)]],\n\t\t\t});\n\n\t\t\tconst originalRebaseCS = cloneDeep(rebaseCS);\n\t\t\tconst conflicts = [];\n\t\t\tconst applyAfterMetaInformation = new Map();\n\t\t\tconst CS = new ChangeSet(base);\n\t\t\tCS._rebaseChangeSet(rebaseCS, conflicts, { applyAfterMetaInformation });\n\n\t\t\t// Whether the insert in the rebaseCS is moved depends on the insert in the base CS. If the base CS\n\t\t\t// is the result of an I(3, 3) followed by a R(0,3), it would not be moved since the insert in the baseCS\n\t\t\t// is behind the insert in the rebase CS. Otherwise, if it is an I(0, 0) our rebase rules would move it\n\t\t\t// to index 3 behind the other insert\n\t\t\texpect(rebaseCS.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(\n\t\t\t\ti === 0 ? 3 : 0,\n\t\t\t);\n\n\t\t\tconst combinedCS = new ChangeSet(originalRebaseCS);\n\t\t\tcombinedCS.toInverseChangeSet();\n\t\t\tcombinedCS.applyChangeSet(base);\n\t\t\tcombinedCS.applyChangeSet(rebaseCS, { applyAfterMetaInformation });\n\n\t\t\tconst finalCs = combinedCS.getSerializedChangeSet();\n\t\t\t// The insert above should cancel out. If the original insert was at position 0, we moved the rebased\n\t\t\t// insert behind the original insert. This means the original insert should now be at position 0,\n\t\t\t// before the insert that canceled out. Otherwise, it should be at position 4 (behind the removed\n\t\t\t// range, as it was in the original CS, but now shifted by 1).\n\t\t\texpect(finalCs.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(\n\t\t\t\ti === 0 ? 0 : 4,\n\t\t\t);\n\t\t});\n\t}\n\n\tit(\"Inserts should happen at the beginning of a remove range\", () => {\n\t\tconst op1 = createArrayCS({\n\t\t\tinsert: [[1, generateNamedEntities(3)]],\n\t\t\tremove: [[1, generateNamedEntities(1)]],\n\t\t});\n\t\tconst op2 = createArrayCS({\n\t\t\tinsert: [[4, generateNamedEntities(2)]],\n\t\t});\n\n\t\tconst combinedCS = new ChangeSet(op1);\n\t\tcombinedCS.applyChangeSet(op2);\n\n\t\tconst arrayCS =\n\t\t\tcombinedCS.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n\t\texpect(arrayCS.insert.length).to.equal(1);\n\t});\n\n\tfunction testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState) {\n\t\tconst conflicts = [];\n\t\tconst rebaseMetaInformation = new Map();\n\t\tconst originalRebaseChangeSet = cloneDeep(localBranchChangeSet);\n\t\tconst deltaChangeSet = new ChangeSet(cloneDeep(localBranchChangeSet));\n\t\tdeltaChangeSet.toInverseChangeSet();\n\n\t\tconst rebaseChangeSet = cloneDeep(localBranchChangeSet);\n\t\tnew ChangeSet(baseChangeSet)._rebaseChangeSet(rebaseChangeSet, conflicts, {\n\t\t\tapplyAfterMetaInformation: rebaseMetaInformation,\n\t\t});\n\n\t\tdeltaChangeSet.applyChangeSet(baseChangeSet);\n\t\tvalidateChangeSet(deltaChangeSet);\n\t\tconst copiedRebaseChangeSet = cloneDeep(rebaseChangeSet);\n\t\tdeltaChangeSet.applyChangeSet(rebaseChangeSet, {\n\t\t\tapplyAfterMetaInformation: rebaseMetaInformation,\n\t\t});\n\t\tvalidateChangeSet(deltaChangeSet);\n\n\t\t// This path first walks onto the local branch (applying the original changeset from the local branch)\n\t\t// and then the delta to the new tip (going back one step, and then forward again)\n\t\tconst deltaPath = new ChangeSet(cloneDeep(baseState));\n\t\tdeltaPath.applyChangeSet(originalRebaseChangeSet);\n\t\tdeltaPath.applyChangeSet(deltaChangeSet);\n\n\t\t// This computes the same state, but not starting from the local branch, but from the base commit itself\n\t\tconst directPath = new ChangeSet(cloneDeep(baseState));\n\t\tdirectPath.applyChangeSet(baseChangeSet);\n\t\tdirectPath.applyChangeSet(rebaseChangeSet);\n\t\texpect(deltaPath.getSerializedChangeSet()).to.deep.equal(\n\t\t\tdirectPath.getSerializedChangeSet(),\n\t\t);\n\n\t\t// Make sure, the rebase changeset was not modified in the apply operation above\n\t\texpect(copiedRebaseChangeSet).to.deep.equal(rebaseChangeSet);\n\n\t\treturn deltaChangeSet;\n\t}\n\n\tfunction runTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n\t\tbaseInsertPositions,\n\t\trebasedInsertPositions,\n\t\tbaseOperation = \"insert\",\n\t\tbaseCount = 1,\n\t) {\n\t\tconst createInserts = (positions, count) =>\n\t\t\tpositions.map((x) => [x, generateNamedEntities(count)]);\n\n\t\tconst baseChangeSet = createArrayCS({\n\t\t\t[baseOperation]: createInserts(baseInsertPositions, baseCount),\n\t\t});\n\n\t\tconst localBranchChangeSet = createArrayCS({\n\t\t\tinsert: createInserts(rebasedInsertPositions, 1),\n\t\t});\n\n\t\t// Test whether the created changeset computes the same result as applying\n\t\t// the base and rebase changeset to the base state\n\t\tconst baseState = createArrayCS({\n\t\t\tinsert: createInserts([0], 20),\n\t\t});\n\t\tconst deltaChangeSet = testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState);\n\n\t\t// Make sure the delta changeset does not contain any other operations than the inserts from the base state\n\t\tconst arrayChangeSet =\n\t\t\tdeltaChangeSet.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n\n\t\texpect(arrayChangeSet[baseOperation].length).to.equal(baseInsertPositions.length);\n\t\tfor (let i = 0; i < baseInsertPositions.length; i++) {\n\t\t\texpect(arrayChangeSet[baseOperation][i][1].length).to.equal(baseCount);\n\t\t}\n\t\texpect(arrayChangeSet).to.not.have.property(\n\t\t\tbaseOperation === \"insert\" ? \"remove\" : \"insert\",\n\t\t);\n\t}\n\n\tdescribe(\"Rebase test applying the reverse, base and then rebased changeset\", () => {\n\t\tfor (const basePositions of [[0], [1], [2], [5], [13], [0, 2], [0, 5], [0, 5, 13]]) {\n\t\t\tfor (const rebasePositions of [[0], [1], [5, 9], [5, 9, 12]]) {\n\t\t\t\tit(`with base positions ${basePositions} and rebase positions ${rebasePositions}`, () => {\n\t\t\t\t\trunTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n\t\t\t\t\t\tbasePositions,\n\t\t\t\t\t\trebasePositions,\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\tdescribe(\"Rebase test applying the reverse, base and then rebased changeset2\", () => {\n\t\tit(`with removes in the base`, () => {\n\t\t\trunTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n\t\t\t\t[0],\n\t\t\t\t[2],\n\t\t\t\t\"remove\",\n\t\t\t\t2,\n\t\t\t);\n\t\t});\n\t});\n\n\tfunction testRebaseDistributivity(baseChangesets, rebaseChangeSet, base) {\n\t\t// First rebase with each CS independently\n\t\tconst rebasedCS1 = cloneDeep(rebaseChangeSet);\n\t\tfor (const baseChangeSet of baseChangesets) {\n\t\t\tconst conflicts = [];\n\t\t\tnew ChangeSet(baseChangeSet)._rebaseChangeSet(rebasedCS1, conflicts);\n\t\t\tvalidateChangeSet(rebasedCS1);\n\t\t}\n\n\t\t// Now rebase with respect to the squashed base ChangeSets\n\t\tconst squashedBaseChangeSets = new ChangeSet();\n\t\tfor (const baseChangeSet of baseChangesets) {\n\t\t\tsquashedBaseChangeSets.applyChangeSet(baseChangeSet);\n\t\t}\n\n\t\t// Test whether squashed base changes are consistent\n\t\tconst directApplication = new ChangeSet(cloneDeep(base));\n\t\tfor (const baseChangeSet of baseChangesets) {\n\t\t\tdirectApplication.applyChangeSet(baseChangeSet);\n\t\t}\n\t\tconst squashApplication = new ChangeSet(cloneDeep(base));\n\t\tsquashApplication.applyChangeSet(squashedBaseChangeSets);\n\t\texpect(directApplication.getSerializedChangeSet()).to.deep.equal(\n\t\t\tsquashApplication.getSerializedChangeSet(),\n\t\t);\n\n\t\tconst conflicts2 = [];\n\t\tconst rebasedCS2 = cloneDeep(rebaseChangeSet);\n\t\tnew ChangeSet(squashedBaseChangeSets)._rebaseChangeSet(rebasedCS2, conflicts2);\n\t\tvalidateChangeSet(rebasedCS2);\n\n\t\texpect(rebasedCS1).to.deep.equal(rebasedCS2);\n\n\t\treturn testRebasedApplies(cloneDeep(rebaseChangeSet), squashedBaseChangeSets, base);\n\t}\n\n\tdescribe(\"Rebase Distributivity\", () => {\n\t\tdescribe(\"Multiple inserts in a remove range\", () => {\n\t\t\tfor (const insertPosition of [0, 1, 3, 5, 7, 12]) {\n\t\t\t\tit(`Position ${insertPosition}`, () => {\n\t\t\t\t\ttestRebaseDistributivity(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\t\tinsert: [[1, generateNamedEntities(1)]],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\t\tinsert: [[6, generateNamedEntities(1)]],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\t\tinsert: [[9, generateNamedEntities(1)]],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\t\tremove: [\n\t\t\t\t\t\t\t\t\t[2, generateNamedEntities(4)],\n\t\t\t\t\t\t\t\t\t[7, generateNamedEntities(2)],\n\t\t\t\t\t\t\t\t\t[10, generateNamedEntities(2)],\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\tinsert: [[insertPosition, generateNamedEntities(1)]],\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tit(\"Rebasing an insert with respect to a remove + insert\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[3, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"remove + insert at start of array\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[3, generateNamedEntities(1)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Rebased remove that cancels out\", () => {\n\t\t\tconst deltacS = testRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[1, generateNamedEntities(2)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t\tconst arrayCS = getArrayCS(deltacS);\n\t\t\texpect(arrayCS.insert[0][1].length).to.equal(3);\n\t\t\texpect(arrayCS.remove[0][1].length).to.equal(1);\n\t\t});\n\t\tit(\"Insert in between two removes 1\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[2, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[1, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[0, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[1, generateNamedEntities(1)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Insert in between two removes 2\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[4, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[2, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[3, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[2, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[3, generateNamedEntities(1)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Inserts in between three removes\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[4, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[6, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[2, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[3, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[4, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[2, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[3, generateNamedEntities(1)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Adjacent remove with insert at the beginning of the remove range\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[1, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[1, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[1, generateNamedEntities(1, [3])]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Remove operation that cancels out\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[8, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[8, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[8, generateNamedEntities(1, [3])]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(14)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Remove operation that cancels out 2\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[8, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t// [8, generateNamedEntities(1)],\n\t\t\t\t\t\t\t[8, generateNamedEntities(1)],\n\t\t\t\t\t\t\t[17, generateNamedEntities(1)],\n\t\t\t\t\t\t],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[8, generateNamedEntities(1, [3])]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(14)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Remove operation that cancels out in the middle of a range\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[4, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[3, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(14)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t});\n\n\tfunction validateChangeSet(CS) {\n\t\tconst arrayCS = getArrayCS(CS);\n\n\t\tconst insertPositions = new Set<number>();\n\t\tif (arrayCS.insert) {\n\t\t\tarrayCS.insert.forEach((x) => insertPositions.add(x[0]));\n\t\t}\n\t\tfor (const type of [\"insert\", \"modify\", \"remove\"]) {\n\t\t\tconst changes = arrayCS[type];\n\n\t\t\t// Make sure the entries are sorted\n\t\t\tif (changes !== undefined) {\n\t\t\t\tlet lastIndex = -5;\n\t\t\t\tlet lastLength = 0;\n\t\t\t\tfor (const entry of changes) {\n\t\t\t\t\t// Ranges should not be adjacent. However, they might be interrupted, if there is an insert\n\t\t\t\t\t// inside the range\n\t\t\t\t\tlet indexOffset = 1;\n\t\t\t\t\tif (type === \"remove\" || type === \"modify\") {\n\t\t\t\t\t\tindexOffset = lastLength;\n\t\t\t\t\t\tif (!insertPositions.has(lastIndex + indexOffset)) {\n\t\t\t\t\t\t\tindexOffset += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tassert(\n\t\t\t\t\t\tentry[0] >= lastIndex + indexOffset,\n\t\t\t\t\t\t\"Changeset operations are not sorted or not merged\",\n\t\t\t\t\t);\n\t\t\t\t\tlastIndex = entry[0];\n\t\t\t\t\tlastLength = !isNumber(entry[1]) ? entry[1].length : entry[1];\n\n\t\t\t\t\t// Inserts must not lie within modify or remove ranges\n\t\t\t\t\tif (type === \"remove\" || type === \"modify\") {\n\t\t\t\t\t\tinsertPositions.forEach((i) =>\n\t\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\t\ti <= lastIndex || i >= lastIndex + lastLength,\n\t\t\t\t\t\t\t\t`Insert within ${type} range.`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction testApplyAssociativity(base, operations, customValidator?) {\n\t\tconst combinedCS = new ChangeSet();\n\t\toperations.forEach(combinedCS.applyChangeSet.bind(combinedCS));\n\t\tvalidateChangeSet(combinedCS);\n\n\t\t// Individually apply the operations\n\t\tconst separateApplysResult = new ChangeSet(cloneDeep(base));\n\t\toperations.forEach(separateApplysResult.applyChangeSet.bind(separateApplysResult));\n\t\tvalidateChangeSet(separateApplysResult);\n\n\t\t// And apply the combined CS\n\t\tconst combinedApplyResult = new ChangeSet(cloneDeep(base));\n\t\tcombinedApplyResult.applyChangeSet(combinedCS);\n\n\t\tif (customValidator !== undefined) {\n\t\t\tcustomValidator(combinedCS, separateApplysResult, combinedApplyResult);\n\t\t}\n\n\t\texpect(separateApplysResult.getSerializedChangeSet()).to.deep.equal(\n\t\t\tcombinedApplyResult.getSerializedChangeSet(),\n\t\t);\n\t}\n\n\tdescribe(\"Apply Associativity\", () => {\n\t\tit(\"insert + remove + insert\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[2, generateNamedEntities(2)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[3, generateNamedEntities(2, [1, 3])]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[2, generateNamedEntities(1)]],\n\t\t\t\t}),\n\t\t\t];\n\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\n\t\tdescribe(\"Inserting into a remove range with deletes on both sides\", () => {\n\t\t\tfor (const additionalInserts of [\n\t\t\t\t\"\",\n\t\t\t\t\" with insert at the beginning\",\n\t\t\t\t\" with insert at the end\",\n\t\t\t]) {\n\t\t\t\tconst offset = additionalInserts === \" with insert at the beginning\" ? 2 : 0;\n\t\t\t\tfor (const i of range(1, 9)) {\n\t\t\t\t\tit(`at position ${i + offset}${additionalInserts}`, () => {\n\t\t\t\t\t\tconst initial = createArrayCS(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinsert: [[0, generateNamedEntities(10, undefined, \"number\")]],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"insert\",\n\t\t\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tlet initialInserts = [];\n\t\t\t\t\t\tlet finalInserts = [];\n\t\t\t\t\t\tif (additionalInserts === \" with insert at the beginning\") {\n\t\t\t\t\t\t\tinitialInserts = [[0, generateNamedEntities(2, undefined, \"number\")]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (additionalInserts === \" with insert at the end\") {\n\t\t\t\t\t\t\tfinalInserts = [[10, generateNamedEntities(2, undefined, \"number\")]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst ops = [\n\t\t\t\t\t\t\tcreateArrayCS(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t\t\t\t...initialInserts,\n\t\t\t\t\t\t\t\t\t\t[2, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t\t\t\t[7, generateNamedEntities(3, undefined, \"number\")],\n\t\t\t\t\t\t\t\t\t\t...finalInserts,\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tremove: [[2, generateNamedEntities(5, undefined, \"number\")]],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tcreateArrayCS(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t\t\t\t[i + offset, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t];\n\t\t\t\t\t\ttestApplyAssociativity(initial, ops, (combinedCS) => {\n\t\t\t\t\t\t\tconst arrayCS = getArrayCS(combinedCS);\n\t\t\t\t\t\t\texpect(arrayCS.insert.length).to.equal(\n\t\t\t\t\t\t\t\t(i >= 2 && i < 8 ? 2 : 3) + (additionalInserts !== \"\" ? 1 : 0),\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst insertOffset =\n\t\t\t\t\t\t\t\tadditionalInserts == \" with insert at the beginning\" ? 1 : 0;\n\t\t\t\t\t\t\tif (i >= 2 && i <= 4) {\n\t\t\t\t\t\t\t\texpect(arrayCS.insert[0 + insertOffset][1].length).to.equal(4);\n\t\t\t\t\t\t\t\texpect(arrayCS.insert[1 + insertOffset][1].length).to.equal(3);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (i > 4 && i < 8) {\n\t\t\t\t\t\t\t\texpect(arrayCS.insert[0 + insertOffset][1].length).to.equal(2);\n\t\t\t\t\t\t\t\texpect(arrayCS.insert[1 + insertOffset][1].length).to.equal(5);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tit(\"remove overlapping insert and remove ranges\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10, undefined, \"number\")]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t\t\"array<Float64>\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[0, generateNamedEntities(1, undefined, \"number\")],\n\t\t\t\t\t\t\t[1, generateNamedEntities(1, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(6, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t\tremove: [\n\t\t\t\t\t\t\t[1, generateNamedEntities(1, undefined, \"number\")],\n\t\t\t\t\t\t\t[2, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(5, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(2, undefined, \"number\")]],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\n\t\tit(\"Overlapping remove / insert\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10, undefined, \"number\")]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t\t\"array<Float64>\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[0, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t\tremove: [[4, generateNamedEntities(5, undefined, \"number\")]],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tremove: [[4, generateNamedEntities(2, undefined, \"number\")]],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\t\tit(\"Removing multiple inserts and removes\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10, undefined, \"number\")]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t\t\"array<Float64>\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[1, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(4, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t\tremove: [\n\t\t\t\t\t\t\t[0, generateNamedEntities(1, undefined, \"number\")],\n\t\t\t\t\t\t\t[1, generateNamedEntities(3, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(5, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(6, undefined, \"number\")]],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\t\tit(\"Removing insert/removes at the end\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10, undefined, \"number\")]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t\t\"array<Float64>\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[0, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t[1, generateNamedEntities(1, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(4, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t\tremove: [\n\t\t\t\t\t\t\t[1, generateNamedEntities(3, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(5, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tremove: [[6, generateNamedEntities(2, undefined, \"number\")]],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\t\tit(\"Insert with overlapping remove\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[1, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[1, generateNamedEntities(1)]],\n\t\t\t\t\tinsert: [[1, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\n\t\tit(\"Failed case\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(7)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[0, generateNamedEntities(1)]],\n\t\t\t\t\tinsert: [[1, generateNamedEntities(2)]],\n\t\t\t\t}),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\n\t\tit(\"Failed case\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(5)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[4, generateNamedEntities(1)]],\n\t\t\t\t\tinsert: [[5, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\t});\n\n\tdescribe(\"Apply with removes in both changesets\", () => {\n\t\tfor (const startInsertA of [true, false]) {\n\t\t\tfor (const startInsertB of [true, false]) {\n\t\t\t\tfor (const removeInsertA of [true, false]) {\n\t\t\t\t\tfor (const removeInsertB of [true, false]) {\n\t\t\t\t\t\tfor (const removeInsideInsertB of [\"adjacent\", \"separate\", false]) {\n\t\t\t\t\t\t\tconst insertNames = [];\n\t\t\t\t\t\t\tif (startInsertA) {\n\t\t\t\t\t\t\t\tinsertNames.push(\"at start of A\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (startInsertB) {\n\t\t\t\t\t\t\t\tinsertNames.push(\"at start of B\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (removeInsertA) {\n\t\t\t\t\t\t\t\tinsertNames.push(\"before remove in A\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (removeInsertB) {\n\t\t\t\t\t\t\t\tinsertNames.push(\"before remove in B\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (removeInsideInsertB) {\n\t\t\t\t\t\t\t\tinsertNames.push(\n\t\t\t\t\t\t\t\t\t`inside remove range in B (${removeInsideInsertB})`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet title = \"with \";\n\t\t\t\t\t\t\ttitle +=\n\t\t\t\t\t\t\t\tinsertNames.length === 0\n\t\t\t\t\t\t\t\t\t? \"no inserts\"\n\t\t\t\t\t\t\t\t\t: `inserts ${insertNames.join(\", \")}`;\n\t\t\t\t\t\t\tit(title, () => {\n\t\t\t\t\t\t\t\tconst insertsA = [];\n\t\t\t\t\t\t\t\tconst insertsB = [];\n\t\t\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\t\t\tif (startInsertA) {\n\t\t\t\t\t\t\t\t\tinsertsA.push([0, generateNamedEntities(1)]);\n\t\t\t\t\t\t\t\t\toffset += 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (removeInsertA) {\n\t\t\t\t\t\t\t\t\tinsertsA.push([5, generateNamedEntities(1)]);\n\t\t\t\t\t\t\t\t\toffset += 1;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet removesB = [[5 + offset, generateNamedEntities(3)]];\n\t\t\t\t\t\t\t\tif (startInsertB) {\n\t\t\t\t\t\t\t\t\tinsertsB.push([0, generateNamedEntities(1)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (removeInsertB) {\n\t\t\t\t\t\t\t\t\tinsertsB.push([5 + offset, generateNamedEntities(1)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (removeInsideInsertB) {\n\t\t\t\t\t\t\t\t\tconst removeOffset = removeInsideInsertB === \"separate\" ? 1 : 0;\n\n\t\t\t\t\t\t\t\t\tinsertsB.push([\n\t\t\t\t\t\t\t\t\t\t6 + offset + removeOffset,\n\t\t\t\t\t\t\t\t\t\tgenerateNamedEntities(1),\n\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t\tremovesB = [\n\t\t\t\t\t\t\t\t\t\t[5 + offset + removeOffset, generateNamedEntities(1)],\n\t\t\t\t\t\t\t\t\t\t[6 + offset + removeOffset, generateNamedEntities(1)],\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst CS1 = createArrayCS({\n\t\t\t\t\t\t\t\t\tinsert: insertsA,\n\t\t\t\t\t\t\t\t\tremove: [[5, generateNamedEntities(3)]],\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tconst CS2 = createArrayCS({\n\t\t\t\t\t\t\t\t\tinsert: insertsB,\n\t\t\t\t\t\t\t\t\tremove: removesB,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tconst CS = new ChangeSet(CS1);\n\t\t\t\t\t\t\t\tCS.applyChangeSet(CS2);\n\t\t\t\t\t\t\t\tvalidateChangeSet(CS.getSerializedChangeSet());\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n});\n"]}
1
+ {"version":3,"file":"array.spec.js","sourceRoot":"","sources":["../../src/test/array.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\n/**\n * @fileoverview Tests for the array changeset operations\n */\n\nimport { assert, expect } from \"chai\";\nimport { copy as cloneDeep } from \"fastest-json-copy\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport isNumber from \"lodash/isNumber.js\";\nimport range from \"lodash/range.js\";\n\nimport { ChangeSet, SerializedChangeSet } from \"../changeset.js\";\n\ndescribe(\"Array Operations\", function () {\n\tlet guidCounter = 1;\n\n\tconst generateNamedEntities = (count, offsets?, type?) =>\n\t\trange(count).map((i) => {\n\t\t\tconst offsetShift = offsets !== undefined ? offsets.shift() : undefined;\n\t\t\tconst id = offsetShift !== undefined ? guidCounter - offsetShift : guidCounter++;\n\t\t\tif (type === undefined) {\n\t\t\t\treturn {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tguid: `00000000-0000-0000-0000-${`000000000000${id}`.substr(-12)}`,\n\t\t\t\t\t},\n\t\t\t\t\ttypeid: \"test:namedEntry-1.0.0\",\n\t\t\t\t};\n\t\t\t} else if (type === \"number\") {\n\t\t\t\treturn id;\n\t\t\t}\n\t\t});\n\n\tfunction createArrayCS(arrayOperations, baseOperation?, type?): SerializedChangeSet {\n\t\tbaseOperation = baseOperation || \"modify\";\n\t\ttype = type || \"array<test:namedEntry-1.0.0>\";\n\t\treturn {\n\t\t\t[baseOperation]: {\n\t\t\t\t[type]: {\n\t\t\t\t\tarray: arrayOperations,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tfunction getArrayCS(CS): SerializedChangeSet {\n\t\tif (CS instanceof ChangeSet) {\n\t\t\tCS = CS.getSerializedChangeSet();\n\t\t}\n\t\tif (isEmpty(CS)) {\n\t\t\treturn {};\n\t\t}\n\t\tconst first = (x) => Object.values(x)[0];\n\t\treturn first(first(first(CS)));\n\t}\n\n\tit(\"Avoid merging of adjacent remove operations with an insert in between\", () => {\n\t\t// This test creates a condition where there are two adjacent removes, with an insert\n\t\t// in between. Those two removes must not be merged when applying the two changesets\n\t\t// as otherwise overlapping ranges would be created in the result, which are not allowed\n\t\t// by the spec\n\t\tconst op1 = createArrayCS({\n\t\t\tinsert: [[1, generateNamedEntities(3)]],\n\t\t\tremove: [[1, generateNamedEntities(1)]],\n\t\t});\n\n\t\tconst op2 = createArrayCS({\n\t\t\tremove: [[0, generateNamedEntities(2)]],\n\t\t});\n\n\t\tconst result = new ChangeSet(op1);\n\t\tresult.applyChangeSet(op2);\n\n\t\t// We expect the two ranges to be non overlapping\n\t\tconst arrayCS =\n\t\t\tresult.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n\t\tconst removeStart = arrayCS.remove[0][0];\n\t\tconst removeEnd = arrayCS.remove[0][0] + arrayCS.remove[0][1].length;\n\t\tconst insertStart = arrayCS.insert[0][0];\n\n\t\texpect(insertStart <= removeStart || insertStart >= removeEnd).to.be.true;\n\t});\n\n\tit(\"Rebasing with a base changeset containing adjacent removes and inserts\", () => {\n\t\tconst base = createArrayCS({\n\t\t\tinsert: [[1, generateNamedEntities(3)]],\n\t\t\tremove: [[0, generateNamedEntities(1)]],\n\t\t});\n\n\t\tconst rebaseCS = createArrayCS({\n\t\t\tinsert: [[0, generateNamedEntities(1)]],\n\t\t});\n\n\t\tconst conflicts = [];\n\t\tconst CS = new ChangeSet(base);\n\t\tCS._rebaseChangeSet(rebaseCS, conflicts);\n\n\t\t// We expect the rebase to keep the insert at position 0. The base changeSet contains an\n\t\t// insert at position 3. There is also a remove within the same CS, which causes both\n\t\t// inserts to be with respect to the same position in the resulting array, but we have\n\t\t// to keep the order of the inserts, since we can only guarantee the distributivity of\n\t\t// the rebase this way. The CS above could have been generated by a combination of a\n\t\t// I(1,3) followed by a R(0,1). If the rebase CS would have been rebased separately\n\t\t// with respect to those two CS, it would have remained a I(0,3).\n\t\texpect(\n\t\t\t(rebaseCS as SerializedChangeSet).modify[\"array<test:namedEntry-1.0.0>\"].array\n\t\t\t\t.insert[0][0],\n\t\t).to.equal(0);\n\t});\n\n\tfor (const i of [0, 3]) {\n\t\tit(`Rebasing an insert behind a remove insert base changeset with insert position ${i}`, () => {\n\t\t\tconst base = createArrayCS({\n\t\t\t\tinsert: [[i, generateNamedEntities(3)]],\n\t\t\t\tremove: [[0, generateNamedEntities(3)]],\n\t\t\t});\n\t\t\tconst rebaseCS = createArrayCS({\n\t\t\t\tinsert: [[0, generateNamedEntities(1)]],\n\t\t\t});\n\n\t\t\tconst originalRebaseCS = cloneDeep(rebaseCS);\n\t\t\tconst conflicts = [];\n\t\t\tconst applyAfterMetaInformation = new Map();\n\t\t\tconst CS = new ChangeSet(base);\n\t\t\tCS._rebaseChangeSet(rebaseCS, conflicts, { applyAfterMetaInformation });\n\n\t\t\t// Whether the insert in the rebaseCS is moved depends on the insert in the base CS. If the base CS\n\t\t\t// is the result of an I(3, 3) followed by a R(0,3), it would not be moved since the insert in the baseCS\n\t\t\t// is behind the insert in the rebase CS. Otherwise, if it is an I(0, 0) our rebase rules would move it\n\t\t\t// to index 3 behind the other insert\n\t\t\texpect(rebaseCS.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(\n\t\t\t\ti === 0 ? 3 : 0,\n\t\t\t);\n\n\t\t\tconst combinedCS = new ChangeSet(originalRebaseCS);\n\t\t\tcombinedCS.toInverseChangeSet();\n\t\t\tcombinedCS.applyChangeSet(base);\n\t\t\tcombinedCS.applyChangeSet(rebaseCS, { applyAfterMetaInformation });\n\n\t\t\tconst finalCs = combinedCS.getSerializedChangeSet();\n\t\t\t// The insert above should cancel out. If the original insert was at position 0, we moved the rebased\n\t\t\t// insert behind the original insert. This means the original insert should now be at position 0,\n\t\t\t// before the insert that canceled out. Otherwise, it should be at position 4 (behind the removed\n\t\t\t// range, as it was in the original CS, but now shifted by 1).\n\t\t\texpect(finalCs.modify[\"array<test:namedEntry-1.0.0>\"].array.insert[0][0]).to.equal(\n\t\t\t\ti === 0 ? 0 : 4,\n\t\t\t);\n\t\t});\n\t}\n\n\tit(\"Inserts should happen at the beginning of a remove range\", () => {\n\t\tconst op1 = createArrayCS({\n\t\t\tinsert: [[1, generateNamedEntities(3)]],\n\t\t\tremove: [[1, generateNamedEntities(1)]],\n\t\t});\n\t\tconst op2 = createArrayCS({\n\t\t\tinsert: [[4, generateNamedEntities(2)]],\n\t\t});\n\n\t\tconst combinedCS = new ChangeSet(op1);\n\t\tcombinedCS.applyChangeSet(op2);\n\n\t\tconst arrayCS =\n\t\t\tcombinedCS.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n\t\texpect(arrayCS.insert.length).to.equal(1);\n\t});\n\n\tfunction testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState) {\n\t\tconst conflicts = [];\n\t\tconst rebaseMetaInformation = new Map();\n\t\tconst originalRebaseChangeSet = cloneDeep(localBranchChangeSet);\n\t\tconst deltaChangeSet = new ChangeSet(cloneDeep(localBranchChangeSet));\n\t\tdeltaChangeSet.toInverseChangeSet();\n\n\t\tconst rebaseChangeSet = cloneDeep(localBranchChangeSet);\n\t\tnew ChangeSet(baseChangeSet)._rebaseChangeSet(rebaseChangeSet, conflicts, {\n\t\t\tapplyAfterMetaInformation: rebaseMetaInformation,\n\t\t});\n\n\t\tdeltaChangeSet.applyChangeSet(baseChangeSet);\n\t\tvalidateChangeSet(deltaChangeSet);\n\t\tconst copiedRebaseChangeSet = cloneDeep(rebaseChangeSet);\n\t\tdeltaChangeSet.applyChangeSet(rebaseChangeSet, {\n\t\t\tapplyAfterMetaInformation: rebaseMetaInformation,\n\t\t});\n\t\tvalidateChangeSet(deltaChangeSet);\n\n\t\t// This path first walks onto the local branch (applying the original changeset from the local branch)\n\t\t// and then the delta to the new tip (going back one step, and then forward again)\n\t\tconst deltaPath = new ChangeSet(cloneDeep(baseState));\n\t\tdeltaPath.applyChangeSet(originalRebaseChangeSet);\n\t\tdeltaPath.applyChangeSet(deltaChangeSet);\n\n\t\t// This computes the same state, but not starting from the local branch, but from the base commit itself\n\t\tconst directPath = new ChangeSet(cloneDeep(baseState));\n\t\tdirectPath.applyChangeSet(baseChangeSet);\n\t\tdirectPath.applyChangeSet(rebaseChangeSet);\n\t\texpect(deltaPath.getSerializedChangeSet()).to.deep.equal(\n\t\t\tdirectPath.getSerializedChangeSet(),\n\t\t);\n\n\t\t// Make sure, the rebase changeset was not modified in the apply operation above\n\t\texpect(copiedRebaseChangeSet).to.deep.equal(rebaseChangeSet);\n\n\t\treturn deltaChangeSet;\n\t}\n\n\tfunction runTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n\t\tbaseInsertPositions,\n\t\trebasedInsertPositions,\n\t\tbaseOperation = \"insert\",\n\t\tbaseCount = 1,\n\t) {\n\t\tconst createInserts = (positions, count) =>\n\t\t\tpositions.map((x) => [x, generateNamedEntities(count)]);\n\n\t\tconst baseChangeSet = createArrayCS({\n\t\t\t[baseOperation]: createInserts(baseInsertPositions, baseCount),\n\t\t});\n\n\t\tconst localBranchChangeSet = createArrayCS({\n\t\t\tinsert: createInserts(rebasedInsertPositions, 1),\n\t\t});\n\n\t\t// Test whether the created changeset computes the same result as applying\n\t\t// the base and rebase changeset to the base state\n\t\tconst baseState = createArrayCS({\n\t\t\tinsert: createInserts([0], 20),\n\t\t});\n\t\tconst deltaChangeSet = testRebasedApplies(localBranchChangeSet, baseChangeSet, baseState);\n\n\t\t// Make sure the delta changeset does not contain any other operations than the inserts from the base state\n\t\tconst arrayChangeSet =\n\t\t\tdeltaChangeSet.getSerializedChangeSet().modify[\"array<test:namedEntry-1.0.0>\"].array;\n\n\t\texpect(arrayChangeSet[baseOperation].length).to.equal(baseInsertPositions.length);\n\t\tfor (let i = 0; i < baseInsertPositions.length; i++) {\n\t\t\texpect(arrayChangeSet[baseOperation][i][1].length).to.equal(baseCount);\n\t\t}\n\t\texpect(arrayChangeSet).to.not.have.property(\n\t\t\tbaseOperation === \"insert\" ? \"remove\" : \"insert\",\n\t\t);\n\t}\n\n\tdescribe(\"Rebase test applying the reverse, base and then rebased changeset\", () => {\n\t\tfor (const basePositions of [[0], [1], [2], [5], [13], [0, 2], [0, 5], [0, 5, 13]]) {\n\t\t\tfor (const rebasePositions of [[0], [1], [5, 9], [5, 9, 12]]) {\n\t\t\t\tit(`with base positions ${basePositions} and rebase positions ${rebasePositions}`, () => {\n\t\t\t\t\trunTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n\t\t\t\t\t\tbasePositions,\n\t\t\t\t\t\trebasePositions,\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\tdescribe(\"Rebase test applying the reverse, base and then rebased changeset2\", () => {\n\t\tit(`with removes in the base`, () => {\n\t\t\trunTestApplyingReverseAndRebasedChangesetForIndependentModifications(\n\t\t\t\t[0],\n\t\t\t\t[2],\n\t\t\t\t\"remove\",\n\t\t\t\t2,\n\t\t\t);\n\t\t});\n\t});\n\n\tfunction testRebaseDistributivity(baseChangesets, rebaseChangeSet, base) {\n\t\t// First rebase with each CS independently\n\t\tconst rebasedCS1 = cloneDeep(rebaseChangeSet);\n\t\tfor (const baseChangeSet of baseChangesets) {\n\t\t\tconst conflicts = [];\n\t\t\tnew ChangeSet(baseChangeSet)._rebaseChangeSet(rebasedCS1, conflicts);\n\t\t\tvalidateChangeSet(rebasedCS1);\n\t\t}\n\n\t\t// Now rebase with respect to the squashed base ChangeSets\n\t\tconst squashedBaseChangeSets = new ChangeSet();\n\t\tfor (const baseChangeSet of baseChangesets) {\n\t\t\tsquashedBaseChangeSets.applyChangeSet(baseChangeSet);\n\t\t}\n\n\t\t// Test whether squashed base changes are consistent\n\t\tconst directApplication = new ChangeSet(cloneDeep(base));\n\t\tfor (const baseChangeSet of baseChangesets) {\n\t\t\tdirectApplication.applyChangeSet(baseChangeSet);\n\t\t}\n\t\tconst squashApplication = new ChangeSet(cloneDeep(base));\n\t\tsquashApplication.applyChangeSet(squashedBaseChangeSets);\n\t\texpect(directApplication.getSerializedChangeSet()).to.deep.equal(\n\t\t\tsquashApplication.getSerializedChangeSet(),\n\t\t);\n\n\t\tconst conflicts2 = [];\n\t\tconst rebasedCS2 = cloneDeep(rebaseChangeSet);\n\t\tnew ChangeSet(squashedBaseChangeSets)._rebaseChangeSet(rebasedCS2, conflicts2);\n\t\tvalidateChangeSet(rebasedCS2);\n\n\t\texpect(rebasedCS1).to.deep.equal(rebasedCS2);\n\n\t\treturn testRebasedApplies(cloneDeep(rebaseChangeSet), squashedBaseChangeSets, base);\n\t}\n\n\tdescribe(\"Rebase Distributivity\", () => {\n\t\tdescribe(\"Multiple inserts in a remove range\", () => {\n\t\t\tfor (const insertPosition of [0, 1, 3, 5, 7, 12]) {\n\t\t\t\tit(`Position ${insertPosition}`, () => {\n\t\t\t\t\ttestRebaseDistributivity(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\t\tinsert: [[1, generateNamedEntities(1)]],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\t\tinsert: [[6, generateNamedEntities(1)]],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\t\tinsert: [[9, generateNamedEntities(1)]],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\t\tremove: [\n\t\t\t\t\t\t\t\t\t[2, generateNamedEntities(4)],\n\t\t\t\t\t\t\t\t\t[7, generateNamedEntities(2)],\n\t\t\t\t\t\t\t\t\t[10, generateNamedEntities(2)],\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\tinsert: [[insertPosition, generateNamedEntities(1)]],\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tit(\"Rebasing an insert with respect to a remove + insert\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[3, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"remove + insert at start of array\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[3, generateNamedEntities(1)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Rebased remove that cancels out\", () => {\n\t\t\tconst deltacS = testRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[1, generateNamedEntities(2)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t\tconst arrayCS = getArrayCS(deltacS);\n\t\t\texpect(arrayCS.insert[0][1].length).to.equal(3);\n\t\t\texpect(arrayCS.remove[0][1].length).to.equal(1);\n\t\t});\n\t\tit(\"Insert in between two removes 1\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[2, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[1, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[0, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[1, generateNamedEntities(1)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Insert in between two removes 2\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[4, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[2, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[3, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[2, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[3, generateNamedEntities(1)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Inserts in between three removes\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[4, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[6, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[2, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[3, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[4, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[2, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[3, generateNamedEntities(1)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Adjacent remove with insert at the beginning of the remove range\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[1, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[1, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[1, generateNamedEntities(1, [3])]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Remove operation that cancels out\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[8, generateNamedEntities(2)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [[8, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[8, generateNamedEntities(1, [3])]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(14)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Remove operation that cancels out 2\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[8, generateNamedEntities(3)]],\n\t\t\t\t\t}),\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t// [8, generateNamedEntities(1)],\n\t\t\t\t\t\t\t[8, generateNamedEntities(1)],\n\t\t\t\t\t\t\t[17, generateNamedEntities(1)],\n\t\t\t\t\t\t],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[8, generateNamedEntities(1, [3])]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(14)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tit(\"Remove operation that cancels out in the middle of a range\", () => {\n\t\t\ttestRebaseDistributivity(\n\t\t\t\t[\n\t\t\t\t\tcreateArrayCS({\n\t\t\t\t\t\tremove: [[4, generateNamedEntities(1)]],\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[3, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(14)]],\n\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t});\n\n\tfunction validateChangeSet(CS) {\n\t\tconst arrayCS = getArrayCS(CS);\n\n\t\tconst insertPositions = new Set<number>();\n\t\tif (arrayCS.insert) {\n\t\t\tarrayCS.insert.forEach((x) => insertPositions.add(x[0]));\n\t\t}\n\t\tfor (const type of [\"insert\", \"modify\", \"remove\"]) {\n\t\t\tconst changes = arrayCS[type];\n\n\t\t\t// Make sure the entries are sorted\n\t\t\tif (changes !== undefined) {\n\t\t\t\tlet lastIndex = -5;\n\t\t\t\tlet lastLength = 0;\n\t\t\t\tfor (const entry of changes) {\n\t\t\t\t\t// Ranges should not be adjacent. However, they might be interrupted, if there is an insert\n\t\t\t\t\t// inside the range\n\t\t\t\t\tlet indexOffset = 1;\n\t\t\t\t\tif (type === \"remove\" || type === \"modify\") {\n\t\t\t\t\t\tindexOffset = lastLength;\n\t\t\t\t\t\tif (!insertPositions.has(lastIndex + indexOffset)) {\n\t\t\t\t\t\t\tindexOffset += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tassert(\n\t\t\t\t\t\tentry[0] >= lastIndex + indexOffset,\n\t\t\t\t\t\t\"Changeset operations are not sorted or not merged\",\n\t\t\t\t\t);\n\t\t\t\t\tlastIndex = entry[0];\n\t\t\t\t\tlastLength = !isNumber(entry[1]) ? entry[1].length : entry[1];\n\n\t\t\t\t\t// Inserts must not lie within modify or remove ranges\n\t\t\t\t\tif (type === \"remove\" || type === \"modify\") {\n\t\t\t\t\t\tinsertPositions.forEach((i) =>\n\t\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\t\ti <= lastIndex || i >= lastIndex + lastLength,\n\t\t\t\t\t\t\t\t`Insert within ${type} range.`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction testApplyAssociativity(base, operations, customValidator?) {\n\t\tconst combinedCS = new ChangeSet();\n\t\toperations.forEach(combinedCS.applyChangeSet.bind(combinedCS));\n\t\tvalidateChangeSet(combinedCS);\n\n\t\t// Individually apply the operations\n\t\tconst separateApplysResult = new ChangeSet(cloneDeep(base));\n\t\toperations.forEach(separateApplysResult.applyChangeSet.bind(separateApplysResult));\n\t\tvalidateChangeSet(separateApplysResult);\n\n\t\t// And apply the combined CS\n\t\tconst combinedApplyResult = new ChangeSet(cloneDeep(base));\n\t\tcombinedApplyResult.applyChangeSet(combinedCS);\n\n\t\tif (customValidator !== undefined) {\n\t\t\tcustomValidator(combinedCS, separateApplysResult, combinedApplyResult);\n\t\t}\n\n\t\texpect(separateApplysResult.getSerializedChangeSet()).to.deep.equal(\n\t\t\tcombinedApplyResult.getSerializedChangeSet(),\n\t\t);\n\t}\n\n\tdescribe(\"Apply Associativity\", () => {\n\t\tit(\"insert + remove + insert\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(3)]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[2, generateNamedEntities(2)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[3, generateNamedEntities(2, [1, 3])]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[2, generateNamedEntities(1)]],\n\t\t\t\t}),\n\t\t\t];\n\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\n\t\tdescribe(\"Inserting into a remove range with deletes on both sides\", () => {\n\t\t\tfor (const additionalInserts of [\n\t\t\t\t\"\",\n\t\t\t\t\" with insert at the beginning\",\n\t\t\t\t\" with insert at the end\",\n\t\t\t]) {\n\t\t\t\tconst offset = additionalInserts === \" with insert at the beginning\" ? 2 : 0;\n\t\t\t\tfor (const i of range(1, 9)) {\n\t\t\t\t\tit(`at position ${i + offset}${additionalInserts}`, () => {\n\t\t\t\t\t\tconst initial = createArrayCS(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinsert: [[0, generateNamedEntities(10, undefined, \"number\")]],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"insert\",\n\t\t\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst initialInserts =\n\t\t\t\t\t\t\tadditionalInserts === \" with insert at the beginning\"\n\t\t\t\t\t\t\t\t? [[0, generateNamedEntities(2, undefined, \"number\")]]\n\t\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\tconst finalInserts =\n\t\t\t\t\t\t\tadditionalInserts === \" with insert at the end\"\n\t\t\t\t\t\t\t\t? [[10, generateNamedEntities(2, undefined, \"number\")]]\n\t\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\tconst ops = [\n\t\t\t\t\t\t\tcreateArrayCS(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t\t\t\t...initialInserts,\n\t\t\t\t\t\t\t\t\t\t[2, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t\t\t\t[7, generateNamedEntities(3, undefined, \"number\")],\n\t\t\t\t\t\t\t\t\t\t...finalInserts,\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tremove: [[2, generateNamedEntities(5, undefined, \"number\")]],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tcreateArrayCS(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t\t\t\t[i + offset, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t];\n\t\t\t\t\t\ttestApplyAssociativity(initial, ops, (combinedCS) => {\n\t\t\t\t\t\t\tconst arrayCS = getArrayCS(combinedCS);\n\t\t\t\t\t\t\texpect(arrayCS.insert.length).to.equal(\n\t\t\t\t\t\t\t\t(i >= 2 && i < 8 ? 2 : 3) + (additionalInserts !== \"\" ? 1 : 0),\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst insertOffset =\n\t\t\t\t\t\t\t\tadditionalInserts == \" with insert at the beginning\" ? 1 : 0;\n\t\t\t\t\t\t\tif (i >= 2 && i <= 4) {\n\t\t\t\t\t\t\t\texpect(arrayCS.insert[0 + insertOffset][1].length).to.equal(4);\n\t\t\t\t\t\t\t\texpect(arrayCS.insert[1 + insertOffset][1].length).to.equal(3);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (i > 4 && i < 8) {\n\t\t\t\t\t\t\t\texpect(arrayCS.insert[0 + insertOffset][1].length).to.equal(2);\n\t\t\t\t\t\t\t\texpect(arrayCS.insert[1 + insertOffset][1].length).to.equal(5);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tit(\"remove overlapping insert and remove ranges\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10, undefined, \"number\")]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t\t\"array<Float64>\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[0, generateNamedEntities(1, undefined, \"number\")],\n\t\t\t\t\t\t\t[1, generateNamedEntities(1, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(6, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t\tremove: [\n\t\t\t\t\t\t\t[1, generateNamedEntities(1, undefined, \"number\")],\n\t\t\t\t\t\t\t[2, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(5, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(2, undefined, \"number\")]],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\n\t\tit(\"Overlapping remove / insert\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10, undefined, \"number\")]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t\t\"array<Float64>\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[0, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t\tremove: [[4, generateNamedEntities(5, undefined, \"number\")]],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tremove: [[4, generateNamedEntities(2, undefined, \"number\")]],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\t\tit(\"Removing multiple inserts and removes\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10, undefined, \"number\")]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t\t\"array<Float64>\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[1, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(4, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t\tremove: [\n\t\t\t\t\t\t\t[0, generateNamedEntities(1, undefined, \"number\")],\n\t\t\t\t\t\t\t[1, generateNamedEntities(3, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(5, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tremove: [[0, generateNamedEntities(6, undefined, \"number\")]],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\t\tit(\"Removing insert/removes at the end\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10, undefined, \"number\")]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t\t\"array<Float64>\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tinsert: [\n\t\t\t\t\t\t\t[0, generateNamedEntities(2, undefined, \"number\")],\n\t\t\t\t\t\t\t[1, generateNamedEntities(1, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(4, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t\tremove: [\n\t\t\t\t\t\t\t[1, generateNamedEntities(3, undefined, \"number\")],\n\t\t\t\t\t\t\t[4, generateNamedEntities(5, undefined, \"number\")],\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t\tcreateArrayCS(\n\t\t\t\t\t{\n\t\t\t\t\t\tremove: [[6, generateNamedEntities(2, undefined, \"number\")]],\n\t\t\t\t\t},\n\t\t\t\t\tundefined,\n\t\t\t\t\t\"array<Float64>\",\n\t\t\t\t),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\t\tit(\"Insert with overlapping remove\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[1, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[1, generateNamedEntities(1)]],\n\t\t\t\t\tinsert: [[1, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\n\t\tit(\"Failed case\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(7)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[0, generateNamedEntities(1)]],\n\t\t\t\t\tinsert: [[1, generateNamedEntities(2)]],\n\t\t\t\t}),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\n\t\tit(\"Failed case\", () => {\n\t\t\tconst initial = createArrayCS(\n\t\t\t\t{\n\t\t\t\t\tinsert: [[0, generateNamedEntities(10)]],\n\t\t\t\t},\n\t\t\t\t\"insert\",\n\t\t\t);\n\n\t\t\tconst ops = [\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tinsert: [[0, generateNamedEntities(5)]],\n\t\t\t\t}),\n\t\t\t\tcreateArrayCS({\n\t\t\t\t\tremove: [[4, generateNamedEntities(1)]],\n\t\t\t\t\tinsert: [[5, generateNamedEntities(3)]],\n\t\t\t\t}),\n\t\t\t];\n\t\t\ttestApplyAssociativity(initial, ops);\n\t\t});\n\t});\n\n\tdescribe(\"Apply with removes in both changesets\", () => {\n\t\tfor (const startInsertA of [true, false]) {\n\t\t\tfor (const startInsertB of [true, false]) {\n\t\t\t\tfor (const removeInsertA of [true, false]) {\n\t\t\t\t\tfor (const removeInsertB of [true, false]) {\n\t\t\t\t\t\tfor (const removeInsideInsertB of [\"adjacent\", \"separate\", false]) {\n\t\t\t\t\t\t\tconst insertNames: string[] = [];\n\t\t\t\t\t\t\tif (startInsertA) {\n\t\t\t\t\t\t\t\tinsertNames.push(\"at start of A\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (startInsertB) {\n\t\t\t\t\t\t\t\tinsertNames.push(\"at start of B\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (removeInsertA) {\n\t\t\t\t\t\t\t\tinsertNames.push(\"before remove in A\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (removeInsertB) {\n\t\t\t\t\t\t\t\tinsertNames.push(\"before remove in B\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (removeInsideInsertB) {\n\t\t\t\t\t\t\t\tinsertNames.push(\n\t\t\t\t\t\t\t\t\t`inside remove range in B (${removeInsideInsertB})`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet title = \"with \";\n\t\t\t\t\t\t\ttitle +=\n\t\t\t\t\t\t\t\tinsertNames.length === 0\n\t\t\t\t\t\t\t\t\t? \"no inserts\"\n\t\t\t\t\t\t\t\t\t: `inserts ${insertNames.join(\", \")}`;\n\t\t\t\t\t\t\tit(title, () => {\n\t\t\t\t\t\t\t\tconst insertsA: [\n\t\t\t\t\t\t\t\t\tnumber,\n\t\t\t\t\t\t\t\t\tReturnType<typeof generateNamedEntities>,\n\t\t\t\t\t\t\t\t][] = [];\n\t\t\t\t\t\t\t\tconst insertsB: [\n\t\t\t\t\t\t\t\t\tnumber,\n\t\t\t\t\t\t\t\t\tReturnType<typeof generateNamedEntities>,\n\t\t\t\t\t\t\t\t][] = [];\n\t\t\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\t\t\tif (startInsertA) {\n\t\t\t\t\t\t\t\t\tinsertsA.push([0, generateNamedEntities(1)]);\n\t\t\t\t\t\t\t\t\toffset += 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (removeInsertA) {\n\t\t\t\t\t\t\t\t\tinsertsA.push([5, generateNamedEntities(1)]);\n\t\t\t\t\t\t\t\t\toffset += 1;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet removesB = [[5 + offset, generateNamedEntities(3)]];\n\t\t\t\t\t\t\t\tif (startInsertB) {\n\t\t\t\t\t\t\t\t\tinsertsB.push([0, generateNamedEntities(1)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (removeInsertB) {\n\t\t\t\t\t\t\t\t\tinsertsB.push([5 + offset, generateNamedEntities(1)]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (removeInsideInsertB) {\n\t\t\t\t\t\t\t\t\tconst removeOffset = removeInsideInsertB === \"separate\" ? 1 : 0;\n\n\t\t\t\t\t\t\t\t\tinsertsB.push([\n\t\t\t\t\t\t\t\t\t\t6 + offset + removeOffset,\n\t\t\t\t\t\t\t\t\t\tgenerateNamedEntities(1),\n\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t\tremovesB = [\n\t\t\t\t\t\t\t\t\t\t[5 + offset + removeOffset, generateNamedEntities(1)],\n\t\t\t\t\t\t\t\t\t\t[6 + offset + removeOffset, generateNamedEntities(1)],\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst CS1 = createArrayCS({\n\t\t\t\t\t\t\t\t\tinsert: insertsA,\n\t\t\t\t\t\t\t\t\tremove: [[5, generateNamedEntities(3)]],\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tconst CS2 = createArrayCS({\n\t\t\t\t\t\t\t\t\tinsert: insertsB,\n\t\t\t\t\t\t\t\t\tremove: removesB,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tconst CS = new ChangeSet(CS1);\n\t\t\t\t\t\t\t\tCS.applyChangeSet(CS2);\n\t\t\t\t\t\t\t\tvalidateChangeSet(CS.getSerializedChangeSet());\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n});\n"]}
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
2
  /*!
4
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
5
4
  * Licensed under the MIT License.
6
5
  */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
7
10
  const chai_1 = require("chai");
8
- const lodash_1 = require("lodash");
9
- const changeset_1 = require("../changeset");
11
+ const cloneDeep_js_1 = __importDefault(require("lodash/cloneDeep.js"));
12
+ const changeset_js_1 = require("../changeset.js");
10
13
  describe("Indexed Collection Operations", function () {
11
14
  it("modifications should rebase to a NOP for polymorphic collection, when the type of a primitive property changes in the base ChangeSet", () => {
12
15
  // Modification to a float property
@@ -34,7 +37,7 @@ describe("Indexed Collection Operations", function () {
34
37
  },
35
38
  };
36
39
  const conflicts = [];
37
- new changeset_1.ChangeSet(base)._rebaseChangeSet(modification, conflicts);
40
+ new changeset_js_1.ChangeSet(base)._rebaseChangeSet(modification, conflicts);
38
41
  (0, chai_1.expect)(modification).to.be.empty;
39
42
  });
40
43
  it("modifications should stay unmodified for primitive collections in the case of a insert/remove", () => {
@@ -68,9 +71,9 @@ describe("Indexed Collection Operations", function () {
68
71
  },
69
72
  },
70
73
  };
71
- let originalCS = (0, lodash_1.cloneDeep)(modification);
74
+ let originalCS = (0, cloneDeep_js_1.default)(modification);
72
75
  const conflicts = [];
73
- new changeset_1.ChangeSet(base)._rebaseChangeSet(modification, conflicts);
76
+ new changeset_js_1.ChangeSet(base)._rebaseChangeSet(modification, conflicts);
74
77
  (0, chai_1.expect)(modification).to.deep.equal(originalCS);
75
78
  });
76
79
  });
@@ -1 +1 @@
1
- {"version":3,"file":"indexedCollection.spec.js","sourceRoot":"","sources":["../../src/test/indexedCollection.spec.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,+BAA8B;AAC9B,mCAAmC;AACnC,4CAAyC;AAEzC,QAAQ,CAAC,+BAA+B,EAAE;IACzC,EAAE,CAAC,sIAAsI,EAAE,GAAG,EAAE;QAC/I,mCAAmC;QACnC,MAAM,YAAY,GAAG;YACpB,MAAM,EAAE;gBACP,OAAO,EAAE;oBACR,IAAI,EAAE;wBACL,KAAK,EAAE,EAAE;wBACT,QAAQ,EAAE,CAAC;qBACX;iBACD;aACD;SACD,CAAC;QAEF,yDAAyD;QACzD,MAAM,IAAI,GAAG;YACZ,MAAM,EAAE;gBACP,OAAO,EAAE;oBACR,IAAI,EAAE,CAAC;iBACP;aACD;YACD,MAAM,EAAE;gBACP,MAAM,EAAE;oBACP,IAAI,EAAE,YAAY;iBAClB;aACD;SACD,CAAC;QAEF,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,qBAAS,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE9D,IAAA,aAAM,EAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACxG,mCAAmC;QACnC,MAAM,YAAY,GAAG;YACpB,MAAM,EAAE;gBACP,cAAc,EAAE;oBACf,IAAI,EAAE;wBACL,MAAM,EAAE;4BACP,KAAK,EAAE;gCACN,KAAK,EAAE,EAAE;gCACT,QAAQ,EAAE,CAAC;6BACX;yBACD;qBACD;iBACD;aACD;SACD,CAAC;QAEF,yDAAyD;QACzD,MAAM,IAAI,GAAG;YACZ,MAAM,EAAE;gBACP,cAAc,EAAE;oBACf,IAAI,EAAE;wBACL,MAAM,EAAE;4BACP,KAAK,EAAE,CAAC;yBACR;wBACD,MAAM,EAAE;4BACP,KAAK,EAAE,CAAC;yBACR;qBACD;iBACD;aACD;SACD,CAAC;QAEF,IAAI,UAAU,GAAG,IAAA,kBAAS,EAAC,YAAY,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,qBAAS,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE9D,IAAA,aAAM,EAAC,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { expect } from \"chai\";\nimport { cloneDeep } from \"lodash\";\nimport { ChangeSet } from \"../changeset\";\n\ndescribe(\"Indexed Collection Operations\", function () {\n\tit(\"modifications should rebase to a NOP for polymorphic collection, when the type of a primitive property changes in the base ChangeSet\", () => {\n\t\t// Modification to a float property\n\t\tconst modification = {\n\t\t\tmodify: {\n\t\t\t\tFloat64: {\n\t\t\t\t\ttest: {\n\t\t\t\t\t\tvalue: 10,\n\t\t\t\t\t\toldValue: 5,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\t// Base Changeset that changes the typeif of the property\n\t\tconst base = {\n\t\t\tremove: {\n\t\t\t\tFloat64: {\n\t\t\t\t\ttest: 5,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinsert: {\n\t\t\t\tString: {\n\t\t\t\t\ttest: \"TestString\",\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tconst conflicts = [];\n\t\tnew ChangeSet(base)._rebaseChangeSet(modification, conflicts);\n\n\t\texpect(modification).to.be.empty;\n\t});\n\n\tit(\"modifications should stay unmodified for primitive collections in the case of a insert/remove\", () => {\n\t\t// Modification to a float property\n\t\tconst modification = {\n\t\t\tmodify: {\n\t\t\t\t\"map<Float64>\": {\n\t\t\t\t\ttest: {\n\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\tentry: {\n\t\t\t\t\t\t\t\tvalue: 10,\n\t\t\t\t\t\t\t\toldValue: 5,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\t// Base Changeset that changes the typeif of the property\n\t\tconst base = {\n\t\t\tmodify: {\n\t\t\t\t\"map<Float64>\": {\n\t\t\t\t\ttest: {\n\t\t\t\t\t\tremove: {\n\t\t\t\t\t\t\tentry: 5,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tentry: 9,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tlet originalCS = cloneDeep(modification);\n\t\tconst conflicts = [];\n\t\tnew ChangeSet(base)._rebaseChangeSet(modification, conflicts);\n\n\t\texpect(modification).to.deep.equal(originalCS);\n\t});\n});\n"]}
1
+ {"version":3,"file":"indexedCollection.spec.js","sourceRoot":"","sources":["../../src/test/indexedCollection.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAEH,+BAA8B;AAC9B,uEAA4C;AAE5C,kDAA4C;AAE5C,QAAQ,CAAC,+BAA+B,EAAE;IACzC,EAAE,CAAC,sIAAsI,EAAE,GAAG,EAAE;QAC/I,mCAAmC;QACnC,MAAM,YAAY,GAAG;YACpB,MAAM,EAAE;gBACP,OAAO,EAAE;oBACR,IAAI,EAAE;wBACL,KAAK,EAAE,EAAE;wBACT,QAAQ,EAAE,CAAC;qBACX;iBACD;aACD;SACD,CAAC;QAEF,yDAAyD;QACzD,MAAM,IAAI,GAAG;YACZ,MAAM,EAAE;gBACP,OAAO,EAAE;oBACR,IAAI,EAAE,CAAC;iBACP;aACD;YACD,MAAM,EAAE;gBACP,MAAM,EAAE;oBACP,IAAI,EAAE,YAAY;iBAClB;aACD;SACD,CAAC;QAEF,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,wBAAS,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE9D,IAAA,aAAM,EAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACxG,mCAAmC;QACnC,MAAM,YAAY,GAAG;YACpB,MAAM,EAAE;gBACP,cAAc,EAAE;oBACf,IAAI,EAAE;wBACL,MAAM,EAAE;4BACP,KAAK,EAAE;gCACN,KAAK,EAAE,EAAE;gCACT,QAAQ,EAAE,CAAC;6BACX;yBACD;qBACD;iBACD;aACD;SACD,CAAC;QAEF,yDAAyD;QACzD,MAAM,IAAI,GAAG;YACZ,MAAM,EAAE;gBACP,cAAc,EAAE;oBACf,IAAI,EAAE;wBACL,MAAM,EAAE;4BACP,KAAK,EAAE,CAAC;yBACR;wBACD,MAAM,EAAE;4BACP,KAAK,EAAE,CAAC;yBACR;qBACD;iBACD;aACD;SACD,CAAC;QAEF,IAAI,UAAU,GAAG,IAAA,sBAAS,EAAC,YAAY,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,wBAAS,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE9D,IAAA,aAAM,EAAC,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { expect } from \"chai\";\nimport cloneDeep from \"lodash/cloneDeep.js\";\n\nimport { ChangeSet } from \"../changeset.js\";\n\ndescribe(\"Indexed Collection Operations\", function () {\n\tit(\"modifications should rebase to a NOP for polymorphic collection, when the type of a primitive property changes in the base ChangeSet\", () => {\n\t\t// Modification to a float property\n\t\tconst modification = {\n\t\t\tmodify: {\n\t\t\t\tFloat64: {\n\t\t\t\t\ttest: {\n\t\t\t\t\t\tvalue: 10,\n\t\t\t\t\t\toldValue: 5,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\t// Base Changeset that changes the typeif of the property\n\t\tconst base = {\n\t\t\tremove: {\n\t\t\t\tFloat64: {\n\t\t\t\t\ttest: 5,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinsert: {\n\t\t\t\tString: {\n\t\t\t\t\ttest: \"TestString\",\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tconst conflicts = [];\n\t\tnew ChangeSet(base)._rebaseChangeSet(modification, conflicts);\n\n\t\texpect(modification).to.be.empty;\n\t});\n\n\tit(\"modifications should stay unmodified for primitive collections in the case of a insert/remove\", () => {\n\t\t// Modification to a float property\n\t\tconst modification = {\n\t\t\tmodify: {\n\t\t\t\t\"map<Float64>\": {\n\t\t\t\t\ttest: {\n\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\tentry: {\n\t\t\t\t\t\t\t\tvalue: 10,\n\t\t\t\t\t\t\t\toldValue: 5,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\t// Base Changeset that changes the typeif of the property\n\t\tconst base = {\n\t\t\tmodify: {\n\t\t\t\t\"map<Float64>\": {\n\t\t\t\t\ttest: {\n\t\t\t\t\t\tremove: {\n\t\t\t\t\t\t\tentry: 5,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\tentry: 9,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tlet originalCS = cloneDeep(modification);\n\t\tconst conflicts = [];\n\t\tnew ChangeSet(base)._rebaseChangeSet(modification, conflicts);\n\n\t\texpect(modification).to.deep.equal(originalCS);\n\t});\n});\n"]}
@@ -5,15 +5,15 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const chai_1 = require("chai");
8
- const changeset_1 = require("../changeset");
9
- const isEmptyChangeset_1 = require("../changeset_operations/isEmptyChangeset");
8
+ const changeset_js_1 = require("../changeset.js");
9
+ const isEmptyChangeset_js_1 = require("../changeset_operations/isEmptyChangeset.js");
10
10
  describe("Map rebase ChangeSets", function () {
11
11
  it("Case 1", () => {
12
12
  const originalCS = JSON.parse('{"modify":{"NodeProperty":{"a":{"NodeProperty":{"b":{"map<Bool>":{"c":{"modify":{"1":{"value":true,"oldValue":true}}}}}}}}}}');
13
13
  const toRebaseCS = JSON.parse('{"modify":{"NodeProperty":{"a":{"NodeProperty":{"b":{"map<Bool>":{"c":{"remove":{"1":true},"modify":{"2":{"value":true,"oldValue":true}}},"d":{"remove":{"1":true}}}}}}}}}');
14
- const cs = new changeset_1.ChangeSet(toRebaseCS);
14
+ const cs = new changeset_js_1.ChangeSet(toRebaseCS);
15
15
  const changes = cs._rebaseChangeSet(originalCS, [], {});
16
- (0, chai_1.expect)((0, isEmptyChangeset_1.isEmptyChangeSet)(changes)).to.equal(true);
16
+ (0, chai_1.expect)((0, isEmptyChangeset_js_1.isEmptyChangeSet)(changes)).to.equal(true);
17
17
  });
18
18
  });
19
19
  //# sourceMappingURL=map.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"map.spec.js","sourceRoot":"","sources":["../../src/test/map.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,+BAA8B;AAC9B,4CAAyC;AACzC,+EAA4E;AAE5E,QAAQ,CAAC,uBAAuB,EAAE;IACjC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC5B,8HAA8H,CAC9H,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC5B,4KAA4K,CAC5K,CAAC;QAEF,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,IAAA,aAAM,EAAC,IAAA,mCAAgB,EAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { expect } from \"chai\";\nimport { ChangeSet } from \"../changeset\";\nimport { isEmptyChangeSet } from \"../changeset_operations/isEmptyChangeset\";\n\ndescribe(\"Map rebase ChangeSets\", function () {\n\tit(\"Case 1\", () => {\n\t\tconst originalCS = JSON.parse(\n\t\t\t'{\"modify\":{\"NodeProperty\":{\"a\":{\"NodeProperty\":{\"b\":{\"map<Bool>\":{\"c\":{\"modify\":{\"1\":{\"value\":true,\"oldValue\":true}}}}}}}}}}',\n\t\t);\n\t\tconst toRebaseCS = JSON.parse(\n\t\t\t'{\"modify\":{\"NodeProperty\":{\"a\":{\"NodeProperty\":{\"b\":{\"map<Bool>\":{\"c\":{\"remove\":{\"1\":true},\"modify\":{\"2\":{\"value\":true,\"oldValue\":true}}},\"d\":{\"remove\":{\"1\":true}}}}}}}}}',\n\t\t);\n\n\t\tconst cs = new ChangeSet(toRebaseCS);\n\t\tconst changes = cs._rebaseChangeSet(originalCS, [], {});\n\t\texpect(isEmptyChangeSet(changes)).to.equal(true);\n\t});\n});\n"]}
1
+ {"version":3,"file":"map.spec.js","sourceRoot":"","sources":["../../src/test/map.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,+BAA8B;AAE9B,kDAA4C;AAC5C,qFAA+E;AAE/E,QAAQ,CAAC,uBAAuB,EAAE;IACjC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC5B,8HAA8H,CAC9H,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAC5B,4KAA4K,CAC5K,CAAC;QAEF,MAAM,EAAE,GAAG,IAAI,wBAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,IAAA,aAAM,EAAC,IAAA,sCAAgB,EAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { expect } from \"chai\";\n\nimport { ChangeSet } from \"../changeset.js\";\nimport { isEmptyChangeSet } from \"../changeset_operations/isEmptyChangeset.js\";\n\ndescribe(\"Map rebase ChangeSets\", function () {\n\tit(\"Case 1\", () => {\n\t\tconst originalCS = JSON.parse(\n\t\t\t'{\"modify\":{\"NodeProperty\":{\"a\":{\"NodeProperty\":{\"b\":{\"map<Bool>\":{\"c\":{\"modify\":{\"1\":{\"value\":true,\"oldValue\":true}}}}}}}}}}',\n\t\t);\n\t\tconst toRebaseCS = JSON.parse(\n\t\t\t'{\"modify\":{\"NodeProperty\":{\"a\":{\"NodeProperty\":{\"b\":{\"map<Bool>\":{\"c\":{\"remove\":{\"1\":true},\"modify\":{\"2\":{\"value\":true,\"oldValue\":true}}},\"d\":{\"remove\":{\"1\":true}}}}}}}}}',\n\t\t);\n\n\t\tconst cs = new ChangeSet(toRebaseCS);\n\t\tconst changes = cs._rebaseChangeSet(originalCS, [], {});\n\t\texpect(isEmptyChangeSet(changes)).to.equal(true);\n\t});\n});\n"]}