@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.
- package/dist/ajvFactory.cjs +19 -0
- package/dist/ajvFactory.cjs.map +1 -0
- package/dist/ajvFactory.d.cts +7 -0
- package/dist/ajvFactory.d.cts.map +1 -0
- package/dist/changeset.d.ts +3 -6
- package/dist/changeset.d.ts.map +1 -1
- package/dist/changeset.js +75 -75
- package/dist/changeset.js.map +1 -1
- package/dist/changeset_operations/array.d.ts +6 -2
- package/dist/changeset_operations/array.d.ts.map +1 -1
- package/dist/changeset_operations/array.js +94 -96
- package/dist/changeset_operations/array.js.map +1 -1
- package/dist/changeset_operations/arrayChangesetIterator.d.ts +2 -5
- package/dist/changeset_operations/arrayChangesetIterator.d.ts.map +1 -1
- package/dist/changeset_operations/arrayChangesetIterator.js +11 -12
- package/dist/changeset_operations/arrayChangesetIterator.js.map +1 -1
- package/dist/changeset_operations/changesetConflictTypes.d.ts.map +1 -1
- package/dist/changeset_operations/changesetConflictTypes.js +2 -2
- package/dist/changeset_operations/changesetConflictTypes.js.map +1 -1
- package/dist/changeset_operations/indexedCollection.d.ts +1 -4
- package/dist/changeset_operations/indexedCollection.d.ts.map +1 -1
- package/dist/changeset_operations/indexedCollection.js +48 -49
- package/dist/changeset_operations/indexedCollection.js.map +1 -1
- package/dist/changeset_operations/isEmptyChangeset.d.ts +1 -4
- package/dist/changeset_operations/isEmptyChangeset.d.ts.map +1 -1
- package/dist/changeset_operations/isEmptyChangeset.js +9 -9
- package/dist/changeset_operations/isEmptyChangeset.js.map +1 -1
- package/dist/helpers/typeidHelper.d.ts +0 -3
- package/dist/helpers/typeidHelper.d.ts.map +1 -1
- package/dist/helpers/typeidHelper.js +10 -10
- package/dist/helpers/typeidHelper.js.map +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -19
- package/dist/index.js.map +1 -1
- package/dist/isReservedKeyword.d.ts.map +1 -1
- package/dist/isReservedKeyword.js +2 -2
- package/dist/isReservedKeyword.js.map +1 -1
- package/dist/package.json +3 -0
- package/dist/pathHelper.d.ts +0 -3
- package/dist/pathHelper.d.ts.map +1 -1
- package/dist/pathHelper.js +2 -2
- package/dist/pathHelper.js.map +1 -1
- package/dist/rebase.js +8 -8
- package/dist/rebase.js.map +1 -1
- package/dist/templateSchema.d.ts.map +1 -1
- package/dist/templateSchema.js +2 -2
- package/dist/templateSchema.js.map +1 -1
- package/dist/templateValidator.d.ts +1 -1
- package/dist/templateValidator.d.ts.map +1 -1
- package/dist/templateValidator.js +49 -54
- package/dist/templateValidator.js.map +1 -1
- package/dist/test/array.spec.js +34 -36
- package/dist/test/array.spec.js.map +1 -1
- package/dist/test/indexedCollection.spec.js +9 -6
- package/dist/test/indexedCollection.spec.js.map +1 -1
- package/dist/test/map.spec.js +4 -4
- package/dist/test/map.spec.js.map +1 -1
- package/dist/test/pathHelper.spec.js +185 -185
- package/dist/test/pathHelper.spec.js.map +1 -1
- package/dist/test/reversibleCs.spec.js +5 -5
- package/dist/test/reversibleCs.spec.js.map +1 -1
- package/dist/test/schemaValidator.js +12 -11
- package/dist/test/schemaValidator.js.map +1 -1
- package/dist/test/schemas/badBothPropertiesAndTypeid.js +18 -18
- package/dist/test/schemas/badBothPropertiesAndTypeid.js.map +1 -1
- package/dist/test/schemas/badInvalidSemverInTypeid.js +40 -40
- package/dist/test/schemas/badInvalidSemverInTypeid.js.map +1 -1
- package/dist/test/schemas/badMissingSemverInTypeid.js +40 -40
- package/dist/test/schemas/badMissingSemverInTypeid.js.map +1 -1
- package/dist/test/schemas/badNestedProperties.js +40 -40
- package/dist/test/schemas/badNestedProperties.js.map +1 -1
- package/dist/test/schemas/badPrimitiveTypeid.js +25 -25
- package/dist/test/schemas/badPrimitiveTypeid.js.map +1 -1
- package/dist/test/schemas/badVersionedTypeid.js +41 -41
- package/dist/test/schemas/badVersionedTypeid.js.map +1 -1
- package/dist/test/schemas/goodColorPalette.js +15 -15
- package/dist/test/schemas/goodColorPalette.js.map +1 -1
- package/dist/test/schemas/goodDraftAsVersion.js +12 -12
- package/dist/test/schemas/goodDraftAsVersion.js.map +1 -1
- package/dist/test/schemas/goodPointId.js +40 -40
- package/dist/test/schemas/goodPointId.js.map +1 -1
- package/dist/test/schemas/goodReferenceAndRegular.js +16 -16
- package/dist/test/schemas/goodReferenceAndRegular.js.map +1 -1
- package/dist/test/schemas/goodReservedTypes.js +22 -22
- package/dist/test/schemas/goodReservedTypes.js.map +1 -1
- package/dist/test/schemas/goodUIBorder.js +34 -34
- package/dist/test/schemas/goodUIBorder.js.map +1 -1
- package/dist/test/schemas/index.js +55 -0
- package/dist/test/schemas/index.js.map +1 -0
- package/dist/test/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/test/validator/templateSyntax.spec.js +20 -25
- package/dist/test/validator/templateSyntax.spec.js.map +1 -1
- package/dist/test/validator/templateValidator.spec.js +118 -89
- package/dist/test/validator/templateValidator.spec.js.map +1 -1
- package/dist/test/validator/typeidHelper.spec.js +42 -41
- package/dist/test/validator/typeidHelper.spec.js.map +1 -1
- package/dist/utils.d.ts +17 -13
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +79 -79
- package/dist/utils.js.map +1 -1
- package/dist/validationResultBuilder.d.ts +2 -1
- package/dist/validationResultBuilder.d.ts.map +1 -1
- package/dist/validationResultBuilder.js.map +1 -1
- package/lib/ajvFactory.cjs +19 -0
- package/lib/ajvFactory.cjs.map +1 -0
- package/lib/ajvFactory.d.cts +7 -0
- package/lib/ajvFactory.d.cts.map +1 -0
- package/lib/changeset.d.ts +3 -6
- package/lib/changeset.d.ts.map +1 -1
- package/lib/changeset.js +16 -16
- package/lib/changeset.js.map +1 -1
- package/lib/changeset_operations/array.d.ts +6 -2
- package/lib/changeset_operations/array.d.ts.map +1 -1
- package/lib/changeset_operations/array.js +7 -9
- package/lib/changeset_operations/array.js.map +1 -1
- package/lib/changeset_operations/arrayChangesetIterator.d.ts +2 -5
- package/lib/changeset_operations/arrayChangesetIterator.d.ts.map +1 -1
- package/lib/changeset_operations/arrayChangesetIterator.js +3 -4
- package/lib/changeset_operations/arrayChangesetIterator.js.map +1 -1
- package/lib/changeset_operations/changesetConflictTypes.d.ts.map +1 -1
- package/lib/changeset_operations/changesetConflictTypes.js.map +1 -1
- package/lib/changeset_operations/indexedCollection.d.ts +1 -4
- package/lib/changeset_operations/indexedCollection.d.ts.map +1 -1
- package/lib/changeset_operations/indexedCollection.js +10 -11
- package/lib/changeset_operations/indexedCollection.js.map +1 -1
- package/lib/changeset_operations/isEmptyChangeset.d.ts +1 -4
- package/lib/changeset_operations/isEmptyChangeset.d.ts.map +1 -1
- package/lib/changeset_operations/isEmptyChangeset.js +3 -3
- package/lib/changeset_operations/isEmptyChangeset.js.map +1 -1
- package/lib/helpers/typeidHelper.d.ts +0 -3
- package/lib/helpers/typeidHelper.d.ts.map +1 -1
- package/lib/helpers/typeidHelper.js +1 -1
- package/lib/helpers/typeidHelper.js.map +1 -1
- package/lib/index.d.ts +8 -8
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -8
- package/lib/index.js.map +1 -1
- package/lib/isReservedKeyword.d.ts.map +1 -1
- package/lib/isReservedKeyword.js.map +1 -1
- package/lib/pathHelper.d.ts +0 -3
- package/lib/pathHelper.d.ts.map +1 -1
- package/lib/pathHelper.js.map +1 -1
- package/lib/rebase.js +2 -2
- package/lib/rebase.js.map +1 -1
- package/lib/templateSchema.d.ts.map +1 -1
- package/lib/templateSchema.js.map +1 -1
- package/lib/templateValidator.d.ts +1 -1
- package/lib/templateValidator.d.ts.map +1 -1
- package/lib/templateValidator.js +24 -29
- package/lib/templateValidator.js.map +1 -1
- package/lib/test/array.spec.js +768 -0
- package/lib/test/array.spec.js.map +1 -0
- package/lib/test/indexedCollection.spec.js +75 -0
- package/lib/test/indexedCollection.spec.js.map +1 -0
- package/lib/test/map.spec.js +17 -0
- package/lib/test/map.spec.js.map +1 -0
- package/lib/test/pathHelper.spec.js +435 -0
- package/lib/test/pathHelper.spec.js.map +1 -0
- package/lib/test/reversibleCs.spec.js +42 -0
- package/lib/test/reversibleCs.spec.js.map +1 -0
- package/lib/test/schemaValidator.js +103 -0
- package/lib/test/schemaValidator.js.map +1 -0
- package/lib/test/schemas/badBothPropertiesAndTypeid.js +24 -0
- package/lib/test/schemas/badBothPropertiesAndTypeid.js.map +1 -0
- package/lib/test/schemas/badInvalidSemverInTypeid.js +46 -0
- package/lib/test/schemas/badInvalidSemverInTypeid.js.map +1 -0
- package/lib/test/schemas/badMissingSemverInTypeid.js +46 -0
- package/lib/test/schemas/badMissingSemverInTypeid.js.map +1 -0
- package/lib/test/schemas/badNestedProperties.js +46 -0
- package/lib/test/schemas/badNestedProperties.js.map +1 -0
- package/lib/test/schemas/badPrimitiveTypeid.js +31 -0
- package/lib/test/schemas/badPrimitiveTypeid.js.map +1 -0
- package/lib/test/schemas/badVersionedTypeid.js +47 -0
- package/lib/test/schemas/badVersionedTypeid.js.map +1 -0
- package/lib/test/schemas/goodColorPalette.js +21 -0
- package/lib/test/schemas/goodColorPalette.js.map +1 -0
- package/lib/test/schemas/goodDraftAsVersion.js +18 -0
- package/lib/test/schemas/goodDraftAsVersion.js.map +1 -0
- package/lib/test/schemas/goodPointId.js +46 -0
- package/lib/test/schemas/goodPointId.js.map +1 -0
- package/lib/test/schemas/goodReferenceAndRegular.js +22 -0
- package/lib/test/schemas/goodReferenceAndRegular.js.map +1 -0
- package/lib/test/schemas/goodReservedTypes.js +29 -0
- package/lib/test/schemas/goodReservedTypes.js.map +1 -0
- package/lib/test/schemas/goodUIBorder.js +41 -0
- package/lib/test/schemas/goodUIBorder.js.map +1 -0
- package/lib/test/schemas/index.js +29 -0
- package/lib/test/schemas/index.js.map +1 -0
- package/lib/test/tsconfig.tsbuildinfo +1 -0
- package/lib/test/validator/templateSyntax.spec.js +83 -0
- package/lib/test/validator/templateSyntax.spec.js.map +1 -0
- package/lib/test/validator/templateValidator.spec.js +1022 -0
- package/lib/test/validator/templateValidator.spec.js.map +1 -0
- package/lib/test/validator/typeidHelper.spec.js +142 -0
- package/lib/test/validator/typeidHelper.spec.js.map +1 -0
- package/lib/utils.d.ts +17 -13
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +23 -23
- package/lib/utils.js.map +1 -1
- package/lib/validationResultBuilder.d.ts +2 -1
- package/lib/validationResultBuilder.d.ts.map +1 -1
- package/lib/validationResultBuilder.js.map +1 -1
- package/package.json +37 -16
- package/dist/test/tsconfig.tsbuildinfo +0 -1
package/dist/test/array.spec.js
CHANGED
|
@@ -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
|
|
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,
|
|
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
|
|
48
|
+
if (CS instanceof changeset_js_1.ChangeSet) {
|
|
49
49
|
CS = CS.getSerializedChangeSet();
|
|
50
50
|
}
|
|
51
|
-
if ((0,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
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
|
|
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
|
|
9
|
-
const
|
|
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
|
|
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,
|
|
74
|
+
let originalCS = (0, cloneDeep_js_1.default)(modification);
|
|
72
75
|
const conflicts = [];
|
|
73
|
-
new
|
|
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":"
|
|
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"]}
|
package/dist/test/map.spec.js
CHANGED
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const chai_1 = require("chai");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
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
|
|
14
|
+
const cs = new changeset_js_1.ChangeSet(toRebaseCS);
|
|
15
15
|
const changes = cs._rebaseChangeSet(originalCS, [], {});
|
|
16
|
-
(0, chai_1.expect)((0,
|
|
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;
|
|
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"]}
|