@fluidframework/merge-tree 2.22.0 → 2.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"obliterate.concurrent.spec.js","sourceRoot":"","sources":["../../src/test/obliterate.concurrent.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\n\nimport { LoggingError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { MergeTree } from \"../mergeTree.js\";\nimport { Side } from \"../sequencePlace.js\";\n\nimport { PartialSyncTestHelper } from \"./partialSyncHelper.js\";\nimport { ReconnectTestHelper } from \"./reconnectHelper.js\";\nimport { useStrictPartialLengthChecks } from \"./testUtils.js\";\n\n/**\n * Some tests contain ASCII diagrams of the trees to make it easier to reason about\n * structure. The format of these diagrams is this:\n * - segments are separated by `-`.\n * - removed ranges are surrounded by `[` ... `]`\n * - obliterated ranges are surrounded by `(` ... `)`\n *\n * In cases where these ranges are ambiguous, there are additional diagrams\n * containing `v` and `-`, with the `v` denoting the start and end of the range\n *\n * E.g.\n *\n * ```\n * v---v\n * [ABC]\n * ```\n *\n * This diagram describes a single segment, `ABC`, that has been removed.\n *\n *\n * ```\n * v-----v\n * v---v\n * [[ABC]]\n * ```\n *\n * This diagram describes a single segment, `ABC`, that has been concurrently\n * removed by two clients.\n */\n\nfor (const incremental of [true, false]) {\n\tdescribe(`obliterate partial lengths incremental = ${incremental}`, () => {\n\t\tuseStrictPartialLengthChecks();\n\n\t\tbeforeEach(() => {\n\t\t\tMergeTree.options.incrementalUpdate = incremental;\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tMergeTree.options.incrementalUpdate = true;\n\t\t});\n\n\t\tit(\"obliterate, then insert at the end of the string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"01234567\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"A\", 0, 8);\n\t\t\thelper.insertText(\"B\", 8, \"BBB\");\n\t\t\thelper.processAllOps();\n\n\t\t\thelper.logger.validate({ baseText: \"BBB\" });\n\t\t});\n\n\t\tit(\"insert, then obliterate at the end of the string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"01234567\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"B\", 8, \"BBB\");\n\t\t\thelper.obliterateRange(\"A\", 0, 8);\n\t\t\thelper.processAllOps();\n\n\t\t\thelper.logger.validate({ baseText: \"BBB\" });\n\t\t});\n\n\t\tit(\"length of children does not differ from parent when overlapping remove+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEFGH\n\t\t\t// I-[J]-(KLM-[ABC]-D-123456-E-[FG]-H)\n\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEFGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 0, 3);\n\t\t\thelper.insertText(\"C\", 1, \"123456\");\n\t\t\thelper.removeRange(\"A\", 5, 7);\n\t\t\thelper.insertText(\"A\", 0, \"IJKLM\");\n\t\t\thelper.obliterateRange(\"A\", 2, 11);\n\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"I\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes concurrent insert that occurs after obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.insertText(\"C\", 2, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes concurrent insert that occurs before obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"C\", 2, \"X\");\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete unacked segment at start of string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"XAB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"XAB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"XAB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"throws when local obliterate has range end outside length of local string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\n\t\t\ttry {\n\t\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\t\tassert.fail(\"should not be possible to obliterate outside local range\");\n\t\t\t} catch (error) {\n\t\t\t\tassert(error instanceof LoggingError);\n\t\t\t\tassert.equal(error.message, \"RangeOutOfBounds\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"does not delete when obliterate immediately after insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"W\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"W\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"W\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"W\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when between local insert+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"X\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when between local insert+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"X\");\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"X\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when in middle of segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"XB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"XB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"XB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes segment inserted into locally obliterated segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates lengths after obliterated insertion\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"N\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"B\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\tassert.equal(helper.clients.A.getLength(), 0);\n\t\t\tassert.equal(helper.clients.B.getLength(), 0);\n\t\t\tassert.equal(helper.clients.C.getLength(), 0);\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates lengths when insertion causes tree to split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"0\");\n\t\t\thelper.insertText(\"C\", 0, \"123\");\n\t\t\thelper.insertText(\"B\", 0, \"BB\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 5);\n\t\t\thelper.insertText(\"B\", 1, \"A\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText().length, helper.clients.A.getLength());\n\t\t\tassert.equal(helper.clients.B.getText().length, helper.clients.B.getLength());\n\t\t\tassert.equal(helper.clients.C.getText().length, helper.clients.C.getLength());\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GG30\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"length of node split by insertion does not count remotely obliterated segments\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"A\", 0, \"2\");\n\t\t\thelper.insertText(\"C\", 0, \"XXXX\");\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 6);\n\t\t\thelper.insertText(\"C\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GDGX21\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"GDGX21\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"length of node split by obliterate does not count remotely obliterated segments\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"A\", 0, \"2\");\n\t\t\thelper.insertText(\"C\", 0, \"XXXX\");\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 6);\n\t\t\thelper.insertText(\"C\", 1, \"C\");\n\t\t\thelper.insertText(\"B\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GCGX21\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"GCGX21\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"counts remotely but not concurrently inserted segments for length when tree is split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// a-b-c-d-e-123\n\t\t\t// (a-b)-c-d-e-1-[2]-3\n\n\t\t\thelper.insertText(\"B\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"e\");\n\t\t\thelper.insertText(\"C\", 0, \"d\");\n\t\t\thelper.insertText(\"C\", 0, \"c\");\n\t\t\thelper.insertText(\"C\", 0, \"b\");\n\t\t\thelper.insertText(\"C\", 0, \"a\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.removeRange(\"B\", 4, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"cde13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"cde13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does obliterate X for all clients\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"DE\");\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"X\");\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not include remote but unacked segments in partial len calculation\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 89-4567-123-X\n\t\t\t// 8-(9-4-w-567-1)-23-Y-X\n\n\t\t\thelper.insertText(\"A\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"4567\");\n\t\t\thelper.insertText(\"B\", 0, \"89\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 1, 7);\n\t\t\thelper.insertText(\"A\", 3, \"w\");\n\t\t\thelper.insertText(\"C\", 3, \"Y\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"823YX\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"823YX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"correctly accounts for overlapping obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"correctly accounts for overlapping obliterate and remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"clones movedClientIds array during insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// the bug found here:\n\t\t\t// the X was skipped over by client `A` because it had already been\n\t\t\t// deleted, so its length at refSeq was 0\n\t\t\t//\n\t\t\t// this was due to the movedClientIds array not being properly cloned\n\t\t\t// when marking obliterated during insert\n\n\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"B\", 2, \"X\");\n\t\t\thelper.obliterateRange(\"A\", 1, 3);\n\t\t\thelper.obliterateRange(\"B\", 1, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AD\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"AD\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"client partial lens consider overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"123\");\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"C\", 4, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AEF13\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"AEF13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AEF13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"client partial lens consider overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AEGX\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AEGX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"tracks obliterate refSeq when acking op for partial len calculation\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// v-----------------------v\n\t\t\t// v--v\n\t\t\t// v--v\n\t\t\t// 6-(345-AB-(CD)-E-(FG)-HI-1)-2\n\n\t\t\thelper.insertText(\"A\", 0, \"12\");\n\t\t\thelper.insertText(\"B\", 0, \"ABCDEFGHI\");\n\t\t\thelper.insertText(\"A\", 0, \"345\");\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.insertText(\"A\", 0, \"6\");\n\t\t\thelper.obliterateRange(\"B\", 3, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"62\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"62\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not have negative len when segment obliterated before insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 1234567-D-C-AB\n\t\t\t// 12-([3-X-45]-67)-D-C-AB\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 0, \"D\");\n\t\t\thelper.insertText(\"A\", 0, \"1234567\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 2, 7);\n\t\t\thelper.removeRange(\"A\", 2, 5);\n\t\t\thelper.insertText(\"C\", 3, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"12B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"12B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"12B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not have negative len when segment obliterated before insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDE-1-[2]-3\n\t\t\t// (A-XX-B)-(CD)-E-1-3\n\n\t\t\thelper.insertText(\"B\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDE\");\n\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"XX\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"E13\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"E13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"E13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes segments between two obliterates with different seq\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 90-8-1234-(5)-67-D-C-B-A\n\t\t\t// 9-(EFG-[0-8-1234-(5)-67)]-D-C-B-A\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"1234567\");\n\t\t\thelper.obliterateRange(\"B\", 4, 5);\n\t\t\thelper.insertText(\"A\", 0, \"8\");\n\t\t\thelper.insertText(\"A\", 0, \"90\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 1, 9);\n\t\t\thelper.insertText(\"A\", 1, \"EFG\");\n\t\t\thelper.obliterateRange(\"A\", 1, 11);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"9DCBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 1, \"12\");\n\t\t\thelper.insertText(\"A\", 0, \"CD\");\n\t\t\thelper.obliterateRange(\"A\", 1, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"C2\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"C2\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"C2\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"considers obliterated local segments as remotely obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// G-(H-F-I-C)-J-DE-A-(B)\n\t\t\t// G-J-(H-F-I-CD)-E\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"C\", 0, \"CDE\");\n\t\t\thelper.insertText(\"B\", 0, \"F\");\n\t\t\thelper.insertText(\"C\", 0, \"GH\");\n\t\t\thelper.obliterateRange(\"C\", 1, 3);\n\t\t\thelper.insertText(\"B\", 1, \"I\");\n\t\t\thelper.insertText(\"C\", 1, \"J\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GJDEA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"GJDEA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses hier block in obliterated when len at ref seq is >0 and len at len seq == 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 2, \"CD\");\n\t\t\thelper.removeRange(\"A\", 1, 3);\n\t\t\thelper.insertText(\"C\", 0, \"12345\");\n\t\t\thelper.insertText(\"B\", 0, \"EFG\");\n\t\t\thelper.insertText(\"B\", 1, \"HIJKL\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 6, 12);\n\t\t\thelper.removeRange(\"A\", 5, 7);\n\t\t\thelper.obliterateRange(\"C\", 7, 9);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), helper.clients.D.getText());\n\t\t\tassert.equal(helper.clients.B.getText(), \"EHIJKAD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses hier block in obliterate when len at ref seq is >0 and len at len seq == 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// [E]-FGH-12-[A]-[B]-CD\n\t\t\t// 3-4-F-[G-(H-1)-2]-CD\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.removeRange(\"B\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"12\");\n\t\t\thelper.insertText(\"A\", 0, \"EFGH\");\n\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 1, 5);\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.insertText(\"A\", 0, \"3\");\n\t\t\thelper.insertText(\"A\", 0, \"4\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"43FBD\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"43FBD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"ignores segments where movedSeq < seq for partial len calculations\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.insertText(\"A\", 0, \"DEF\");\n\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"B\", 0, \"123456\");\n\t\t\thelper.obliterateRange(\"B\", 2, 7);\n\t\t\thelper.insertText(\"A\", 1, \"Y\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 4, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"12BCX\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"12BCX\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"12BCX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"accounts for overlapping obliterates from same client\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"accounts for concurrently obliterated segments from the perspective of the inserting client for partial lengths\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 0, \"1234\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 1, 3);\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.insertText(\"A\", 4, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"1E4CBA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"1E4CBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses segments when there is a local obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"12\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 2, \"C\");\n\t\t\thelper.obliterateRange(\"A\", 0, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"keeps track of all obliterates on a segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// B-A\n\t\t\t// (B-C-(A))\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 1, 2);\n\t\t\t// bug here: because segment A has already been obliterated, we wouldn't\n\t\t\t// mark it obliterated by this op as well, meaning that segments in\n\t\t\t// this range would look to the right and not find a matching move seq\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"C\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"many overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// EF-ABCD\n\t\t\t// (1)-2-((E)-F-A)-B-(C)-D\n\n\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\thelper.insertText(\"B\", 0, \"EF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 3);\n\t\t\thelper.insertText(\"A\", 0, \"12\");\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"2BD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates at start\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 12345-B-A\n\t\t\t// ((1-C-2)-3)-4-D-5-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"A\", 0, \"12345\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"C\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"partial lengths updated when local insert is acked\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// A-BCDEF\n\t\t\t// (A-B-G-C)-D-I-E-H-F\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 1, \"BCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 3);\n\t\t\thelper.insertText(\"A\", 2, \"G\");\n\t\t\thelper.insertText(\"B\", 5, \"H\");\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"DIEHF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"two local obliterates get different seq numbers after ack\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// C-AB\n\t\t\t// (C-A)-D-(B)\n\n\t\t\thelper.insertText(\"C\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\t// bug here: when the op is acked by client C, it would incorrectly give\n\t\t\t// segment B the same movedSeq despite coming from a different op\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 2, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"D\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"D\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"acks remote segment obliterated by local op\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// (D-C-A)-B\n\t\t\t// (D-C-A)-B-E\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\t// bug here: when the op is acked by client B, it wouldn't correctly\n\t\t\t// visit the segment \"C\", leaving the obliterate unacked\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 1, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BE\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"BE\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"skips segments obliterated before refSeq when traversing for insertion\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDE-(A)-B\n\t\t\t// C-(DE-F-(A)-B)\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"CDE\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 4);\n\t\t\t// bug here: when traversing to see if segment should be obliterated after\n\t\t\t// insertion, traversal would stop at segment A because it was obliterated\n\t\t\t// before the refSeq, which made it appear as an un-deleted segment\n\t\t\thelper.insertText(\"B\", 3, \"F\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"C\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"C\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"C\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"applies correct movedSeq when right segment has multiple movedSeqs\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-C-D-(B))\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\t// bug here: for client B, segment B had multiple movedSeqs, and when\n\t\t\t// traversal went to the right and found a matching movedSeq in the movedSeqs\n\t\t\t// array, it selected the lowest seq in the array, which differed from\n\t\t\t// the correct and matching movedSeq\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"takes the correct moved client id when multiple clientIds for right segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-C-D-(B))\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\t// bug here: we would incorrectly take the client id of the first element\n\t\t\t// in the movedClientIds array because we did not take into account the\n\t\t\t// length of _both_ the local and non-local movedSeqs arrays\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"selects clientId if 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-D-E-(C)-B)\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\t// bug here: client id was 0, and the check we used was !clientId, rather\n\t\t\t// than clientId !== undefined\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.insertText(\"A\", 2, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterates unacked segment inside non-leaf-segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGHIJ-E-12345678-D-C-A-K-B\n\t\t\t// FGHIJ-E-12345-(6-[7-L-8-D]-C)-A-K-B\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"12345678\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"C\", 0, \"FGHIJ\");\n\t\t\thelper.insertText(\"A\", 2, \"K\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 12, 15);\n\t\t\t// bug here: when traversing for obliterate, we visit unacked segments\n\t\t\t// within the range, considering their length 0 but still marking them\n\t\t\t// obliterated. if the segment was inside a hiernode whose length was\n\t\t\t// also 0, we would incorrectly skip over the entire hier node, rather\n\t\t\t// than visiting the children segments\n\t\t\thelper.obliterateRange(\"A\", 11, 13);\n\t\t\thelper.insertText(\"B\", 13, \"L\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"FGHIJE12345AKB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"FGHIJE12345AKB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"FGHIJE12345AKB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"tracks length at seq of lower move/remove seq when overlapping\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// H-FG-A-CDE-B\n\t\t\t// (H-F-[G-A)-C-I-D]-E-B\n\n\t\t\thelper.insertText(\"C\", 0, \"AB\");\n\t\t\thelper.insertText(\"C\", 1, \"CDE\");\n\t\t\thelper.insertText(\"B\", 0, \"FG\");\n\t\t\thelper.insertText(\"A\", 0, \"H\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.removeRange(\"B\", 2, 6);\n\t\t\t// bug here: this insert triggers a new chunk to be created. when the\n\t\t\t// partial lengths of the new chunk were calculated, it incorrectly\n\t\t\t// used the removedSeq instead of the moveSeq, despite the latter having\n\t\t\t// occurred prior to the remove\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IEB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"IEB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"IEB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"segment obliterated on insert overlaps with local obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// ((A-C)-B)\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterates entire string when concurrent inserts inside range\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// GT\n\t\t\t// (G-O-S-Y-T)\n\n\t\t\thelper.insertText(\"B\", 0, \"GT\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.insertText(\"C\", 1, \"OY\");\n\t\t\thelper.insertText(\"C\", 2, \"S\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterate ack traverses over non-obliterated remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEFGH-1\n\t\t\t// ABCDE-(F-[G]-2-H)-1\n\t\t\t// ABCDE-(F-[G]-2-H)-1-3\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDEFGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"C\", 6, 7);\n\t\t\thelper.insertText(\"A\", 7, \"2\");\n\t\t\t// obliterate at seq 5 isn't getting acked because it stops traversal\n\t\t\t// at the removed segment, which doesn't have move info\n\t\t\thelper.obliterateRange(\"C\", 5, 7);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 6, \"3\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"ABCDE13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"ABCDE13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate when remove happens last\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGH-E-D-BC-A\n\t\t\t// ([F]-G)-H-E-D-B-I-C-A\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"B\", 0, \"FGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 5, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"HEDBICA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate when remove happens last _and_ partial length already exists\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGH-CDE-B-A\n\t\t\t// [F-(GH)-C]-D-Z-E-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"B\", 0, \"CDE\");\n\t\t\thelper.insertText(\"C\", 0, \"FGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 1, 2);\n\t\t\thelper.removeRange(\"A\", 0, 4);\n\t\t\thelper.insertText(\"A\", 1, \"Z\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DZEBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterate and remove when obliterate is larger than remove and happened last\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// H-CDEFG-B-A\n\t\t\t// (H-C-[D]-E)-F-Z-G-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"A\", 0, \"CDEFG\");\n\t\t\thelper.insertText(\"A\", 0, \"H\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"Z\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"FZGBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"wasMovedOnInsert remains after leaf node is split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CD-B-A\n\t\t\t// I-(C-(G)H-E)-F-D-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"B\", 0, \"CD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"EF\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.insertText(\"A\", 1, \"GH\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IFDBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates, segment is obliterated on insert and by local client\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// DEFG-BC-A\n\t\t\t// v-----------v\n\t\t\t// v-----v\n\t\t\t// (D-(E-H-F)-G)-B-I-C-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"BC\");\n\t\t\thelper.insertText(\"B\", 0, \"DEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.insertText(\"A\", 2, \"H\");\n\t\t\thelper.obliterateRange(\"A\", 0, 5);\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BICA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates and remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGHIJKL-BCDE-A\n\t\t\t// (FGHI-[JK-(L-B)-C]-D)-E-M-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BCDE\");\n\t\t\thelper.insertText(\"A\", 0, \"FGHIJKL\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"B\", 4, 9);\n\t\t\thelper.obliterateRange(\"A\", 6, 8);\n\t\t\thelper.obliterateRange(\"C\", 0, 10);\n\t\t\thelper.insertText(\"C\", 1, \"M\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"EMA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not mark obliterated on insert for non-acked obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDE-B-A\n\t\t\t// I-((C-F)-G-D)-H-E-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"CDE\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 1, \"FG\");\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"A\", 2, \"H\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"C\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IHEBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"partial len isLocal when seq is -1 but moveSeq > -1\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEFG-AB\n\t\t\t// C-((D-I-E)-F)-G-A-H-B\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"B\", 0, \"CDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.insertText(\"B\", 4, \"H\");\n\t\t\thelper.insertText(\"A\", 2, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"CGAHB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterated on insert by overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// B-DEFG-C-A\n\t\t\t// ((B-D-H-E)-F-I-G-C)-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 0, \"BC\");\n\t\t\thelper.insertText(\"A\", 1, \"DEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 6);\n\t\t\thelper.obliterateRange(\"A\", 0, 3);\n\t\t\thelper.insertText(\"C\", 2, \"H\");\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"A\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEF\n\t\t\t// v-------------v\n\t\t\t// v-----------v\n\t\t\t// v-------v\n\t\t\t// I-((AB-(C-G)-H-D)-E)-F\n\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.obliterateRange(\"C\", 2, 5);\n\t\t\thelper.insertText(\"A\", 3, \"GH\");\n\t\t\thelper.insertText(\"C\", 0, \"I\");\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEF-AB\n\t\t\t// v-------------------v\n\t\t\t// v---------v\n\t\t\t// v-v\n\t\t\t// ((C-(G)-H-D)-E-I-F-A)-B\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"C\", 0, \"CDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 5);\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"A\", 1, \"GH\");\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate, local obliterate does not have a remote obliterated len\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// v-v------v-v\n\t\t\t// G-(H-[F]-E)-D-[A]-B-I-C\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"A\", 0, \"F\");\n\t\t\thelper.removeRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"B\", 0, \"GH\");\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GDBIC\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"triple overlapping obliterate and overlapping remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// I-H-BCDEFG-A\n\t\t\t// v------------v\n\t\t\t// v-------v\n\t\t\t// v-v\n\t\t\t// v-------------------------v\n\t\t\t// [[I]-H-BCD-(E-(F-(J)-G))-A]\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BCDEFG\");\n\t\t\thelper.insertText(\"B\", 0, \"H\");\n\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 6, 8);\n\t\t\thelper.obliterateRange(\"A\", 5, 8);\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"C\", 6, \"J\");\n\t\t\thelper.obliterateRange(\"C\", 6, 7);\n\t\t\thelper.removeRange(\"A\", 0, 6);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"triple overlapping obliterate with one being local\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEFG-B-A\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// v------v\n\t\t\t// J-(CD-((E-H)-F))-I-G-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"CDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 2, 4);\n\t\t\thelper.insertText(\"C\", 3, \"H\");\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.insertText(\"B\", 0, \"J\");\n\t\t\thelper.obliterateRange(\"B\", 3, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.C.getText(), \"JIGBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterate ack traversal is not stopped by moved segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCD\n\t\t\t// (A-(B)-E-C)-D-F\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"C\", 2, \"E\");\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 1, \"F\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DF\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"DF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates partial lengths for segments when doing obliterate ack traversal\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// O-JKLMN-FGHI-E-CD-AB\n\t\t\t// v-v---v-----v\n\t\t\t// (P-O-JKLMN-FG-[H]-Q-[I-E-C]-D-A)-B\n\t\t\t// (P-O-JKLMN-FG-[H]-Q-[I-E-C]-D-A)-B-R\n\n\t\t\t// problematic segment: H-Q-I-E\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"CD\");\n\t\t\thelper.insertText(\"A\", 0, \"E\");\n\t\t\thelper.insertText(\"A\", 0, \"FGHI\");\n\t\t\thelper.insertText(\"C\", 0, \"JKLMN\");\n\t\t\thelper.insertText(\"B\", 0, \"O\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 0, \"P\");\n\t\t\thelper.insertText(\"B\", 9, \"Q\");\n\t\t\thelper.removeRange(\"A\", 9, 13);\n\t\t\thelper.obliterateRange(\"A\", 0, 11);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"R\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BR\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"combines remote obliterated length \", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// R-XYZ12-STUVW-LMNOP-DEFGHIJK-A-34567890-Q-BC\n\t\t\t// v---------------v------------v------v--------v------------v\n\t\t\t// [R-XYZ12-STUVW-L]-abcdefghij-[MNOP-D]-klmnop-[EFGHIJK-A-34]-5-(6-x-7)-890-Q-BC\n\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// a-T-b-S-c-[def]-ghij-k-Q-l-R-mno-[p-5-8-[9]-0-Q-B]-C\n\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// segment is R-mno-[p-5-8-[9]-0-Q-B]-C\n\t\t\t// v-------------------------------v\n\t\t\t// v--------v\n\t\t\t// v------------v\n\t\t\t// R-mno-[p-[EFGHIJK-A-34]-5-(6-x-7)-8-[9]-0-Q-B]-C\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.insertText(\"C\", 0, \"DEFGHIJK\");\n\t\t\thelper.insertText(\"C\", 0, \"LMNOP\");\n\t\t\thelper.insertText(\"A\", 1, \"Q\");\n\t\t\thelper.insertText(\"B\", 0, \"RSTUVW\");\n\t\t\thelper.insertText(\"B\", 1, \"XYZ12\");\n\t\t\thelper.insertText(\"A\", 1, \"34567890\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 29, \"x\");\n\t\t\thelper.removeRange(\"B\", 0, 27);\n\t\t\thelper.insertText(\"A\", 12, \"abcdefghij\");\n\t\t\thelper.obliterateRange(\"A\", 38, 40);\n\t\t\thelper.insertText(\"C\", 17, \"klmnop\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"abcdefghijklmnop5890QBC\");\n\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"B\", 3, 6);\n\t\t\thelper.insertText(\"C\", 11, \"Q\");\n\t\t\thelper.insertText(\"B\", 9, \"R\");\n\t\t\thelper.insertText(\"B\", 2, \"S\");\n\t\t\thelper.removeRange(\"C\", 19, 23);\n\t\t\thelper.obliterateRange(\"B\", 14, 18);\n\t\t\thelper.insertText(\"B\", 1, \"T\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"aTbScghijkQlRmnoC\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"three obliterates on same segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// A\n\t\t\t// (C-B-D-((A)))\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tdescribe(\"incremental partial length updates\", () => {\n\t\t\tit(\"obliterates concurrently inserted segment\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// (C-B-A)\n\n\t\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 2 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// (C-B-D-A)\n\n\t\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\t\thelper.insertText(\"B\", 0, \"C\");\n\t\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 4 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// I-F-(G-D-H-E-C-A)-B\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"B\", 0, \"C\");\n\t\t\t\thelper.insertText(\"A\", 0, \"DE\");\n\t\t\t\thelper.insertText(\"B\", 0, \"FG\");\n\t\t\t\thelper.obliterateRange(\"B\", 1, 4);\n\t\t\t\thelper.insertText(\"A\", 1, \"H\");\n\t\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IFB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 3 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// I-G-(H-D-F-E-B)-C-A\n\n\t\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\t\thelper.insertText(\"A\", 0, \"DE\");\n\t\t\t\thelper.insertText(\"A\", 1, \"F\");\n\t\t\t\thelper.insertText(\"B\", 0, \"GH\");\n\t\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IGCA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"overlapping remove + obliterate, remove happened first\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// D-EFG-B-H-C-A\n\t\t\t\t// I-D-([E]-F)-G-B-H-C-A\n\n\t\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\t\thelper.insertText(\"C\", 0, \"DEFG\");\n\t\t\t\thelper.insertText(\"B\", 1, \"H\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\t\thelper.obliterateRange(\"A\", 1, 3);\n\t\t\t\thelper.insertText(\"A\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IDGBHCA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"overlapping remove + obliterate, remove happened last\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// DEFGH-C-B-A\n\t\t\t\t// [D]-[E-(F)-G]-H-C-B-A\n\n\t\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\t\thelper.insertText(\"B\", 0, \"DEFGH\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\t\thelper.removeRange(\"A\", 1, 4);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"HCBA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"segment inside locally obliterated segment group is split\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// CDEF-AB\n\t\t\t\t// [C]-DE-(F-(G)-H-A)-B\n\t\t\t\t// [C]-DE-(F-(G)-H-A)-(B)\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"B\", 0, \"CDEF\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 3, \"GH\");\n\t\t\t\thelper.obliterateRange(\"C\", 3, 4);\n\t\t\t\thelper.obliterateRange(\"A\", 3, 5);\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"DE\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"continues traversal past locally removed segment inserted before first obliterate\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// ABC\n\t\t\t\t// (E-D-(A)-[B]-C)\n\n\t\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 0, \"E\");\n\t\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"keeps track of remote obliterated length when hier node contains hier nodes\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// LMNO-HIJ-E-K-FG-D-C-AB\n\t\t\t\t// lmnopq-L-[M]-NO-H-ghijk-I-(J-E-K-FG-D-C-A-a)-bc-ef-d-B\n\t\t\t\t// v--------------------------------------v\n\t\t\t\t// v-------------------v\n\t\t\t\t// r-l-x-mn-[opq-L-[M]-NO-H-gh-s]-t-(u-i-[j]-k-I-(J-E-K-FG-D-C-A-a)-b-v-c-e)-f-d-B\n\n\t\t\t\t// bad segment: (I-(J-E-K-FG-D-C-A-a)-b-v-c-e)-f-d-B\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\t\thelper.insertText(\"A\", 0, \"D\");\n\t\t\t\thelper.insertText(\"B\", 0, \"EFG\");\n\t\t\t\thelper.insertText(\"C\", 0, \"HIJ\");\n\t\t\t\thelper.insertText(\"B\", 1, \"K\");\n\t\t\t\thelper.insertText(\"B\", 0, \"LMNO\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\t\thelper.insertText(\"A\", 13, \"abcd\");\n\t\t\t\thelper.obliterateRange(\"A\", 5, 14);\n\t\t\t\thelper.insertText(\"A\", 7, \"ef\"); // seq: 11, len: 7\n\t\t\t\thelper.insertText(\"B\", 5, \"ghijk\");\n\t\t\t\thelper.insertText(\"C\", 0, \"lmnopq\"); // seq: 13, len: 7\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"lmnopqLNOHghijkIbcefdB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.insertText(\"A\", 0, \"r\");\n\t\t\t\thelper.insertText(\"B\", 12, \"stu\");\n\t\t\t\thelper.insertText(\"A\", 18, \"v\"); // seq: 16, len: 8\n\t\t\t\thelper.obliterateRange(\"B\", 14, 22); // seq: 17, len: 3\n\t\t\t\thelper.removeRange(\"B\", 3, 13); // seq: 18, len: 3\n\t\t\t\thelper.removeRange(\"A\", 14, 15); // seq: 19, len: 3\n\t\t\t\thelper.insertText(\"B\", 1, \"x\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"rlxmntfdB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"combines remote obliterated length for parent node of tree with depth >=3\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// VWXYZ0-(K)-[L]-M-[N]-O-EFGHIJ-[A]-B-P-TU-QRS-CD\n\t\t\t\t// v-v------v------------v\n\t\t\t\t// v--------------------v\n\t\t\t\t// v----v---------v-v-----v-----v------------------------------v-v\n\t\t\t\t// V-c-W-[XYZ0]-(K)-[L]-[M]-[N]-[O-EFG]-[H]-a-[b-[IJ-[A]-B-P-T]-U-Q]-[R]-S-C-d-f-e-D\n\n\t\t\t\t// v-v------v-v---v-----------v\n\t\t\t\t// v-------------------------v\n\t\t\t\t// v------v---------v-v-----v---v---v--v-----------------------------------v-v\n\t\t\t\t// v---------v\n\t\t\t\t// j-i-(V-c-W-[XY)-Z0]-(K)-[L]-[M]-[N]-[O-E]-h-[FG]-[H]-a-[b-[I]-g-[J-[A]-B-P-T]-U-Q]-[R]-S-C-d-f-e-D\n\n\t\t\t\t// problem segment: j-i-(V-c-W-[XY)-Z0]-(K)-[L]-[M]-[N]-[O-E]-h-[FG]-[H]-a-[b]\n\t\t\t\t// specifically: j-(V-c-W\n\n\t\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"B\", 0, \"EFGHIJ\");\n\t\t\t\thelper.insertText(\"A\", 0, \"KLMNO\");\n\t\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 1, \"PQRS\");\n\t\t\t\thelper.insertText(\"C\", 2, \"TU\");\n\t\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\t\thelper.insertText(\"A\", 0, \"VWXYZ0\"); // seq: 10, len: 2\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"VWXYZ0MOEFGHIJBPTUQRSCD\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.insertText(\"C\", 12, \"ab\");\n\t\t\t\thelper.removeRange(\"B\", 11, 17);\n\t\t\t\thelper.removeRange(\"C\", 13, 21);\n\t\t\t\thelper.insertText(\"B\", 1, \"c\"); // seq: 14, len: 3\n\t\t\t\thelper.insertText(\"C\", 16, \"de\");\n\t\t\t\thelper.insertText(\"C\", 17, \"f\");\n\t\t\t\thelper.removeRange(\"B\", 3, 15);\n\t\t\t\thelper.insertText(\"A\", 13, \"g\");\n\t\t\t\thelper.insertText(\"A\", 9, \"h\");\n\t\t\t\thelper.obliterateRange(\"C\", 0, 4); // seq: 20, len: 0\n\t\t\t\thelper.insertText(\"C\", 0, \"i\");\n\t\t\t\thelper.insertText(\"A\", 0, \"j\"); // seq: 22, len: 1\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"jihagSCdfeD\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"Fuzz regression for negative partial lengths\", () => {\n\t\t\t\t// This is a regression test for AB#15630.\n\t\t\t\t// Strict partial lengths checks reported an inconsistency when B applies A's\n\t\t\t\t// obliterateRange op for the length of the string at refSeq 4.\n\t\t\t\t// With strict partial lengths disabled, this manifested in 0x4bc on the subsequent op application.\n\t\t\t\tconst helper = new PartialSyncTestHelper();\n\n\t\t\t\thelper.insertText(\"D\", 0, \"ABCDEFGH\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.insertText(\"B\", 0, \"123456xxxxx7890\");\n\t\t\t\thelper.advanceClients(\"C\");\n\t\t\t\thelper.obliterateRange(\"B\", 15, 20);\n\t\t\t\thelper.advanceClients(\"A\", \"B\");\n\t\t\t\thelper.insertText(\"A\", 4, \"a\");\n\t\t\t\thelper.advanceClients(\"A\");\n\t\t\t\thelper.insertText(\"C\", 0, \"c\");\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"C\",\n\t\t\t\t\t{ pos: 4, side: Side.After },\n\t\t\t\t\t{ pos: 10, side: Side.After },\n\t\t\t\t);\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"A\",\n\t\t\t\t\t{ pos: 0, side: Side.Before },\n\t\t\t\t\t{ pos: 7, side: Side.After },\n\t\t\t\t);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\thelper.logger.validate({ baseText: \"cx7890FGH\" });\n\t\t\t});\n\n\t\t\tit(\"Avoids adding entries for insert with subsequent removal\", () => {\n\t\t\t\tconst helper = new PartialSyncTestHelper();\n\t\t\t\thelper.insertText(\"D\", 0, \"bZL4aQd\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.insertText(\"A\", 0, \"8mvaLcEa4nwhELu\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\t// These 3 ops are the crux of the test: A's inserted segment is both obliterated by C as soon as it is inserted\n\t\t\t\t// as well as removed by A before the insertion is acked.\n\t\t\t\t// This is an interesting case for partial lengths of observing clients, as:\n\t\t\t\t// - obliteration by C on insertion means the segment would normally only be visible to the inserting client\n\t\t\t\t// - ... but after some client receives the notice of A's removal, it shouldn't be visible there either!\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"C\",\n\t\t\t\t\t{ pos: 2, side: Side.After },\n\t\t\t\t\t{ pos: 21, side: Side.After },\n\t\t\t\t);\n\t\t\t\thelper.insertText(\"A\", 3, \"Y\");\n\t\t\t\thelper.removeRange(\"A\", 2, 4);\n\n\t\t\t\t// The subsequent operations forced failure at the time the code was defective, since clients with incorrect\n\t\t\t\t// partial lengths adjustments for A would misinterpret where these ops should go.\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"A\",\n\t\t\t\t\t{ pos: 2, side: Side.After },\n\t\t\t\t\t{ pos: 6, side: Side.After },\n\t\t\t\t);\n\t\t\t\thelper.obliterateRange(\"A\", 2, 3);\n\t\t\t\thelper.insertText(\"A\", 3, \"X\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\thelper.logger.validate({ baseText: \"8m\" });\n\t\t\t});\n\t\t});\n\t});\n}\n"]}
1
+ {"version":3,"file":"obliterate.concurrent.spec.js","sourceRoot":"","sources":["../../src/test/obliterate.concurrent.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\n\nimport { LoggingError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { MergeTree } from \"../mergeTree.js\";\nimport { Side } from \"../sequencePlace.js\";\n\nimport { PartialSyncTestHelper } from \"./partialSyncHelper.js\";\nimport { ReconnectTestHelper } from \"./reconnectHelper.js\";\nimport { useStrictPartialLengthChecks } from \"./testUtils.js\";\n\n/**\n * Some tests contain ASCII diagrams of the trees to make it easier to reason about\n * structure. The format of these diagrams is this:\n * - segments are separated by `-`.\n * - removed ranges are surrounded by `[` ... `]`\n * - obliterated ranges are surrounded by `(` ... `)`\n *\n * In cases where these ranges are ambiguous, there are additional diagrams\n * containing `v` and `-`, with the `v` denoting the start and end of the range\n *\n * E.g.\n *\n * ```\n * v---v\n * [ABC]\n * ```\n *\n * This diagram describes a single segment, `ABC`, that has been removed.\n *\n *\n * ```\n * v-----v\n * v---v\n * [[ABC]]\n * ```\n *\n * This diagram describes a single segment, `ABC`, that has been concurrently\n * removed by two clients.\n */\n\nfor (const incremental of [true, false]) {\n\tdescribe(`obliterate partial lengths incremental = ${incremental}`, () => {\n\t\tuseStrictPartialLengthChecks();\n\n\t\tbeforeEach(() => {\n\t\t\tMergeTree.options.incrementalUpdate = incremental;\n\t\t});\n\n\t\tafterEach(() => {\n\t\t\tMergeTree.options.incrementalUpdate = true;\n\t\t});\n\n\t\tit(\"obliterate, then insert at the end of the string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"01234567\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"A\", 0, 8);\n\t\t\thelper.insertText(\"B\", 8, \"BBB\");\n\t\t\thelper.processAllOps();\n\n\t\t\thelper.logger.validate({ baseText: \"BBB\" });\n\t\t});\n\n\t\tit(\"insert, then obliterate at the end of the string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"01234567\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"B\", 8, \"BBB\");\n\t\t\thelper.obliterateRange(\"A\", 0, 8);\n\t\t\thelper.processAllOps();\n\n\t\t\thelper.logger.validate({ baseText: \"BBB\" });\n\t\t});\n\n\t\tit(\"length of children does not differ from parent when overlapping remove+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEFGH\n\t\t\t// I-[J]-(KLM-[ABC]-D-123456-E-[FG]-H)\n\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEFGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 0, 3);\n\t\t\thelper.insertText(\"C\", 1, \"123456\");\n\t\t\thelper.removeRange(\"A\", 5, 7);\n\t\t\thelper.insertText(\"A\", 0, \"IJKLM\");\n\t\t\thelper.obliterateRange(\"A\", 2, 11);\n\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"I\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes concurrent insert that occurs after obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.insertText(\"C\", 2, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes concurrent insert that occurs before obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"C\", 2, \"X\");\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete unacked segment at start of string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"XAB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"XAB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"XAB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"throws when local obliterate has range end outside length of local string\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\n\t\t\ttry {\n\t\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\t\tassert.fail(\"should not be possible to obliterate outside local range\");\n\t\t\t} catch (error) {\n\t\t\t\tassert(error instanceof LoggingError);\n\t\t\t\tassert.equal(error.message, \"RangeOutOfBounds\");\n\t\t\t}\n\t\t});\n\n\t\tit(\"does not delete when obliterate immediately after insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"W\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"W\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"W\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"W\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when between local insert+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"X\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when between local insert+obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"X\");\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"X\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"X\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not delete remote insert when in middle of segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"XB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"XB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"XB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes segment inserted into locally obliterated segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates lengths after obliterated insertion\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"N\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"B\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\tassert.equal(helper.clients.A.getLength(), 0);\n\t\t\tassert.equal(helper.clients.B.getLength(), 0);\n\t\t\tassert.equal(helper.clients.C.getLength(), 0);\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates lengths when insertion causes tree to split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"0\");\n\t\t\thelper.insertText(\"C\", 0, \"123\");\n\t\t\thelper.insertText(\"B\", 0, \"BB\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 5);\n\t\t\thelper.insertText(\"B\", 1, \"A\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText().length, helper.clients.A.getLength());\n\t\t\tassert.equal(helper.clients.B.getText().length, helper.clients.B.getLength());\n\t\t\tassert.equal(helper.clients.C.getText().length, helper.clients.C.getLength());\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GG30\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"length of node split by insertion does not count remotely obliterated segments\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"A\", 0, \"2\");\n\t\t\thelper.insertText(\"C\", 0, \"XXXX\");\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 6);\n\t\t\thelper.insertText(\"C\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GDGX21\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"GDGX21\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"length of node split by obliterate does not count remotely obliterated segments\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"A\", 0, \"2\");\n\t\t\thelper.insertText(\"C\", 0, \"XXXX\");\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"GGG\");\n\t\t\thelper.obliterateRange(\"C\", 2, 6);\n\t\t\thelper.insertText(\"C\", 1, \"C\");\n\t\t\thelper.insertText(\"B\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GCGX21\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"GCGX21\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"counts remotely but not concurrently inserted segments for length when tree is split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// a-b-c-d-e-123\n\t\t\t// (a-b)-c-d-e-1-[2]-3\n\n\t\t\thelper.insertText(\"B\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"e\");\n\t\t\thelper.insertText(\"C\", 0, \"d\");\n\t\t\thelper.insertText(\"C\", 0, \"c\");\n\t\t\thelper.insertText(\"C\", 0, \"b\");\n\t\t\thelper.insertText(\"C\", 0, \"a\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.removeRange(\"B\", 4, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"cde13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"cde13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does obliterate X for all clients\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"DE\");\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"X\");\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not include remote but unacked segments in partial len calculation\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 89-4567-123-X\n\t\t\t// 8-(9-4-w-567-1)-23-Y-X\n\n\t\t\thelper.insertText(\"A\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"4567\");\n\t\t\thelper.insertText(\"B\", 0, \"89\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 1, 7);\n\t\t\thelper.insertText(\"A\", 3, \"w\");\n\t\t\thelper.insertText(\"C\", 3, \"Y\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"823YX\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"823YX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"correctly accounts for overlapping obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"correctly accounts for overlapping obliterate and remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"clones movedClientIds array during insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// the bug found here:\n\t\t\t// the X was skipped over by client `A` because it had already been\n\t\t\t// deleted, so its length at refSeq was 0\n\t\t\t//\n\t\t\t// this was due to the movedClientIds array not being properly cloned\n\t\t\t// when marking obliterated during insert\n\n\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"B\", 2, \"X\");\n\t\t\thelper.obliterateRange(\"A\", 1, 3);\n\t\t\thelper.obliterateRange(\"B\", 1, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AD\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"AD\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"client partial lens consider overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"123\");\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"C\", 4, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AEF13\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"AEF13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AEF13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"client partial lens consider overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"C\", 0, \"X\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"AEGX\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"AEGX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"tracks obliterate refSeq when acking op for partial len calculation\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// v-----------------------v\n\t\t\t// v--v\n\t\t\t// v--v\n\t\t\t// 6-(345-AB-(CD)-E-(FG)-HI-1)-2\n\n\t\t\thelper.insertText(\"A\", 0, \"12\");\n\t\t\thelper.insertText(\"B\", 0, \"ABCDEFGHI\");\n\t\t\thelper.insertText(\"A\", 0, \"345\");\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.insertText(\"A\", 0, \"6\");\n\t\t\thelper.obliterateRange(\"B\", 3, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"62\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"62\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not have negative len when segment obliterated before insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 1234567-D-C-AB\n\t\t\t// 12-([3-X-45]-67)-D-C-AB\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 0, \"D\");\n\t\t\thelper.insertText(\"A\", 0, \"1234567\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 2, 7);\n\t\t\thelper.removeRange(\"A\", 2, 5);\n\t\t\thelper.insertText(\"C\", 3, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"12B\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"12B\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"12B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not have negative len when segment obliterated before insert\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDE-1-[2]-3\n\t\t\t// (A-XX-B)-(CD)-E-1-3\n\n\t\t\thelper.insertText(\"B\", 0, \"123\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDE\");\n\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"XX\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"E13\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"E13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"E13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes segments between two obliterates with different seq\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 90-8-1234-(5)-67-D-C-B-A\n\t\t\t// 9-(EFG-[0-8-1234-(5)-67)]-D-C-B-A\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"1234567\");\n\t\t\thelper.obliterateRange(\"B\", 4, 5);\n\t\t\thelper.insertText(\"A\", 0, \"8\");\n\t\t\thelper.insertText(\"A\", 0, \"90\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.removeRange(\"C\", 1, 9);\n\t\t\thelper.insertText(\"A\", 1, \"EFG\");\n\t\t\thelper.obliterateRange(\"A\", 1, 11);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"9DCBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 1, \"12\");\n\t\t\thelper.insertText(\"A\", 0, \"CD\");\n\t\t\thelper.obliterateRange(\"A\", 1, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"C2\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"C2\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"C2\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"deletes inserted segment when obliterate of different seq in-between\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"considers obliterated local segments as remotely obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// G-(H-F-I-C)-J-DE-A-(B)\n\t\t\t// G-J-(H-F-I-CD)-E\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"C\", 0, \"CDE\");\n\t\t\thelper.insertText(\"B\", 0, \"F\");\n\t\t\thelper.insertText(\"C\", 0, \"GH\");\n\t\t\thelper.obliterateRange(\"C\", 1, 3);\n\t\t\thelper.insertText(\"B\", 1, \"I\");\n\t\t\thelper.insertText(\"C\", 1, \"J\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GJDEA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"GJDEA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses hier block in obliterated when len at ref seq is >0 and len at len seq == 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 2, \"CD\");\n\t\t\thelper.removeRange(\"A\", 1, 3);\n\t\t\thelper.insertText(\"C\", 0, \"12345\");\n\t\t\thelper.insertText(\"B\", 0, \"EFG\");\n\t\t\thelper.insertText(\"B\", 1, \"HIJKL\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 6, 12);\n\t\t\thelper.removeRange(\"A\", 5, 7);\n\t\t\thelper.obliterateRange(\"C\", 7, 9);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), helper.clients.D.getText());\n\t\t\tassert.equal(helper.clients.B.getText(), \"EHIJKAD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses hier block in obliterate when len at ref seq is >0 and len at len seq == 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// [E]-FGH-12-[A]-[B]-CD\n\t\t\t// 3-4-F-[G-(H-1)-2]-CD\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.removeRange(\"B\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"12\");\n\t\t\thelper.insertText(\"A\", 0, \"EFGH\");\n\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 1, 5);\n\t\t\thelper.obliterateRange(\"B\", 2, 4);\n\t\t\thelper.insertText(\"A\", 0, \"3\");\n\t\t\thelper.insertText(\"A\", 0, \"4\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"43FBD\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"43FBD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"ignores segments where movedSeq < seq for partial len calculations\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"ABC\");\n\t\t\thelper.insertText(\"A\", 0, \"DEF\");\n\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"B\", 0, \"123456\");\n\t\t\thelper.obliterateRange(\"B\", 2, 7);\n\t\t\thelper.insertText(\"A\", 1, \"Y\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 4, \"X\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"12BCX\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"12BCX\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"12BCX\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"accounts for overlapping obliterates from same client\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"accounts for concurrently obliterated segments from the perspective of the inserting client for partial lengths\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 0, \"1234\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.obliterateRange(\"C\", 1, 3);\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.insertText(\"A\", 4, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"1E4CBA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"1E4CBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"traverses segments when there is a local obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"C\", 0, \"12\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 2, \"C\");\n\t\t\thelper.obliterateRange(\"A\", 0, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"keeps track of all obliterates on a segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// B-A\n\t\t\t// (B-C-(A))\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 1, 2);\n\t\t\t// bug here: because segment A has already been obliterated, we wouldn't\n\t\t\t// mark it obliterated by this op as well, meaning that segments in\n\t\t\t// this range would look to the right and not find a matching move seq\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"B\", 1, \"C\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"many overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// EF-ABCD\n\t\t\t// (1)-2-((E)-F-A)-B-(C)-D\n\n\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\thelper.insertText(\"B\", 0, \"EF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 3);\n\t\t\thelper.insertText(\"A\", 0, \"12\");\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.obliterateRange(\"B\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"2BD\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates at start\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// 12345-B-A\n\t\t\t// ((1-C-2)-3)-4-D-5-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"A\", 0, \"12345\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"C\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"D\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"partial lengths updated when local insert is acked\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// A-BCDEF\n\t\t\t// (A-B-G-C)-D-I-E-H-F\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 1, \"BCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 3);\n\t\t\thelper.insertText(\"A\", 2, \"G\");\n\t\t\thelper.insertText(\"B\", 5, \"H\");\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"DIEHF\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"DIEHF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"two local obliterates get different seq numbers after ack\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// C-AB\n\t\t\t// (C-A)-D-(B)\n\n\t\t\thelper.insertText(\"C\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\t// bug here: when the op is acked by client C, it would incorrectly give\n\t\t\t// segment B the same movedSeq despite coming from a different op\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"B\", 2, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"D\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"D\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"acks remote segment obliterated by local op\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// (D-C-A)-B\n\t\t\t// (D-C-A)-B-E\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\t// bug here: when the op is acked by client B, it wouldn't correctly\n\t\t\t// visit the segment \"C\", leaving the obliterate unacked\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 1, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BE\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"BE\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"skips segments obliterated before refSeq when traversing for insertion\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDE-(A)-B\n\t\t\t// C-(DE-F-(A)-B)\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"CDE\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 4);\n\t\t\t// bug here: when traversing to see if segment should be obliterated after\n\t\t\t// insertion, traversal would stop at segment A because it was obliterated\n\t\t\t// before the refSeq, which made it appear as an un-deleted segment\n\t\t\thelper.insertText(\"B\", 3, \"F\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"C\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"C\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"C\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"applies correct movedSeq when right segment has multiple movedSeqs\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-C-D-(B))\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\t// bug here: for client B, segment B had multiple movedSeqs, and when\n\t\t\t// traversal went to the right and found a matching movedSeq in the movedSeqs\n\t\t\t// array, it selected the lowest seq in the array, which differed from\n\t\t\t// the correct and matching movedSeq\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"takes the correct moved client id when multiple clientIds for right segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-C-D-(B))\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\t// bug here: we would incorrectly take the client id of the first element\n\t\t\t// in the movedClientIds array because we did not take into account the\n\t\t\t// length of _both_ the local and non-local movedSeqs arrays\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"A\", 2, \"D\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"selects clientId if 0\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// (A-D-E-(C)-B)\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\t// bug here: client id was 0, and the check we used was !clientId, rather\n\t\t\t// than clientId !== undefined\n\t\t\thelper.insertText(\"A\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.insertText(\"A\", 2, \"E\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterates unacked segment inside non-leaf-segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGHIJ-E-12345678-D-C-A-K-B\n\t\t\t// FGHIJ-E-12345-(6-[7-L-8-D]-C)-A-K-B\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"12345678\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"C\", 0, \"FGHIJ\");\n\t\t\thelper.insertText(\"A\", 2, \"K\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 12, 15);\n\t\t\t// bug here: when traversing for obliterate, we visit unacked segments\n\t\t\t// within the range, considering their length 0 but still marking them\n\t\t\t// obliterated. if the segment was inside a hiernode whose length was\n\t\t\t// also 0, we would incorrectly skip over the entire hier node, rather\n\t\t\t// than visiting the children segments\n\t\t\thelper.obliterateRange(\"A\", 11, 13);\n\t\t\thelper.insertText(\"B\", 13, \"L\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"FGHIJE12345AKB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"FGHIJE12345AKB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"FGHIJE12345AKB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"tracks length at seq of lower move/remove seq when overlapping\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// H-FG-A-CDE-B\n\t\t\t// (H-F-[G-A)-C-I-D]-E-B\n\n\t\t\thelper.insertText(\"C\", 0, \"AB\");\n\t\t\thelper.insertText(\"C\", 1, \"CDE\");\n\t\t\thelper.insertText(\"B\", 0, \"FG\");\n\t\t\thelper.insertText(\"A\", 0, \"H\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.removeRange(\"B\", 2, 6);\n\t\t\t// bug here: this insert triggers a new chunk to be created. when the\n\t\t\t// partial lengths of the new chunk were calculated, it incorrectly\n\t\t\t// used the removedSeq instead of the moveSeq, despite the latter having\n\t\t\t// occurred prior to the remove\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IEB\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"IEB\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"IEB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"segment obliterated on insert overlaps with local obliterate\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// AB\n\t\t\t// ((A-C)-B)\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"C\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterates entire string when concurrent inserts inside range\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// GT\n\t\t\t// (G-O-S-Y-T)\n\n\t\t\thelper.insertText(\"B\", 0, \"GT\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.insertText(\"C\", 1, \"OY\");\n\t\t\thelper.insertText(\"C\", 2, \"S\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterate ack traverses over non-obliterated remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEFGH-1\n\t\t\t// ABCDE-(F-[G]-2-H)-1\n\t\t\t// ABCDE-(F-[G]-2-H)-1-3\n\n\t\t\thelper.insertText(\"A\", 0, \"1\");\n\t\t\thelper.insertText(\"C\", 0, \"ABCDEFGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"C\", 6, 7);\n\t\t\thelper.insertText(\"A\", 7, \"2\");\n\t\t\t// obliterate at seq 5 isn't getting acked because it stops traversal\n\t\t\t// at the removed segment, which doesn't have move info\n\t\t\thelper.obliterateRange(\"C\", 5, 7);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 6, \"3\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"ABCDE13\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"ABCDE13\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate when remove happens last\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGH-E-D-BC-A\n\t\t\t// ([F]-G)-H-E-D-B-I-C-A\n\n\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\thelper.insertText(\"C\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"B\", 0, \"FGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 5, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.B.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"HEDBICA\");\n\t\t\tassert.equal(helper.clients.D.getText(), \"HEDBICA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate when remove happens last _and_ partial length already exists\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGH-CDE-B-A\n\t\t\t// [F-(GH)-C]-D-Z-E-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"B\", 0, \"CDE\");\n\t\t\thelper.insertText(\"C\", 0, \"FGH\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 1, 2);\n\t\t\thelper.removeRange(\"A\", 0, 4);\n\t\t\thelper.insertText(\"A\", 1, \"Z\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DZEBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterate and remove when obliterate is larger than remove and happened last\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// H-CDEFG-B-A\n\t\t\t// (H-C-[D]-E)-F-Z-G-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"B\");\n\t\t\thelper.insertText(\"A\", 0, \"CDEFG\");\n\t\t\thelper.insertText(\"A\", 0, \"H\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"A\", 2, 3);\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"Z\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"FZGBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"wasMovedOnInsert remains after leaf node is split\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CD-B-A\n\t\t\t// I-(C-(G)H-E)-F-D-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"B\", 0, \"CD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"EF\");\n\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\thelper.insertText(\"A\", 1, \"GH\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IFDBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates, segment is obliterated on insert and by local client\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// DEFG-BC-A\n\t\t\t// v-----------v\n\t\t\t// v-----v\n\t\t\t// (D-(E-H-F)-G)-B-I-C-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"C\", 0, \"BC\");\n\t\t\thelper.insertText(\"B\", 0, \"DEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.insertText(\"A\", 2, \"H\");\n\t\t\thelper.obliterateRange(\"A\", 0, 5);\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BICA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates and remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// FGHIJKL-BCDE-A\n\t\t\t// (FGHI-[JK-(L-B)-C]-D)-E-M-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BCDE\");\n\t\t\thelper.insertText(\"A\", 0, \"FGHIJKL\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"B\", 4, 9);\n\t\t\thelper.obliterateRange(\"A\", 6, 8);\n\t\t\thelper.obliterateRange(\"C\", 0, 10);\n\t\t\thelper.insertText(\"C\", 1, \"M\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"EMA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"does not mark obliterated on insert for non-acked obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDE-B-A\n\t\t\t// I-((C-F)-G-D)-H-E-B-A\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"CDE\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 1, \"FG\");\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"A\", 2, \"H\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"C\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IHEBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"partial len isLocal when seq is -1 but moveSeq > -1\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEFG-AB\n\t\t\t// C-((D-I-E)-F)-G-A-H-B\n\n\t\t\thelper.insertText(\"A\", 0, \"AB\");\n\t\t\thelper.insertText(\"B\", 0, \"CDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"C\", 1, 4);\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.insertText(\"B\", 4, \"H\");\n\t\t\thelper.insertText(\"A\", 2, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"CGAHB\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterated on insert by overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// B-DEFG-C-A\n\t\t\t// ((B-D-H-E)-F-I-G-C)-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"A\", 0, \"BC\");\n\t\t\thelper.insertText(\"A\", 1, \"DEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 6);\n\t\t\thelper.obliterateRange(\"A\", 0, 3);\n\t\t\thelper.insertText(\"C\", 2, \"H\");\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"A\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCDEF\n\t\t\t// v-------------v\n\t\t\t// v-----------v\n\t\t\t// v-------v\n\t\t\t// I-((AB-(C-G)-H-D)-E)-F\n\n\t\t\thelper.insertText(\"A\", 0, \"ABCDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 4);\n\t\t\thelper.obliterateRange(\"C\", 2, 5);\n\t\t\thelper.insertText(\"A\", 3, \"GH\");\n\t\t\thelper.insertText(\"C\", 0, \"I\");\n\t\t\thelper.obliterateRange(\"A\", 0, 4);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"IF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping obliterates\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEF-AB\n\t\t\t// v-------------------v\n\t\t\t// v---------v\n\t\t\t// v-v\n\t\t\t// ((C-(G)-H-D)-E-I-F-A)-B\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"C\", 0, \"CDEF\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 5);\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.insertText(\"A\", 1, \"GH\");\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"B\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"overlapping remove and obliterate, local obliterate does not have a remote obliterated len\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// v-v------v-v\n\t\t\t// G-(H-[F]-E)-D-[A]-B-I-C\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\thelper.insertText(\"B\", 0, \"E\");\n\t\t\thelper.insertText(\"A\", 0, \"F\");\n\t\t\thelper.removeRange(\"A\", 0, 2);\n\t\t\thelper.insertText(\"B\", 0, \"GH\");\n\t\t\thelper.insertText(\"A\", 1, \"I\");\n\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"GDBIC\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"triple overlapping obliterate and overlapping remove\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// I-H-BCDEFG-A\n\t\t\t// v------------v\n\t\t\t// v-------v\n\t\t\t// v-v\n\t\t\t// v-------------------------v\n\t\t\t// [[I]-H-BCD-(E-(F-(J)-G))-A]\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"BCDEFG\");\n\t\t\thelper.insertText(\"B\", 0, \"H\");\n\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 6, 8);\n\t\t\thelper.obliterateRange(\"A\", 5, 8);\n\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\thelper.insertText(\"C\", 6, \"J\");\n\t\t\thelper.obliterateRange(\"C\", 6, 7);\n\t\t\thelper.removeRange(\"A\", 0, 6);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"triple overlapping obliterate with one being local\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// CDEFG-B-A\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// v------v\n\t\t\t// J-(CD-((E-H)-F))-I-G-B-A\n\n\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"CDEFG\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 2, 4);\n\t\t\thelper.insertText(\"C\", 3, \"H\");\n\t\t\thelper.obliterateRange(\"C\", 0, 4);\n\t\t\thelper.insertText(\"C\", 1, \"I\");\n\t\t\thelper.insertText(\"B\", 0, \"J\");\n\t\t\thelper.obliterateRange(\"B\", 3, 5);\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.C.getText(), \"JIGBA\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"obliterate ack traversal is not stopped by moved segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// ABCD\n\t\t\t// (A-(B)-E-C)-D-F\n\n\t\t\thelper.insertText(\"B\", 0, \"ABCD\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"A\", 1, 2);\n\t\t\thelper.insertText(\"C\", 2, \"E\");\n\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 1, \"F\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"DF\");\n\t\t\tassert.equal(helper.clients.C.getText(), \"DF\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"updates partial lengths for segments when doing obliterate ack traversal\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// O-JKLMN-FGHI-E-CD-AB\n\t\t\t// v-v---v-----v\n\t\t\t// (P-O-JKLMN-FG-[H]-Q-[I-E-C]-D-A)-B\n\t\t\t// (P-O-JKLMN-FG-[H]-Q-[I-E-C]-D-A)-B-R\n\n\t\t\t// problematic segment: H-Q-I-E\n\n\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\thelper.insertText(\"A\", 0, \"CD\");\n\t\t\thelper.insertText(\"A\", 0, \"E\");\n\t\t\thelper.insertText(\"A\", 0, \"FGHI\");\n\t\t\thelper.insertText(\"C\", 0, \"JKLMN\");\n\t\t\thelper.insertText(\"B\", 0, \"O\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"A\", 0, \"P\");\n\t\t\thelper.insertText(\"B\", 9, \"Q\");\n\t\t\thelper.removeRange(\"A\", 9, 13);\n\t\t\thelper.obliterateRange(\"A\", 0, 11);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"B\", 1, \"R\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"BR\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"combines remote obliterated length \", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// R-XYZ12-STUVW-LMNOP-DEFGHIJK-A-34567890-Q-BC\n\t\t\t// v---------------v------------v------v--------v------------v\n\t\t\t// [R-XYZ12-STUVW-L]-abcdefghij-[MNOP-D]-klmnop-[EFGHIJK-A-34]-5-(6-x-7)-890-Q-BC\n\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// a-T-b-S-c-[def]-ghij-k-Q-l-R-mno-[p-5-8-[9]-0-Q-B]-C\n\n\t\t\t// v--------v\n\t\t\t// v--------v\n\t\t\t// segment is R-mno-[p-5-8-[9]-0-Q-B]-C\n\t\t\t// v-------------------------------v\n\t\t\t// v--------v\n\t\t\t// v------------v\n\t\t\t// R-mno-[p-[EFGHIJK-A-34]-5-(6-x-7)-8-[9]-0-Q-B]-C\n\n\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\thelper.insertText(\"C\", 0, \"DEFGHIJK\");\n\t\t\thelper.insertText(\"C\", 0, \"LMNOP\");\n\t\t\thelper.insertText(\"A\", 1, \"Q\");\n\t\t\thelper.insertText(\"B\", 0, \"RSTUVW\");\n\t\t\thelper.insertText(\"B\", 1, \"XYZ12\");\n\t\t\thelper.insertText(\"A\", 1, \"34567890\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.insertText(\"C\", 29, \"x\");\n\t\t\thelper.removeRange(\"B\", 0, 27);\n\t\t\thelper.insertText(\"A\", 12, \"abcdefghij\");\n\t\t\thelper.obliterateRange(\"A\", 38, 40);\n\t\t\thelper.insertText(\"C\", 17, \"klmnop\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"abcdefghijklmnop5890QBC\");\n\n\t\t\thelper.logger.validate();\n\t\t\thelper.removeRange(\"B\", 3, 6);\n\t\t\thelper.insertText(\"C\", 11, \"Q\");\n\t\t\thelper.insertText(\"B\", 9, \"R\");\n\t\t\thelper.insertText(\"B\", 2, \"S\");\n\t\t\thelper.removeRange(\"C\", 19, 23);\n\t\t\thelper.obliterateRange(\"B\", 14, 18);\n\t\t\thelper.insertText(\"B\", 1, \"T\");\n\t\t\thelper.processAllOps();\n\n\t\t\tassert.equal(helper.clients.A.getText(), \"aTbScghijkQlRmnoC\");\n\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tit(\"three obliterates on same segment\", () => {\n\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t// A\n\t\t\t// (C-B-D-((A)))\n\n\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t\thelper.obliterateRange(\"B\", 0, 1);\n\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\thelper.processAllOps();\n\t\t\thelper.logger.validate();\n\t\t});\n\n\t\tdescribe(\"incremental partial length updates\", () => {\n\t\t\tit(\"obliterates concurrently inserted segment\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// (C-B-A)\n\n\t\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\t\thelper.obliterateRange(\"A\", 0, 2);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 2 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// (C-B-D-A)\n\n\t\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\t\thelper.insertText(\"A\", 0, \"B\");\n\t\t\t\thelper.insertText(\"B\", 0, \"C\");\n\t\t\t\thelper.obliterateRange(\"B\", 0, 2);\n\t\t\t\thelper.insertText(\"A\", 1, \"D\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 4 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// I-F-(G-D-H-E-C-A)-B\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"B\", 0, \"C\");\n\t\t\t\thelper.insertText(\"A\", 0, \"DE\");\n\t\t\t\thelper.insertText(\"B\", 0, \"FG\");\n\t\t\t\thelper.obliterateRange(\"B\", 1, 4);\n\t\t\t\thelper.insertText(\"A\", 1, \"H\");\n\t\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IFB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"obliterates 3 concurrently inserted segments\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// I-G-(H-D-F-E-B)-C-A\n\n\t\t\t\thelper.insertText(\"B\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\t\thelper.insertText(\"A\", 0, \"DE\");\n\t\t\t\thelper.insertText(\"A\", 1, \"F\");\n\t\t\t\thelper.insertText(\"B\", 0, \"GH\");\n\t\t\t\thelper.obliterateRange(\"B\", 1, 3);\n\t\t\t\thelper.insertText(\"B\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IGCA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"overlapping remove + obliterate, remove happened first\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// D-EFG-B-H-C-A\n\t\t\t\t// I-D-([E]-F)-G-B-H-C-A\n\n\t\t\t\thelper.insertText(\"A\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"BC\");\n\t\t\t\thelper.insertText(\"C\", 0, \"DEFG\");\n\t\t\t\thelper.insertText(\"B\", 1, \"H\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"B\", 1, 2);\n\t\t\t\thelper.obliterateRange(\"A\", 1, 3);\n\t\t\t\thelper.insertText(\"A\", 0, \"I\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"IDGBHCA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"overlapping remove + obliterate, remove happened last\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// DEFGH-C-B-A\n\t\t\t\t// [D]-[E-(F)-G]-H-C-B-A\n\n\t\t\t\thelper.insertText(\"C\", 0, \"A\");\n\t\t\t\thelper.insertText(\"B\", 0, \"B\");\n\t\t\t\thelper.insertText(\"A\", 0, \"C\");\n\t\t\t\thelper.insertText(\"B\", 0, \"DEFGH\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"C\", 2, 3);\n\t\t\t\thelper.removeRange(\"A\", 1, 4);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"HCBA\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"segment inside locally obliterated segment group is split\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// CDEF-AB\n\t\t\t\t// [C]-DE-(F-(G)-H-A)-B\n\t\t\t\t// [C]-DE-(F-(G)-H-A)-(B)\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"B\", 0, \"CDEF\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 3, \"GH\");\n\t\t\t\thelper.obliterateRange(\"C\", 3, 4);\n\t\t\t\thelper.obliterateRange(\"A\", 3, 5);\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"B\", 2, 3);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"DE\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"continues traversal past locally removed segment inserted before first obliterate\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// ABC\n\t\t\t\t// (E-D-(A)-[B]-C)\n\n\t\t\t\thelper.insertText(\"A\", 0, \"ABC\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.obliterateRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"B\", 0, \"D\");\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 0, \"E\");\n\t\t\t\thelper.obliterateRange(\"C\", 0, 2);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"keeps track of remote obliterated length when hier node contains hier nodes\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// LMNO-HIJ-E-K-FG-D-C-AB\n\t\t\t\t// lmnopq-L-[M]-NO-H-ghijk-I-(J-E-K-FG-D-C-A-a)-bc-ef-d-B\n\t\t\t\t// v--------------------------------------v\n\t\t\t\t// v-------------------v\n\t\t\t\t// r-l-x-mn-[opq-L-[M]-NO-H-gh-s]-t-(u-i-[j]-k-I-(J-E-K-FG-D-C-A-a)-b-v-c-e)-f-d-B\n\n\t\t\t\t// bad segment: (I-(J-E-K-FG-D-C-A-a)-b-v-c-e)-f-d-B\n\n\t\t\t\thelper.insertText(\"B\", 0, \"AB\");\n\t\t\t\thelper.insertText(\"C\", 0, \"C\");\n\t\t\t\thelper.insertText(\"A\", 0, \"D\");\n\t\t\t\thelper.insertText(\"B\", 0, \"EFG\");\n\t\t\t\thelper.insertText(\"C\", 0, \"HIJ\");\n\t\t\t\thelper.insertText(\"B\", 1, \"K\");\n\t\t\t\thelper.insertText(\"B\", 0, \"LMNO\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\t\thelper.insertText(\"A\", 13, \"abcd\");\n\t\t\t\thelper.obliterateRange(\"A\", 5, 14);\n\t\t\t\thelper.insertText(\"A\", 7, \"ef\"); // seq: 11, len: 7\n\t\t\t\thelper.insertText(\"B\", 5, \"ghijk\");\n\t\t\t\thelper.insertText(\"C\", 0, \"lmnopq\"); // seq: 13, len: 7\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"lmnopqLNOHghijkIbcefdB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.insertText(\"A\", 0, \"r\");\n\t\t\t\thelper.insertText(\"B\", 12, \"stu\");\n\t\t\t\thelper.insertText(\"A\", 18, \"v\"); // seq: 16, len: 8\n\t\t\t\thelper.obliterateRange(\"B\", 14, 22); // seq: 17, len: 3\n\t\t\t\thelper.removeRange(\"B\", 3, 13); // seq: 18, len: 3\n\t\t\t\thelper.removeRange(\"A\", 14, 15); // seq: 19, len: 3\n\t\t\t\thelper.insertText(\"B\", 1, \"x\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"rlxmntfdB\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"combines remote obliterated length for parent node of tree with depth >=3\", () => {\n\t\t\t\tconst helper = new ReconnectTestHelper();\n\n\t\t\t\t// VWXYZ0-(K)-[L]-M-[N]-O-EFGHIJ-[A]-B-P-TU-QRS-CD\n\t\t\t\t// v-v------v------------v\n\t\t\t\t// v--------------------v\n\t\t\t\t// v----v---------v-v-----v-----v------------------------------v-v\n\t\t\t\t// V-c-W-[XYZ0]-(K)-[L]-[M]-[N]-[O-EFG]-[H]-a-[b-[IJ-[A]-B-P-T]-U-Q]-[R]-S-C-d-f-e-D\n\n\t\t\t\t// v-v------v-v---v-----------v\n\t\t\t\t// v-------------------------v\n\t\t\t\t// v------v---------v-v-----v---v---v--v-----------------------------------v-v\n\t\t\t\t// v---------v\n\t\t\t\t// j-i-(V-c-W-[XY)-Z0]-(K)-[L]-[M]-[N]-[O-E]-h-[FG]-[H]-a-[b-[I]-g-[J-[A]-B-P-T]-U-Q]-[R]-S-C-d-f-e-D\n\n\t\t\t\t// problem segment: j-i-(V-c-W-[XY)-Z0]-(K)-[L]-[M]-[N]-[O-E]-h-[FG]-[H]-a-[b]\n\t\t\t\t// specifically: j-(V-c-W\n\n\t\t\t\thelper.insertText(\"C\", 0, \"ABCD\");\n\t\t\t\thelper.removeRange(\"C\", 0, 1);\n\t\t\t\thelper.insertText(\"B\", 0, \"EFGHIJ\");\n\t\t\t\thelper.insertText(\"A\", 0, \"KLMNO\");\n\t\t\t\thelper.obliterateRange(\"A\", 0, 1);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.insertText(\"C\", 1, \"PQRS\");\n\t\t\t\thelper.insertText(\"C\", 2, \"TU\");\n\t\t\t\thelper.removeRange(\"A\", 1, 2);\n\t\t\t\thelper.insertText(\"A\", 0, \"VWXYZ0\"); // seq: 10, len: 2\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"VWXYZ0MOEFGHIJBPTUQRSCD\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t\thelper.insertText(\"C\", 12, \"ab\");\n\t\t\t\thelper.removeRange(\"B\", 11, 17);\n\t\t\t\thelper.removeRange(\"C\", 13, 21);\n\t\t\t\thelper.insertText(\"B\", 1, \"c\"); // seq: 14, len: 3\n\t\t\t\thelper.insertText(\"C\", 16, \"de\");\n\t\t\t\thelper.insertText(\"C\", 17, \"f\");\n\t\t\t\thelper.removeRange(\"B\", 3, 15);\n\t\t\t\thelper.insertText(\"A\", 13, \"g\");\n\t\t\t\thelper.insertText(\"A\", 9, \"h\");\n\t\t\t\thelper.obliterateRange(\"C\", 0, 4); // seq: 20, len: 0\n\t\t\t\thelper.insertText(\"C\", 0, \"i\");\n\t\t\t\thelper.insertText(\"A\", 0, \"j\"); // seq: 22, len: 1\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\tassert.equal(helper.clients.A.getText(), \"jihagSCdfeD\");\n\n\t\t\t\thelper.logger.validate();\n\t\t\t});\n\n\t\t\tit(\"Fuzz regression for negative partial lengths\", () => {\n\t\t\t\t// This is a regression test for AB#15630.\n\t\t\t\t// Strict partial lengths checks reported an inconsistency when B applies A's\n\t\t\t\t// obliterateRange op for the length of the string at refSeq 4.\n\t\t\t\t// With strict partial lengths disabled, this manifested in 0x4bc on the subsequent op application.\n\t\t\t\tconst helper = new PartialSyncTestHelper();\n\n\t\t\t\thelper.insertText(\"D\", 0, \"ABCDEFGH\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.insertText(\"B\", 0, \"123456xxxxx7890\");\n\t\t\t\thelper.advanceClients(\"C\");\n\t\t\t\thelper.obliterateRange(\"B\", 15, 20);\n\t\t\t\thelper.advanceClients(\"A\", \"B\");\n\t\t\t\thelper.insertText(\"A\", 4, \"a\");\n\t\t\t\thelper.advanceClients(\"A\");\n\t\t\t\thelper.insertText(\"C\", 0, \"c\");\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"C\",\n\t\t\t\t\t{ pos: 4, side: Side.After },\n\t\t\t\t\t{ pos: 10, side: Side.After },\n\t\t\t\t);\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"A\",\n\t\t\t\t\t{ pos: 0, side: Side.Before },\n\t\t\t\t\t{ pos: 7, side: Side.After },\n\t\t\t\t);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\thelper.logger.validate({ baseText: \"cx7890FGH\" });\n\t\t\t});\n\n\t\t\tit(\"Avoids adding entries for insert with subsequent removal\", () => {\n\t\t\t\tconst helper = new PartialSyncTestHelper();\n\t\t\t\thelper.insertText(\"D\", 0, \"bZL4aQd\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.insertText(\"A\", 0, \"8mvaLcEa4nwhELu\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\t// These 3 ops are the crux of the test: A's inserted segment is both obliterated by C as soon as it is inserted\n\t\t\t\t// as well as removed by A before the insertion is acked.\n\t\t\t\t// This is an interesting case for partial lengths of observing clients, as:\n\t\t\t\t// - obliteration by C on insertion means the segment would normally only be visible to the inserting client\n\t\t\t\t// - ... but after some client receives the notice of A's removal, it shouldn't be visible there either!\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"C\",\n\t\t\t\t\t{ pos: 2, side: Side.After },\n\t\t\t\t\t{ pos: 21, side: Side.After },\n\t\t\t\t);\n\t\t\t\thelper.insertText(\"A\", 3, \"Y\");\n\t\t\t\thelper.removeRange(\"A\", 2, 4);\n\n\t\t\t\t// The subsequent operations forced failure at the time the code was defective, since clients with incorrect\n\t\t\t\t// partial lengths adjustments for A would misinterpret where these ops should go.\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"A\",\n\t\t\t\t\t{ pos: 2, side: Side.After },\n\t\t\t\t\t{ pos: 6, side: Side.After },\n\t\t\t\t);\n\t\t\t\thelper.obliterateRange(\"A\", 2, 3);\n\t\t\t\thelper.insertText(\"A\", 3, \"X\");\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\thelper.logger.validate({ baseText: \"8m\" });\n\t\t\t});\n\n\t\t\t// See 'Local obliterate wins post-insertion of segment previously thought to have won' (below) for a simpler\n\t\t\t// to understand version of this test. This test is the original partial synchronization fuzz variant which\n\t\t\t// demonstrated that issue, and has been preserved for now in case it catches additional related problems.\n\t\t\t// Once fuzz testing more meaninfully leverages ops being sent to different clients at different types (partial\n\t\t\t// synchronization), it's probably fine to remove this.\n\t\t\tit(\"fuzz regression: Local obliterate wins post-insertion of segment previously thought to have won\", () => {\n\t\t\t\tconst helper = new PartialSyncTestHelper();\n\n\t\t\t\thelper.insertText(\"A\", 0, \"Hx15J\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\thelper.insertText(\"A\", 0, \"9T\");\n\t\t\t\thelper.insertText(\"B\", 0, \"c8v\");\n\t\t\t\thelper.advanceClients(\"A\", \"C\");\n\t\t\t\thelper.removeRange(\"A\", 2, 5);\n\t\t\t\thelper.removeRange(\"A\", 0, 1);\n\t\t\t\thelper.obliterateRange(\"A\", 0, 3);\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"C\",\n\t\t\t\t\t{ pos: 1, side: Side.After },\n\t\t\t\t\t{ pos: 4, side: Side.Before },\n\t\t\t\t);\n\t\t\t\thelper.insertText(\"B\", 0, \"4qpo\");\n\t\t\t\thelper.insertText(\"C\", 2, \"fP\");\n\t\t\t\thelper.insertText(\"A\", 0, \"hn\");\n\t\t\t\thelper.advanceClients(\"A\", \"C\");\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"A\",\n\t\t\t\t\t{ pos: 5, side: Side.After },\n\t\t\t\t\t{ pos: 9, side: Side.After },\n\t\t\t\t);\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"B\",\n\t\t\t\t\t{ pos: 3, side: Side.Before },\n\t\t\t\t\t{ pos: 9, side: Side.After },\n\t\t\t\t);\n\t\t\t\t// At the time of the original bug, this would hit 0xa3f.\n\t\t\t\thelper.processAllOps();\n\n\t\t\t\thelper.logger.validate({ baseText: \"hn4qpJ\" });\n\t\t\t});\n\n\t\t\t// Simpler version of the above test which has the same root cause but reproduces a slightly different failure mode.\n\t\t\tit(\"Local obliterate wins post-insertion of segment previously thought to have won\", () => {\n\t\t\t\tconst helper = new PartialSyncTestHelper();\n\t\t\t\thelper.insertText(\"A\", 0, \"1xx2\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\t// A and B both obliterate the 'xx' segment with an expanding obliterate, then try to insert\n\t\t\t\t// into the gap that it leaves.\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"A\",\n\t\t\t\t\t{ pos: 0, side: Side.After },\n\t\t\t\t\t{ pos: 3, side: Side.Before },\n\t\t\t\t);\n\t\t\t\thelper.insertText(\"A\", 1, \"aaaa\");\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"B\",\n\t\t\t\t\t{ pos: 0, side: Side.After },\n\t\t\t\t\t{ pos: 3, side: Side.Before },\n\t\t\t\t);\n\t\t\t\thelper.insertText(\"B\", 1, \"bbb\");\n\t\t\t\thelper.advanceClients(\"A\", \"B\");\n\t\t\t\t// Meanwhile, C attempts the same thing without seeing A or B's obliterate & insertions\n\t\t\t\thelper.obliterateRange(\n\t\t\t\t\t\"C\",\n\t\t\t\t\t{ pos: 0, side: Side.After },\n\t\t\t\t\t{ pos: 3, side: Side.Before },\n\t\t\t\t);\n\t\t\t\thelper.insertText(\"C\", 1, \"ccc\");\n\t\t\t\t// Before seeing C's ops, B attempts to insert more content. Since B hasn't yet seen C's obliterate,\n\t\t\t\t// A and B are under the impression that B's obliterate has won and the string contents are '1bbb2'.\n\t\t\t\thelper.insertText(\"B\", 5, \"B\");\n\t\t\t\thelper.insertText(\"A\", 5, \"A\");\n\t\t\t\thelper.processAllOps();\n\t\t\t\t// By now, all clients realize C actually won the obliterate and should have additionally applied B's\n\t\t\t\t// op correctly as it was outside of the obliterated range.\n\t\t\t\t// At the time this test was written, client C had trouble recognizing that A and B think that B has won\n\t\t\t\t// and merged incorrectly, hitting 'MergeTree insert failed'.\n\t\t\t\thelper.logger.validate({ baseText: \"1ccc2AB\" });\n\t\t\t});\n\t\t});\n\t});\n}\n"]}