@fluid-experimental/property-changeset 2.0.2 → 2.1.0-276326

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.
@@ -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 { 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: [[i + offset, generateNamedEntities(2, 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];\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(`inside remove range in B (${removeInsideInsertB})`);\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 ? \"no inserts\" : `inserts ${insertNames.join(\", \")}`;\n\t\t\t\t\t\t\tit(title, () => {\n\t\t\t\t\t\t\t\tconst insertsA: [number, ReturnType<typeof generateNamedEntities>][] = [];\n\t\t\t\t\t\t\t\tconst insertsB: [number, ReturnType<typeof generateNamedEntities>][] = [];\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([6 + offset + removeOffset, generateNamedEntities(1)]);\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":"AAAA;;;GAGG;AAEH;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,KAAK,MAAM,iBAAiB,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AAEjE,QAAQ,CAAC,kBAAkB,EAAE;IAC5B,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,OAAQ,EAAE,IAAK,EAAE,EAAE,CACxD,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,WAAW,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,MAAM,EAAE,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACjF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO;gBACN,MAAM,EAAE;oBACP,IAAI,EAAE,2BAA2B,eAAe,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;iBAClE;gBACD,MAAM,EAAE,uBAAuB;aAC/B,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC,CAAC,CAAC;IAEJ,SAAS,aAAa,CAAC,eAAe,EAAE,aAAc,EAAE,IAAK;QAC5D,aAAa,GAAG,aAAa,IAAI,QAAQ,CAAC;QAC1C,IAAI,GAAG,IAAI,IAAI,8BAA8B,CAAC;QAC9C,OAAO;YACN,CAAC,aAAa,CAAC,EAAE;gBAChB,CAAC,IAAI,CAAC,EAAE;oBACP,KAAK,EAAE,eAAe;iBACtB;aACD;SACD,CAAC;IACH,CAAC;IAED,SAAS,UAAU,CAAC,EAAE;QACrB,IAAI,EAAE,YAAY,SAAS,EAAE,CAAC;YAC7B,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACX,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAChF,qFAAqF;QACrF,oFAAoF;QACpF,wFAAwF;QACxF,cAAc;QACd,MAAM,GAAG,GAAG,aAAa,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,aAAa,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE3B,iDAAiD;QACjD,MAAM,OAAO,GACZ,MAAM,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC;QAC9E,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,CAAC,WAAW,IAAI,WAAW,IAAI,WAAW,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QACjF,MAAM,IAAI,GAAG,aAAa,CAAC;YAC1B,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,aAAa,CAAC;YAC9B,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEzC,wFAAwF;QACxF,qFAAqF;QACrF,sFAAsF;QACtF,sFAAsF;QACtF,oFAAoF;QACpF,mFAAmF;QACnF,iEAAiE;QACjE,MAAM,CACJ,QAAgC,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK;aAC5E,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACd,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,iFAAiF,CAAC,EAAE,EAAE,GAAG,EAAE;YAC7F,MAAM,IAAI,GAAG,aAAa,CAAC;gBAC1B,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,aAAa,CAAC;gBAC9B,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,CAAC;YAEH,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAE,CAAC;YAC5C,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/B,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAExE,mGAAmG;YACnG,yGAAyG;YACzG,uGAAuG;YACvG,qCAAqC;YACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAClF,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACf,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACnD,UAAU,CAAC,kBAAkB,EAAE,CAAC;YAChC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAChC,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,EAAE,CAAC;YACpD,qGAAqG;YACrG,iGAAiG;YACjG,iGAAiG;YACjG,8DAA8D;YAC9D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACjF,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACf,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QACnE,MAAM,GAAG,GAAG,aAAa,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC;YACzB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QACtC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE/B,MAAM,OAAO,GACZ,UAAU,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC;QAClF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,SAAS,kBAAkB,CAAC,oBAAoB,EAAE,aAAa,EAAE,SAAS;QACzE,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;QACxC,MAAM,uBAAuB,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACtE,cAAc,CAAC,kBAAkB,EAAE,CAAC;QAEpC,MAAM,eAAe,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACxD,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,eAAe,EAAE,SAAS,EAAE;YACzE,yBAAyB,EAAE,qBAAqB;SAChD,CAAC,CAAC;QAEH,cAAc,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC7C,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAClC,MAAM,qBAAqB,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;QACzD,cAAc,CAAC,cAAc,CAAC,eAAe,EAAE;YAC9C,yBAAyB,EAAE,qBAAqB;SAChD,CAAC,CAAC;QACH,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAElC,sGAAsG;QACtG,kFAAkF;QAClF,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,SAAS,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;QAClD,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAEzC,wGAAwG;QACxG,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACvD,UAAU,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACzC,UAAU,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CACvD,UAAU,CAAC,sBAAsB,EAAE,CACnC,CAAC;QAEF,gFAAgF;QAChF,MAAM,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7D,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,SAAS,oEAAoE,CAC5E,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,GAAG,QAAQ,EACxB,SAAS,GAAG,CAAC;QAEb,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAC1C,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEzD,MAAM,aAAa,GAAG,aAAa,CAAC;YACnC,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,mBAAmB,EAAE,SAAS,CAAC;SAC9D,CAAC,CAAC;QAEH,MAAM,oBAAoB,GAAG,aAAa,CAAC;YAC1C,MAAM,EAAE,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC;SAChD,CAAC,CAAC;QAEH,0EAA0E;QAC1E,kDAAkD;QAClD,MAAM,SAAS,GAAG,aAAa,CAAC;YAC/B,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SAC9B,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QAE1F,2GAA2G;QAC3G,MAAM,cAAc,GACnB,cAAc,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC;QAEtF,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAC1C,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAChD,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAClF,KAAK,MAAM,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YACpF,KAAK,MAAM,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9D,EAAE,CAAC,uBAAuB,aAAa,yBAAyB,eAAe,EAAE,EAAE,GAAG,EAAE;oBACvF,oEAAoE,CACnE,aAAa,EACb,eAAe,CACf,CAAC;gBACH,CAAC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oEAAoE,EAAE,GAAG,EAAE;QACnF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YACnC,oEAAoE,CACnE,CAAC,CAAC,CAAC,EACH,CAAC,CAAC,CAAC,EACH,QAAQ,EACR,CAAC,CACD,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,wBAAwB,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI;QACtE,0CAA0C;QAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;QAC9C,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACrE,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAED,0DAA0D;QAC1D,MAAM,sBAAsB,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/C,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC5C,sBAAsB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACtD,CAAC;QAED,oDAAoD;QACpD,MAAM,iBAAiB,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC5C,iBAAiB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,iBAAiB,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,iBAAiB,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;QACzD,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAC/D,iBAAiB,CAAC,sBAAsB,EAAE,CAC1C,CAAC;QAEF,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;QAC9C,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC/E,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE9B,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE7C,OAAO,kBAAkB,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC;IAED,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACtC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;YACnD,KAAK,MAAM,cAAc,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBAClD,EAAE,CAAC,YAAY,cAAc,EAAE,EAAE,GAAG,EAAE;oBACrC,wBAAwB,CACvB;wBACC,aAAa,CAAC;4BACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;yBACvC,CAAC;wBACF,aAAa,CAAC;4BACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;yBACvC,CAAC;wBACF,aAAa,CAAC;4BACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;yBACvC,CAAC;wBACF,aAAa,CAAC;4BACb,MAAM,EAAE;gCACP,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;gCAC7B,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;gCAC7B,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;6BAC9B;yBACD,CAAC;qBACF,EACD,aAAa,CAAC;wBACb,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;qBACpD,CAAC,EACF,aAAa,CAAC;wBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;qBACxC,CAAC,CACF,CAAC;gBACH,CAAC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC/D,wBAAwB,CACvB;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;YACF,wBAAwB,CACvB;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC5C,wBAAwB,CACvB;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YAC1C,MAAM,OAAO,GAAG,wBAAwB,CACvC;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;YACF,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YAC1C,wBAAwB,CACvB;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YAC1C,wBAAwB,CACvB;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC3C,wBAAwB,CACvB;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC3E,wBAAwB,CACvB;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC5C,wBAAwB,CACvB;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC9C,wBAAwB,CACvB;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE;wBACP,iCAAiC;wBACjC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;wBAC7B,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qBAC9B;iBACD,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACrE,wBAAwB,CACvB;gBACC,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,EACD,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,EACF,aAAa,CAAC;gBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,iBAAiB,CAAC,EAAE;QAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAE/B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YACnD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAE9B,mCAAmC;YACnC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;gBACnB,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC7B,2FAA2F;oBAC3F,mBAAmB;oBACnB,IAAI,WAAW,GAAG,CAAC,CAAC;oBACpB,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC5C,WAAW,GAAG,UAAU,CAAC;wBACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC;4BACnD,WAAW,IAAI,CAAC,CAAC;wBAClB,CAAC;oBACF,CAAC;oBACD,MAAM,CACL,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,WAAW,EACnC,mDAAmD,CACnD,CAAC;oBACF,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrB,UAAU,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAE9D,sDAAsD;oBACtD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC5C,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7B,MAAM,CACL,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,UAAU,EAC7C,iBAAiB,IAAI,SAAS,CAC9B,CACD,CAAC;oBACH,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,SAAS,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAgB;QACjE,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE,CAAC;QACnC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/D,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE9B,oCAAoC;QACpC,MAAM,oBAAoB,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACnF,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;QAExC,4BAA4B;QAC5B,MAAM,mBAAmB,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,mBAAmB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACnC,eAAe,CAAC,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAClE,mBAAmB,CAAC,sBAAsB,EAAE,CAC5C,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YACnC,MAAM,OAAO,GAAG,aAAa,CAC5B;gBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC,EACD,QAAQ,CACR,CAAC;YAEF,MAAM,GAAG,GAAG;gBACX,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/C,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,CAAC;YAEF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;YACzE,KAAK,MAAM,iBAAiB,IAAI;gBAC/B,EAAE;gBACF,+BAA+B;gBAC/B,yBAAyB;aACzB,EAAE,CAAC;gBACH,MAAM,MAAM,GAAG,iBAAiB,KAAK,+BAA+B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7E,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC7B,EAAE,CAAC,eAAe,CAAC,GAAG,MAAM,GAAG,iBAAiB,EAAE,EAAE,GAAG,EAAE;wBACxD,MAAM,OAAO,GAAG,aAAa,CAC5B;4BACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;yBAC7D,EACD,QAAQ,EACR,gBAAgB,CAChB,CAAC;wBAEF,MAAM,cAAc,GACnB,iBAAiB,KAAK,+BAA+B;4BACpD,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;4BACtD,CAAC,CAAC,EAAE,CAAC;wBACP,MAAM,YAAY,GACjB,iBAAiB,KAAK,yBAAyB;4BAC9C,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;4BACvD,CAAC,CAAC,EAAE,CAAC;wBACP,MAAM,GAAG,GAAG;4BACX,aAAa,CACZ;gCACC,MAAM,EAAE;oCACP,GAAG,cAAc;oCACjB,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;oCAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;oCAClD,GAAG,YAAY;iCACf;gCACD,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;6BAC5D,EACD,SAAS,EACT,gBAAgB,CAChB;4BACD,aAAa,CACZ;gCACC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;6BACrE,EACD,SAAS,EACT,gBAAgB,CAChB;yBACD,CAAC;wBACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE;4BACnD,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;4BACvC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CACrC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9D,CAAC;4BAEF,MAAM,YAAY,GACjB,iBAAiB,IAAI,+BAA+B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC9D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gCACtB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC/D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;4BAChE,CAAC;4BACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gCACpB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC/D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;4BAChE,CAAC;wBACF,CAAC,CAAC,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACtD,MAAM,OAAO,GAAG,aAAa,CAC5B;gBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;aAC7D,EACD,QAAQ,EACR,gBAAgB,CAChB,CAAC;YAEF,MAAM,GAAG,GAAG;gBACX,aAAa,CACZ;oBACC,MAAM,EAAE;wBACP,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBAClD;oBACD,MAAM,EAAE;wBACP,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBAClD;iBACD,EACD,SAAS,EACT,gBAAgB,CAChB;gBACD,aAAa,CACZ;oBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;iBAC5D,EACD,SAAS,EACT,gBAAgB,CAChB;aACD,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACtC,MAAM,OAAO,GAAG,aAAa,CAC5B;gBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;aAC7D,EACD,QAAQ,EACR,gBAAgB,CAChB,CAAC;YAEF,MAAM,GAAG,GAAG;gBACX,aAAa,CACZ;oBACC,MAAM,EAAE;wBACP,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBAClD;oBACD,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;iBAC5D,EACD,SAAS,EACT,gBAAgB,CAChB;gBACD,aAAa,CACZ;oBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;iBAC5D,EACD,SAAS,EACT,gBAAgB,CAChB;aACD,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAChD,MAAM,OAAO,GAAG,aAAa,CAC5B;gBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;aAC7D,EACD,QAAQ,EACR,gBAAgB,CAChB,CAAC;YAEF,MAAM,GAAG,GAAG;gBACX,aAAa,CACZ;oBACC,MAAM,EAAE;wBACP,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBAClD;oBACD,MAAM,EAAE;wBACP,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBAClD;iBACD,EACD,SAAS,EACT,gBAAgB,CAChB;gBACD,aAAa,CACZ;oBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;iBAC5D,EACD,SAAS,EACT,gBAAgB,CAChB;aACD,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG,aAAa,CAC5B;gBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;aAC7D,EACD,QAAQ,EACR,gBAAgB,CAChB,CAAC;YAEF,MAAM,GAAG,GAAG;gBACX,aAAa,CACZ;oBACC,MAAM,EAAE;wBACP,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBAClD;oBACD,MAAM,EAAE;wBACP,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;wBAClD,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;qBAClD;iBACD,EACD,SAAS,EACT,gBAAgB,CAChB;gBACD,aAAa,CACZ;oBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;iBAC5D,EACD,SAAS,EACT,gBAAgB,CAChB;aACD,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACzC,MAAM,OAAO,GAAG,aAAa,CAC5B;gBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,EACD,QAAQ,CACR,CAAC;YAEF,MAAM,GAAG,GAAG;gBACX,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACtB,MAAM,OAAO,GAAG,aAAa,CAC5B;gBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,EACD,QAAQ,CACR,CAAC;YAEF,MAAM,GAAG,GAAG;gBACX,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACtB,MAAM,OAAO,GAAG,aAAa,CAC5B;gBACC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC,EACD,QAAQ,CACR,CAAC;YAEF,MAAM,GAAG,GAAG;gBACX,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;gBACF,aAAa,CAAC;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvC,CAAC;aACF,CAAC;YACF,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;QACtD,KAAK,MAAM,YAAY,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC1C,KAAK,MAAM,YAAY,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC1C,KAAK,MAAM,aAAa,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;oBAC3C,KAAK,MAAM,aAAa,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;wBAC3C,KAAK,MAAM,mBAAmB,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;4BACnE,MAAM,WAAW,GAAa,EAAE,CAAC;4BACjC,IAAI,YAAY,EAAE,CAAC;gCAClB,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;4BACnC,CAAC;4BACD,IAAI,YAAY,EAAE,CAAC;gCAClB,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;4BACnC,CAAC;4BACD,IAAI,aAAa,EAAE,CAAC;gCACnB,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;4BACxC,CAAC;4BACD,IAAI,aAAa,EAAE,CAAC;gCACnB,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;4BACxC,CAAC;4BACD,IAAI,mBAAmB,EAAE,CAAC;gCACzB,WAAW,CAAC,IAAI,CAAC,6BAA6B,mBAAmB,GAAG,CAAC,CAAC;4BACvE,CAAC;4BACD,IAAI,KAAK,GAAG,OAAO,CAAC;4BACpB,KAAK;gCACJ,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC/E,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gCACd,MAAM,QAAQ,GAAyD,EAAE,CAAC;gCAC1E,MAAM,QAAQ,GAAyD,EAAE,CAAC;gCAC1E,IAAI,MAAM,GAAG,CAAC,CAAC;gCACf,IAAI,YAAY,EAAE,CAAC;oCAClB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC7C,MAAM,IAAI,CAAC,CAAC;gCACb,CAAC;gCACD,IAAI,aAAa,EAAE,CAAC;oCACnB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC7C,MAAM,IAAI,CAAC,CAAC;gCACb,CAAC;gCAED,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCACxD,IAAI,YAAY,EAAE,CAAC;oCAClB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC9C,CAAC;gCACD,IAAI,aAAa,EAAE,CAAC;oCACnB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCACvD,CAAC;gCACD,IAAI,mBAAmB,EAAE,CAAC;oCACzB,MAAM,YAAY,GAAG,mBAAmB,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCAEhE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCACrE,QAAQ,GAAG;wCACV,CAAC,CAAC,GAAG,MAAM,GAAG,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;wCACrD,CAAC,CAAC,GAAG,MAAM,GAAG,YAAY,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;qCACrD,CAAC;gCACH,CAAC;gCACD,MAAM,GAAG,GAAG,aAAa,CAAC;oCACzB,MAAM,EAAE,QAAQ;oCAChB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;iCACvC,CAAC,CAAC;gCACH,MAAM,GAAG,GAAG,aAAa,CAAC;oCACzB,MAAM,EAAE,QAAQ;oCAChB,MAAM,EAAE,QAAQ;iCAChB,CAAC,CAAC;gCAEH,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;gCAC9B,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gCACvB,iBAAiB,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,CAAC;4BAChD,CAAC,CAAC,CAAC;wBACJ,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,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\n/**\n * @fileoverview Tests for the array changeset operations\n */\n\nimport { assert, expect } from \"chai\";\nimport cloneDeep from \"lodash/cloneDeep.js\";\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: [[i + offset, generateNamedEntities(2, 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];\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(`inside remove range in B (${removeInsideInsertB})`);\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 ? \"no inserts\" : `inserts ${insertNames.join(\", \")}`;\n\t\t\t\t\t\t\tit(title, () => {\n\t\t\t\t\t\t\t\tconst insertsA: [number, ReturnType<typeof generateNamedEntities>][] = [];\n\t\t\t\t\t\t\t\tconst insertsB: [number, ReturnType<typeof generateNamedEntities>][] = [];\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([6 + offset + removeOffset, generateNamedEntities(1)]);\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"]}
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * @fileoverview In this file, we will test the path helper functions described in /src/properties/path_helper.js
7
7
  */
8
- import { copy as cloneDeep } from "fastest-json-copy";
8
+ import cloneDeep from "lodash/cloneDeep.js";
9
9
  import { ChangeSet } from "../changeset.js";
10
10
  describe("Reversible ChangeSets", function () {
11
11
  it("Inverting a string map insert", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"reversibleCs.spec.js","sourceRoot":"","sources":["../../src/test/reversibleCs.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AAEH,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,QAAQ,CAAC,uBAAuB,EAAE;IACjC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACxC,MAAM,UAAU,GAAG;YAClB,aAAa,EAAE;gBACd,UAAU,EAAE;oBACX,MAAM,EAAE;wBACP,MAAM,EAAE,sCAAsC;qBAC9C;iBACD;aACD;SACD,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3C,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACxC,MAAM,UAAU,GAAG;YAClB,aAAa,EAAE;gBACd,UAAU,EAAE;oBACX,MAAM,EAAE;wBACP,MAAM,EAAE,sCAAsC;qBAC9C;iBACD;aACD;SACD,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3C,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,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\n/**\n * @fileoverview In this file, we will test the path helper functions described in /src/properties/path_helper.js\n */\n\nimport { copy as cloneDeep } from \"fastest-json-copy\";\n\nimport { ChangeSet } from \"../changeset.js\";\n\ndescribe(\"Reversible ChangeSets\", function () {\n\tit(\"Inverting a string map insert\", () => {\n\t\tconst originalCS = {\n\t\t\t\"map<String>\": {\n\t\t\t\tselections: {\n\t\t\t\t\tinsert: {\n\t\t\t\t\t\ttarget: \"c6e96078-d1eb-8d41-219f-6f935794c453\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t\tconst invertedCS = new ChangeSet(cloneDeep(originalCS));\n\t\tinvertedCS.toInverseChangeSet();\n\n\t\tconst combined = new ChangeSet(originalCS);\n\t\tcombined.applyChangeSet(invertedCS);\n\t});\n\n\tit(\"Inverting a string map remove\", () => {\n\t\tconst originalCS = {\n\t\t\t\"map<String>\": {\n\t\t\t\tselections: {\n\t\t\t\t\tremove: {\n\t\t\t\t\t\ttarget: \"c6e96078-d1eb-8d41-219f-6f935794c453\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t\tconst invertedCS = new ChangeSet(cloneDeep(originalCS));\n\t\tinvertedCS.toInverseChangeSet();\n\n\t\tconst combined = new ChangeSet(originalCS);\n\t\tcombined.applyChangeSet(invertedCS);\n\t});\n});\n"]}
1
+ {"version":3,"file":"reversibleCs.spec.js","sourceRoot":"","sources":["../../src/test/reversibleCs.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AAEH,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,QAAQ,CAAC,uBAAuB,EAAE;IACjC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACxC,MAAM,UAAU,GAAG;YAClB,aAAa,EAAE;gBACd,UAAU,EAAE;oBACX,MAAM,EAAE;wBACP,MAAM,EAAE,sCAAsC;qBAC9C;iBACD;aACD;SACD,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3C,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACxC,MAAM,UAAU,GAAG;YAClB,aAAa,EAAE;gBACd,UAAU,EAAE;oBACX,MAAM,EAAE;wBACP,MAAM,EAAE,sCAAsC;qBAC9C;iBACD;aACD;SACD,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3C,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,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\n/**\n * @fileoverview In this file, we will test the path helper functions described in /src/properties/path_helper.js\n */\n\nimport cloneDeep from \"lodash/cloneDeep.js\";\n\nimport { ChangeSet } from \"../changeset.js\";\n\ndescribe(\"Reversible ChangeSets\", function () {\n\tit(\"Inverting a string map insert\", () => {\n\t\tconst originalCS = {\n\t\t\t\"map<String>\": {\n\t\t\t\tselections: {\n\t\t\t\t\tinsert: {\n\t\t\t\t\t\ttarget: \"c6e96078-d1eb-8d41-219f-6f935794c453\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t\tconst invertedCS = new ChangeSet(cloneDeep(originalCS));\n\t\tinvertedCS.toInverseChangeSet();\n\n\t\tconst combined = new ChangeSet(originalCS);\n\t\tcombined.applyChangeSet(invertedCS);\n\t});\n\n\tit(\"Inverting a string map remove\", () => {\n\t\tconst originalCS = {\n\t\t\t\"map<String>\": {\n\t\t\t\tselections: {\n\t\t\t\t\tremove: {\n\t\t\t\t\t\ttarget: \"c6e96078-d1eb-8d41-219f-6f935794c453\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t\tconst invertedCS = new ChangeSet(cloneDeep(originalCS));\n\t\tinvertedCS.toInverseChangeSet();\n\n\t\tconst combined = new ChangeSet(originalCS);\n\t\tcombined.applyChangeSet(invertedCS);\n\t});\n});\n"]}