@fluidframework/id-compressor 2.0.0-rc.4.0.0 → 2.0.0-rc.4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/api-report/id-compressor.api.md +1 -0
  2. package/dist/idCompressor.d.ts +2 -0
  3. package/dist/idCompressor.d.ts.map +1 -1
  4. package/dist/idCompressor.js +42 -5
  5. package/dist/idCompressor.js.map +1 -1
  6. package/dist/packageVersion.d.ts +1 -1
  7. package/dist/packageVersion.js +1 -1
  8. package/dist/packageVersion.js.map +1 -1
  9. package/dist/test/idCompressor.spec.js.map +1 -1
  10. package/dist/test/idCompressorTestUtilities.d.ts.map +1 -1
  11. package/dist/test/idCompressorTestUtilities.js +81 -18
  12. package/dist/test/idCompressorTestUtilities.js.map +1 -1
  13. package/dist/types/idCompressor.d.ts +11 -1
  14. package/dist/types/idCompressor.d.ts.map +1 -1
  15. package/dist/types/idCompressor.js.map +1 -1
  16. package/lib/idCompressor.d.ts +2 -0
  17. package/lib/idCompressor.d.ts.map +1 -1
  18. package/lib/idCompressor.js +43 -6
  19. package/lib/idCompressor.js.map +1 -1
  20. package/lib/packageVersion.d.ts +1 -1
  21. package/lib/packageVersion.js +1 -1
  22. package/lib/packageVersion.js.map +1 -1
  23. package/lib/test/idCompressor.spec.js.map +1 -1
  24. package/lib/test/idCompressorTestUtilities.d.ts.map +1 -1
  25. package/lib/test/idCompressorTestUtilities.js +81 -18
  26. package/lib/test/idCompressorTestUtilities.js.map +1 -1
  27. package/lib/types/idCompressor.d.ts +11 -1
  28. package/lib/types/idCompressor.d.ts.map +1 -1
  29. package/lib/types/idCompressor.js.map +1 -1
  30. package/package.json +7 -7
  31. package/src/idCompressor.ts +57 -7
  32. package/src/packageVersion.ts +1 -1
  33. package/src/test/idCompressorTestUtilities.ts +94 -19
  34. package/src/types/idCompressor.ts +12 -1
@@ -1 +1 @@
1
- {"version":3,"file":"idCompressor.spec.js","sourceRoot":"","sources":["../../src/test/idCompressor.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\n\nimport { bufferToString, stringToBuffer } from \"@fluid-internal/client-utils\";\nimport { take } from \"@fluid-private/stochastic-test-utils\";\nimport { MockLogger } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { IdCompressor, createIdCompressor, deserializeIdCompressor } from \"../idCompressor.js\";\nimport {\n\tOpSpaceCompressedId,\n\tSerializedIdCompressorWithNoSession,\n\tSessionId,\n\tSessionSpaceCompressedId,\n\tStableId,\n} from \"../index.js\";\nimport { createSessionId } from \"../utilities.js\";\n\nimport {\n\tClient,\n\tCompressorFactory,\n\tDestinationClient,\n\tIdCompressorTestNetwork,\n\tMetaClient,\n\texpectSerializes,\n\tmakeOpGenerator,\n\tperformFuzzActions,\n\troundtrip,\n\tsessionIds,\n} from \"./idCompressorTestUtilities.js\";\nimport { LocalCompressedId, fail, incrementStableId, isFinalId, isLocalId } from \"./testCommon.js\";\n\ndescribe(\"IdCompressor\", () => {\n\tit(\"reports the proper session ID\", () => {\n\t\tconst sessionId = createSessionId();\n\t\tconst compressor = CompressorFactory.createCompressorWithSession(sessionId);\n\t\tassert(compressor.localSessionId, sessionId);\n\t});\n\n\tdescribe(\"ID Generation\", () => {\n\t\tit(\"can manually create a compressed ID\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tconst uuid = compressor.decompress(id);\n\t\t\tassert.equal(id, compressor.recompress(uuid));\n\t\t});\n\n\t\tit(\"can generate document unique IDs\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 2);\n\t\t\tlet id = compressor.generateDocumentUniqueId();\n\t\t\tassert(typeof id === \"string\");\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tid = compressor.generateDocumentUniqueId();\n\t\t\tassert(typeof id === \"number\" && isFinalId(id));\n\t\t\tid = compressor.generateDocumentUniqueId();\n\t\t\tassert(typeof id === \"number\" && isFinalId(id));\n\t\t\tid = compressor.generateDocumentUniqueId();\n\t\t\tassert(typeof id === \"string\");\n\t\t});\n\n\t\tdescribe(\"Eager final ID allocation\", () => {\n\t\t\tit(\"eagerly allocates final IDs when cluster creation has been finalized\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 3);\n\t\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(localId1));\n\t\t\t\tconst localId2 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(localId2));\n\t\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\t\tconst finalId3 = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(finalId3));\n\t\t\t\tconst finalId4 = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(finalId4));\n\t\t\t\tconst finalId5 = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(finalId5));\n\t\t\t\tconst localId6 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(localId6));\n\n\t\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\n\t\t\t\tconst opSpaceId1 = compressor.normalizeToOpSpace(localId1);\n\t\t\t\tconst opSpaceId2 = compressor.normalizeToOpSpace(localId2);\n\t\t\t\tconst opSpaceId3 = compressor.normalizeToOpSpace(finalId3);\n\t\t\t\tconst opSpaceId4 = compressor.normalizeToOpSpace(finalId4);\n\t\t\t\tconst opSpaceId5 = compressor.normalizeToOpSpace(finalId5);\n\t\t\t\tconst opSpaceId6 = compressor.normalizeToOpSpace(localId6);\n\n\t\t\t\tassert(isFinalId(opSpaceId1));\n\t\t\t\tassert(isFinalId(opSpaceId2));\n\t\t\t\tassert(isFinalId(opSpaceId3) && opSpaceId3 === finalId3);\n\t\t\t\tassert(isFinalId(opSpaceId4) && opSpaceId4 === finalId4);\n\t\t\t\tassert(isFinalId(opSpaceId5) && opSpaceId5 === finalId5);\n\t\t\t\tassert(isFinalId(opSpaceId6));\n\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId1, compressor.localSessionId),\n\t\t\t\t\tlocalId1,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId2, compressor.localSessionId),\n\t\t\t\t\tlocalId2,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId3, compressor.localSessionId),\n\t\t\t\t\tfinalId3,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId4, compressor.localSessionId),\n\t\t\t\t\tfinalId4,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId5, compressor.localSessionId),\n\t\t\t\t\tfinalId5,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId6, compressor.localSessionId),\n\t\t\t\t\tlocalId6,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"correctly normalizes eagerly allocated final IDs\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5);\n\t\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\t\tconst range1 = compressor.takeNextCreationRange();\n\t\t\t\tconst localId2 = compressor.generateCompressedId();\n\t\t\t\tconst range2 = compressor.takeNextCreationRange();\n\t\t\t\tassert(isLocalId(localId1));\n\t\t\t\tassert(isLocalId(localId2));\n\n\t\t\t\tcompressor.finalizeCreationRange(range1);\n\t\t\t\tcompressor.finalizeCreationRange(range2);\n\n\t\t\t\tconst opSpaceId1 = compressor.normalizeToOpSpace(localId1);\n\t\t\t\tconst opSpaceId2 = compressor.normalizeToOpSpace(localId2);\n\n\t\t\t\tassert(isFinalId(opSpaceId1));\n\t\t\t\tassert(isFinalId(opSpaceId2));\n\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId1, compressor.localSessionId),\n\t\t\t\t\tlocalId1,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId2, compressor.localSessionId),\n\t\t\t\t\tlocalId2,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"generates correct eager finals when there are outstanding locals after cluster expansion\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 2);\n\n\t\t\t\t// Before cluster expansion\n\t\t\t\tassert(isLocalId(compressor.generateCompressedId()));\n\t\t\t\tconst rangeA = compressor.takeNextCreationRange();\n\t\t\t\tcompressor.finalizeCreationRange(rangeA);\n\t\t\t\tassert(isFinalId(compressor.generateCompressedId()));\n\t\t\t\tassert(isFinalId(compressor.generateCompressedId()));\n\n\t\t\t\t// After cluster expansion\n\t\t\t\tassert(isLocalId(compressor.generateCompressedId()));\n\t\t\t\tconst rangeB = compressor.takeNextCreationRange();\n\t\t\t\tconst localId = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(localId));\n\n\t\t\t\t// Take a range that won't be finalized in this test; the finalizing of range B should associate this range with finals\n\t\t\t\tconst rangeC = compressor.takeNextCreationRange();\n\n\t\t\t\tcompressor.finalizeCreationRange(rangeB);\n\t\t\t\tconst eagerId = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(eagerId));\n\n\t\t\t\tassert.equal(compressor.recompress(compressor.decompress(localId)), localId);\n\t\t\t\tassert.equal(compressor.recompress(compressor.decompress(eagerId)), eagerId);\n\n\t\t\t\tcompressor.finalizeCreationRange(rangeC);\n\n\t\t\t\tassert.equal(compressor.recompress(compressor.decompress(localId)), localId);\n\t\t\t\tassert.equal(compressor.recompress(compressor.decompress(eagerId)), eagerId);\n\t\t\t});\n\n\t\t\tit(\"generates unique eager finals when multiple outstanding creation ranges during finalizing\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(\n\t\t\t\t\tClient.Client1,\n\t\t\t\t\t10 /* must be 10 for the test to make sense */,\n\t\t\t\t);\n\n\t\t\t\t// Make a first outstanding range\n\t\t\t\tconst id1_1 = compressor.generateCompressedId();\n\t\t\t\tconst id1_2 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(id1_1));\n\t\t\t\tassert(isLocalId(id1_2));\n\t\t\t\tconst range1 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Make a second outstanding range\n\t\t\t\tconst id2_1 = compressor.generateCompressedId();\n\t\t\t\tconst id2_2 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(id2_1));\n\t\t\t\tassert(isLocalId(id2_2));\n\t\t\t\tconst range2 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Finalize just the first one, which should create finals that align with both outstanding ranges\n\t\t\t\tcompressor.finalizeCreationRange(range1);\n\n\t\t\t\t// Make a third range. This one should be composed of eager finals that align after the two ranges above.\n\t\t\t\tconst id3_1 = compressor.generateCompressedId();\n\t\t\t\tconst id3_2 = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(id3_1));\n\t\t\t\tassert(isFinalId(id3_2));\n\t\t\t\tconst range3 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Finalize both initial ranges.\n\t\t\t\tcompressor.finalizeCreationRange(range2);\n\t\t\t\tcompressor.finalizeCreationRange(range3);\n\n\t\t\t\t// Make some more eager finals that should be aligned correctly.\n\t\t\t\tconst id4_1 = compressor.generateCompressedId();\n\t\t\t\tconst id4_2 = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(id4_1));\n\t\t\t\tassert(isFinalId(id4_2));\n\n\t\t\t\t// Assert everything is unique and consistent.\n\t\t\t\tconst ids = new Set<SessionSpaceCompressedId>();\n\t\t\t\tconst uuids = new Set<StableId | string>();\n\t\t\t\t[id1_1, id1_2, id2_1, id2_2, id3_1, id3_2, id4_1, id4_2].forEach((id) => {\n\t\t\t\t\tids.add(id);\n\t\t\t\t\tuuids.add(compressor.decompress(id));\n\t\t\t\t});\n\t\t\t\tassert.equal(ids.size, 8);\n\t\t\t\tassert.equal(uuids.size, 8);\n\t\t\t});\n\n\t\t\tit(\"generates unique eager finals when there are still outstanding locals after a cluster is expanded\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(\n\t\t\t\t\tClient.Client1,\n\t\t\t\t\t2 /* must be 2 for the test to make sense */,\n\t\t\t\t);\n\n\t\t\t\t// Make locals to fill half the future cluster\n\t\t\t\tconst id1_1 = compressor.generateCompressedId();\n\t\t\t\tconst id1_2 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(id1_1));\n\t\t\t\tassert(isLocalId(id1_2));\n\t\t\t\tconst range1 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Make locals to overflow the future cluster\n\t\t\t\tconst id2_1 = compressor.generateCompressedId();\n\t\t\t\tconst id2_2 = compressor.generateCompressedId();\n\t\t\t\tconst id2_3 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(id2_1));\n\t\t\t\tassert(isLocalId(id2_2));\n\t\t\t\tassert(isLocalId(id2_3));\n\t\t\t\tconst range2 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Finalize the first range. This should align the first four locals (i.e. all of range1, and 2/3 of range2)\n\t\t\t\tcompressor.finalizeCreationRange(range1);\n\t\t\t\tassert(isFinalId(compressor.normalizeToOpSpace(id2_2)));\n\t\t\t\tassert(isLocalId(compressor.normalizeToOpSpace(id2_3)));\n\n\t\t\t\t// Make a single range that should still be overflowing the initial cluster (i.e. be local)\n\t\t\t\tconst id3_1 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(id3_1));\n\t\t\t\tconst range3 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Second finalize should expand the cluster and align all outstanding ranges.\n\t\t\t\tcompressor.finalizeCreationRange(range2);\n\n\t\t\t\t// All generated IDs should have aligned finals (even though range3 has not been finalized)\n\t\t\t\tconst allIds: SessionSpaceCompressedId[] = [\n\t\t\t\t\tid1_1,\n\t\t\t\t\tid1_2,\n\t\t\t\t\tid2_1,\n\t\t\t\t\tid2_2,\n\t\t\t\t\tid2_3,\n\t\t\t\t\tid3_1,\n\t\t\t\t];\n\t\t\t\tallIds.forEach((id) => assert(isFinalId(compressor.normalizeToOpSpace(id))));\n\n\t\t\t\tcompressor.finalizeCreationRange(range3);\n\n\t\t\t\t// Make one eager final\n\t\t\t\tconst id4_1 = compressor.generateCompressedId();\n\t\t\t\tallIds.push(id4_1);\n\t\t\t\tassert(isFinalId(id4_1));\n\n\t\t\t\t// Assert everything is unique and consistent.\n\t\t\t\tconst ids = new Set<SessionSpaceCompressedId>();\n\t\t\t\tconst uuids = new Set<StableId | string>();\n\t\t\t\tallIds.forEach((id) => {\n\t\t\t\t\tids.add(id);\n\t\t\t\t\tuuids.add(compressor.decompress(id));\n\t\t\t\t});\n\t\t\t\tassert.equal(ids.size, 7);\n\t\t\t\tassert.equal(uuids.size, 7);\n\t\t\t});\n\t\t});\n\t});\n\n\t/**\n\t * Helper to generate a fixed number of IDs.\n\t */\n\tfunction generateCompressedIds(\n\t\tcompressor: IdCompressor,\n\t\tcount: number,\n\t): SessionSpaceCompressedId[] {\n\t\tconst ids: SessionSpaceCompressedId[] = [];\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tids.push(compressor.generateCompressedId());\n\t\t}\n\t\treturn ids;\n\t}\n\n\tdescribe(\"can produce a creation range\", () => {\n\t\tconst clusterSize = 5;\n\t\tconst tests: {\n\t\t\ttitle: string;\n\t\t\tidCount: number;\n\t\t}[] = [\n\t\t\t{ title: \"that is empty\", idCount: 0 },\n\t\t\t{ title: \"with one ID\", idCount: 1 },\n\t\t\t{ title: \"with more IDs than fit in a cluster\", idCount: clusterSize * 2 },\n\t\t];\n\n\t\ttests.forEach(({ title, idCount }) => {\n\t\t\tit(title, () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\t\tgenerateCompressedIds(compressor, idCount);\n\t\t\t\tconst range = compressor.takeNextCreationRange();\n\t\t\t\tif (range.ids !== undefined) {\n\t\t\t\t\tassert.equal(range.ids.count, idCount);\n\t\t\t\t} else {\n\t\t\t\t\tassert.equal(idCount, 0);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tit(\"with the correct local ranges\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 1);\n\t\t\tconst ids1 = generateCompressedIds(compressor, 1);\n\t\t\tconst range1 = compressor.takeNextCreationRange(); // one local\n\t\t\tassert.deepEqual(ids1, [-1]);\n\t\t\tassert.deepEqual(range1.ids?.localIdRanges, [[1, 1]]);\n\n\t\t\tcompressor.finalizeCreationRange(range1);\n\t\t\tconst ids2 = generateCompressedIds(compressor, 1);\n\t\t\tconst range2 = compressor.takeNextCreationRange(); // one eager final\n\t\t\tassert.deepEqual(ids2, [1]);\n\t\t\tassert.deepEqual(range2.ids?.localIdRanges, []);\n\n\t\t\t// make new cluster\n\t\t\tcompressor.finalizeCreationRange(range2);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\n\t\t\tconst ids3 = generateCompressedIds(compressor, 2);\n\t\t\tconst range3 = compressor.takeNextCreationRange(); // one eager final and one local\n\t\t\tassert.deepEqual(ids3, [3, -5]);\n\t\t\tassert.deepEqual(range3.ids?.localIdRanges, [[5, 1]]);\n\n\t\t\t(range3 as any).ids.requestedClusterSize = 4;\n\t\t\tconst ids4 = generateCompressedIds(compressor, 2);\n\t\t\tcompressor.finalizeCreationRange(range3);\n\t\t\tids4.push(...generateCompressedIds(compressor, 5));\n\t\t\tconst range4 = compressor.takeNextCreationRange(); // two locals, two eager finals, three locals\n\t\t\tassert.deepEqual(ids4, [-6, -7, 7, 8, -10, -11, -12]);\n\t\t\tassert.deepEqual(range4.ids?.localIdRanges, [\n\t\t\t\t[6, 2],\n\t\t\t\t[10, 3],\n\t\t\t]);\n\t\t});\n\t});\n\n\tdescribe(\"Finalizing\", () => {\n\t\tit(\"prevents attempts to finalize ranges twice\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tgenerateCompressedIds(compressor, 3);\n\t\t\tconst batchRange = compressor.takeNextCreationRange();\n\t\t\tcompressor.finalizeCreationRange(batchRange);\n\t\t\tassert.throws(\n\t\t\t\t() => compressor.finalizeCreationRange(batchRange),\n\t\t\t\t(e: Error) => e.message === \"Ranges finalized out of order.\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"prevents attempts to finalize ranges out of order\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.takeNextCreationRange();\n\t\t\tcompressor.generateCompressedId();\n\t\t\tconst secondRange = compressor.takeNextCreationRange();\n\t\t\tassert.throws(\n\t\t\t\t() => compressor.finalizeCreationRange(secondRange),\n\t\t\t\t(e: Error) => e.message === \"Ranges finalized out of order.\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"can finalize ranges into clusters of varying sizes\", () => {\n\t\t\tfor (let i = 1; i < 5; i++) {\n\t\t\t\tfor (let j = 0; j <= i; j++) {\n\t\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, i);\n\t\t\t\t\tconst ids = new Set<SessionSpaceCompressedId>();\n\t\t\t\t\tfor (let k = 0; k <= j; k++) {\n\t\t\t\t\t\tids.add(compressor.generateCompressedId());\n\t\t\t\t\t}\n\t\t\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\t\t\tconst opIds = new Set<OpSpaceCompressedId>();\n\t\t\t\t\tids.forEach((id) => opIds.add(compressor.normalizeToOpSpace(id)));\n\t\t\t\t\tassert.equal(ids.size, opIds.size);\n\t\t\t\t\topIds.forEach((id) => assert.equal(isFinalId(id), true));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\"Ghost sessions\", () => {\n\t\tit(\"prevents non-allocation mutations during a ghost session\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst range = compressor.takeNextCreationRange();\n\t\t\tcompressor.beginGhostSession(createSessionId(), () => {\n\t\t\t\tassert.throws(() => compressor.takeNextCreationRange());\n\t\t\t\tassert.throws(() => compressor.finalizeCreationRange(range));\n\t\t\t\tassert.throws(() => compressor.serialize(false));\n\t\t\t});\n\t\t});\n\n\t\tit(\"can generate IDs during a ghost session\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst idCount = 10;\n\t\t\tconst ids = new Set<SessionSpaceCompressedId>();\n\t\t\tconst ghostSession = createSessionId();\n\t\t\tcompressor.beginGhostSession(ghostSession, () => {\n\t\t\t\tfor (let i = 0; i < idCount; i++) {\n\t\t\t\t\tconst id = compressor.generateCompressedId();\n\t\t\t\t\tassert(isFinalId(id));\n\t\t\t\t\tassert(compressor.decompress(id) === incrementStableId(ghostSession, i));\n\t\t\t\t\tids.add(id);\n\t\t\t\t}\n\t\t\t});\n\t\t\tassert.equal(ids.size, idCount);\n\t\t});\n\n\t\tit(\"does not create a cluster for a no-op ghost session\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5, mockLogger);\n\t\t\tcompressor.serialize(false);\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:SerializedIdCompressorSize\",\n\t\t\t\t\tclusterCount: 0,\n\t\t\t\t\tsessionCount: 0,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tcompressor.beginGhostSession(createSessionId(), () => {});\n\t\t\tcompressor.serialize(false);\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:SerializedIdCompressorSize\",\n\t\t\t\t\tclusterCount: 0,\n\t\t\t\t\tsessionCount: 0,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tcompressor.beginGhostSession(createSessionId(), () => {\n\t\t\t\tcompressor.generateCompressedId();\n\t\t\t});\n\t\t\tcompressor.serialize(false);\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:SerializedIdCompressorSize\",\n\t\t\t\t\tclusterCount: 1,\n\t\t\t\t\tsessionCount: 1,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\t});\n\n\tdescribe(\"Recompression\", () => {\n\t\tit(\"can re-compress a uuid it generated\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tconst uuid = compressor.decompress(id);\n\t\t\tassert.equal(compressor.recompress(uuid), id);\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tassert.equal(compressor.recompress(uuid), id);\n\t\t});\n\n\t\tit(\"can re-compress uuids from a remote client\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst uuid = compressor.decompress(compressor.generateCompressedId());\n\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2);\n\t\t\tcompressor2.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst finalId = compressor2.recompress(uuid);\n\t\t\tif (finalId === undefined) {\n\t\t\t\tassert.fail();\n\t\t\t}\n\t\t\tassert(isFinalId(finalId));\n\t\t});\n\n\t\tit(\"will not re-compress uuids it did not originally generate\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tassert.equal(\n\t\t\t\tcompressor.tryRecompress(\"5fff846a-efd4-42fb-8b78-b32ce2672f99\" as StableId),\n\t\t\t\tundefined,\n\t\t\t);\n\t\t});\n\n\t\tit(\"can re-compress an eager final ID that is not finalized\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst finalId = compressor.generateCompressedId();\n\t\t\tassert(isFinalId(finalId));\n\t\t\tconst stableId = incrementStableId(sessionIds.get(Client.Client1), 1);\n\t\t\tassert.equal(compressor.recompress(stableId), finalId);\n\t\t});\n\t});\n\n\tdescribe(\"Decompression\", () => {\n\t\tit(\"will not decompress IDs it did not generate\", () => {\n\t\t\tconst errorMessage = \"Unknown ID\";\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tassert.throws(\n\t\t\t\t() => compressor.decompress(-1 as LocalCompressedId),\n\t\t\t\t(e: Error) => e.message === errorMessage,\n\t\t\t);\n\t\t\tassert.throws(\n\t\t\t\t() => compressor.decompress(0 as SessionSpaceCompressedId),\n\t\t\t\t(e: Error) => e.message === errorMessage,\n\t\t\t);\n\t\t});\n\n\t\tit(\"can decompress a local ID before and after finalizing\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tconst uuid = compressor.decompress(id);\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tassert.equal(compressor.decompress(id), uuid);\n\t\t});\n\n\t\tit(\"can decompress a final ID\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst finalId = compressor.normalizeToOpSpace(id);\n\t\t\tif (isLocalId(finalId)) {\n\t\t\t\tassert.fail(\"Op space ID was finalized but is local\");\n\t\t\t}\n\t\t\tcompressor.decompress(\n\t\t\t\tcompressor.normalizeToSessionSpace(finalId, compressor.localSessionId),\n\t\t\t);\n\t\t});\n\n\t\tit(\"can decompress an eagerly generated final ID that is not finalized\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst finalId = compressor.generateCompressedId();\n\t\t\tassert(isFinalId(finalId));\n\t\t\tassert.equal(\n\t\t\t\tcompressor.decompress(finalId),\n\t\t\t\tincrementStableId(sessionIds.get(Client.Client1), 1),\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"Normalization\", () => {\n\t\tit(\"can normalize a local ID to op space before finalizing\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tconst normalized = compressor.normalizeToOpSpace(id);\n\t\t\tassert(isLocalId(id));\n\t\t\tassert.equal(id, normalized);\n\t\t});\n\n\t\tit(\"can normalize a local ID to op space after finalizing\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst normalized = compressor.normalizeToOpSpace(id);\n\t\t\tassert(isFinalId(normalized));\n\t\t\tassert.notEqual(id, normalized);\n\t\t});\n\n\t\tit(\"can normalize an eagerly generated final ID\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst eagerFinalId = compressor.generateCompressedId();\n\t\t\tassert(isFinalId(eagerFinalId));\n\t\t\tconst opNormalized = compressor.normalizeToOpSpace(eagerFinalId);\n\t\t\tassert.equal(eagerFinalId, opNormalized);\n\t\t\tconst sessionNormalized = compressor.normalizeToSessionSpace(\n\t\t\t\topNormalized,\n\t\t\t\tcompressor.localSessionId,\n\t\t\t);\n\t\t\tassert.equal(sessionNormalized, opNormalized);\n\t\t});\n\n\t\tit(\"cannot normalize a remote ID to session space if it has not been finalized\", () => {\n\t\t\tconst compressor1 = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2);\n\t\t\tconst normalized = compressor1.normalizeToOpSpace(compressor1.generateCompressedId());\n\t\t\tassert.throws(\n\t\t\t\t() => compressor2.normalizeToSessionSpace(normalized, compressor1.localSessionId),\n\t\t\t\t(e: Error) =>\n\t\t\t\t\te.message === \"No IDs have ever been finalized by the supplied session.\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"can normalize local and final IDs from a remote session to session space\", () => {\n\t\t\tconst compressor1 = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2);\n\t\t\tconst id = compressor1.generateCompressedId();\n\t\t\tconst normalizedLocal = compressor1.normalizeToOpSpace(id);\n\t\t\tconst range = compressor1.takeNextCreationRange();\n\t\t\tcompressor1.finalizeCreationRange(range);\n\t\t\tconst normalizedFinal = compressor1.normalizeToOpSpace(id);\n\t\t\tcompressor2.finalizeCreationRange(range);\n\t\t\tassert(isLocalId(normalizedLocal));\n\t\t\tassert(isFinalId(normalizedFinal));\n\t\t\tassert.equal(\n\t\t\t\tcompressor2.normalizeToSessionSpace(normalizedFinal, compressor1.localSessionId),\n\t\t\t\tnormalizedFinal,\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tcompressor2.normalizeToSessionSpace(normalizedLocal, compressor1.localSessionId),\n\t\t\t\tnormalizedFinal,\n\t\t\t);\n\t\t});\n\n\t\tit(\"can normalize a final ID created by the local session but sent in another client's op space\", () => {\n\t\t\t// Regression test for the situation in which a client creates a final ID and another client references\n\t\t\t// that final ID in a message back to the creating client. The creating client will normalize it and\n\t\t\t// pass the session ID of the remote (non-creating) client. This should be handled correctly.\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5);\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2, 5);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tconst creationRange = compressor.takeNextCreationRange();\n\t\t\tcompressor.finalizeCreationRange(creationRange);\n\t\t\tcompressor2.finalizeCreationRange(creationRange);\n\t\t\tconst idInClient2OpSpace = compressor2.normalizeToOpSpace(\n\t\t\t\tcompressor2.normalizeToSessionSpace(\n\t\t\t\t\tcompressor.normalizeToOpSpace(id),\n\t\t\t\t\tcompressor.localSessionId,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst normalizedToClient1SessionSpace = compressor.normalizeToSessionSpace(\n\t\t\t\tidInClient2OpSpace,\n\t\t\t\tcompressor2.localSessionId,\n\t\t\t);\n\t\t\tassert.equal(normalizedToClient1SessionSpace, id);\n\t\t});\n\t});\n\n\tdescribe(\"Telemetry\", () => {\n\t\tit(\"emits first cluster and new cluster telemetry events\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5, mockLogger);\n\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\tassert(isLocalId(localId1));\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\n\t\t\tmockLogger.assertMatch([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:FirstCluster\",\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:IdCompressorStatus\",\n\t\t\t\t\teagerFinalIdCount: 0,\n\t\t\t\t\tlocalIdCount: 1,\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\"emits new cluster event on second cluster\", () => {\n\t\t\t// Fill the first cluster\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 1, mockLogger);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tconst range = compressor.takeNextCreationRange();\n\t\t\tcompressor.finalizeCreationRange(range);\n\n\t\t\t// Create another cluster with a different client so that expansion doesn't happen\n\t\t\tconst mockLogger2 = new MockLogger();\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2, 1, mockLogger2);\n\t\t\tcompressor2.finalizeCreationRange(range);\n\t\t\tcompressor2.generateCompressedId();\n\t\t\tconst range2 = compressor2.takeNextCreationRange();\n\t\t\tcompressor2.finalizeCreationRange(range2);\n\t\t\tcompressor.finalizeCreationRange(range2);\n\t\t\t// Make sure we emitted the FirstCluster event\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:FirstCluster\",\n\t\t\t\t},\n\t\t\t]);\n\t\t\tmockLogger.clear();\n\n\t\t\t// Fill the one remaining spot\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\n\t\t\t// Trigger a new cluster creation\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:NewCluster\",\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\"correctly logs telemetry events for eager final id allocations\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5, mockLogger);\n\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\tassert(isLocalId(localId1));\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:IdCompressorStatus\",\n\t\t\t\t\teagerFinalIdCount: 0,\n\t\t\t\t\tlocalIdCount: 1,\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tmockLogger.clear();\n\t\t\tconst finalId1 = compressor.generateCompressedId();\n\t\t\tconst finalId2 = compressor.generateCompressedId();\n\t\t\tassert(isFinalId(finalId1));\n\t\t\tassert(isFinalId(finalId2));\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:IdCompressorStatus\",\n\t\t\t\t\teagerFinalIdCount: 2,\n\t\t\t\t\tlocalIdCount: 0,\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\"correctly logs telemetry events for expansion case\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5, mockLogger);\n\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\tassert(isLocalId(localId1));\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:IdCompressorStatus\",\n\t\t\t\t\teagerFinalIdCount: 0,\n\t\t\t\t\tlocalIdCount: 1,\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tmockLogger.clear();\n\n\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\tconst id = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(id));\n\t\t\t}\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:IdCompressorStatus\",\n\t\t\t\t\teagerFinalIdCount: 5,\n\t\t\t\t\tlocalIdCount: 0,\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tmockLogger.clear();\n\n\t\t\tconst expansionId1 = compressor.generateCompressedId();\n\t\t\tconst expansionId2 = compressor.generateCompressedId();\n\t\t\tassert(isLocalId(expansionId1));\n\t\t\tassert(isLocalId(expansionId2));\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:ClusterExpansion\",\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t\tpreviousCapacity: 6,\n\t\t\t\t\tnewCapacity: 13,\n\t\t\t\t\toverflow: 2,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\"emits telemetry when serialized\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5, mockLogger);\n\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\tassert(isLocalId(localId1));\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tcompressor.serialize(false);\n\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:SerializedIdCompressorSize\",\n\t\t\t\t\tsize: 72,\n\t\t\t\t\tclusterCount: 1,\n\t\t\t\t\tsessionCount: 1,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\"correctly passes logger when no session specified\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = createIdCompressor(mockLogger);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:FirstCluster\",\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\t});\n\n\tdescribe(\"Serialization\", () => {\n\t\tit(\"can serialize an empty compressor\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\texpectSerializes(compressor);\n\t\t\tcompressor.generateCompressedId();\n\t\t\texpectSerializes(compressor);\n\t\t});\n\n\t\tit(\"correctly deserializes and resumes a session\", () => {\n\t\t\tconst compressor1 = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2);\n\t\t\tcompressor1.generateCompressedId();\n\t\t\tconst creationRange = compressor1.takeNextCreationRange();\n\t\t\tcompressor1.finalizeCreationRange(creationRange);\n\t\t\tcompressor2.finalizeCreationRange(creationRange);\n\t\t\tconst [_, serializedWithSession] = expectSerializes(compressor1);\n\t\t\tconst compressorResumed = IdCompressor.deserialize(serializedWithSession);\n\t\t\tcompressorResumed.generateCompressedId();\n\t\t\tconst range2 = compressorResumed.takeNextCreationRange();\n\t\t\tcompressorResumed.finalizeCreationRange(range2);\n\t\t\tcompressor2.finalizeCreationRange(range2);\n\t\t\tconst [__, roundtrippedCompressorResumed] = roundtrip(compressorResumed, false);\n\t\t\tconst [___, roundtrippedCompressor2] = roundtrip(compressor2, false);\n\t\t\tassert(\n\t\t\t\troundtrippedCompressorResumed.equals(\n\t\t\t\t\troundtrippedCompressor2,\n\t\t\t\t\tfalse, // don't compare local state\n\t\t\t\t),\n\t\t\t);\n\t\t});\n\n\t\tit(\"can detect and fails to load 1.0 documents\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst base64Content = compressor.serialize(false);\n\t\t\tconst floatView = new Float64Array(stringToBuffer(base64Content, \"base64\"));\n\t\t\t// Change the version to 1.0\n\t\t\tfloatView[0] = 1.0;\n\t\t\tconst docString1 = bufferToString(\n\t\t\t\tfloatView.buffer,\n\t\t\t\t\"base64\",\n\t\t\t) as SerializedIdCompressorWithNoSession;\n\t\t\tassert.throws(\n\t\t\t\t() => deserializeIdCompressor(docString1, createSessionId()),\n\t\t\t\t(e: Error) => e.message === \"IdCompressor version 1.0 is no longer supported.\",\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"Collision detection\", () => {\n\t\tit(\"detects when a new cluster is allocated whose UUIDs collide with another cluster\", () => {\n\t\t\tconst compressor1 = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst compressor2 = CompressorFactory.createCompressorWithSession(\n\t\t\t\tincrementStableId(compressor1.localSessionId, 5) as SessionId,\n\t\t\t);\n\t\t\tcompressor1.generateCompressedId();\n\t\t\tconst creationRange1 = compressor1.takeNextCreationRange();\n\n\t\t\tcompressor2.generateCompressedId();\n\t\t\tconst creationRange2 = compressor2.takeNextCreationRange();\n\n\t\t\tconst errorMessage = \"0x758\";\n\n\t\t\t// Simulate world in which range1 was sequenced first\n\t\t\tcompressor1.finalizeCreationRange(creationRange1);\n\t\t\tassert.throws(\n\t\t\t\t() => compressor1.finalizeCreationRange(creationRange2),\n\t\t\t\t(e: Error) => e.message === errorMessage,\n\t\t\t);\n\n\t\t\t// Simulate world in which range2 was sequenced first\n\t\t\tcompressor2.finalizeCreationRange(creationRange2);\n\t\t\tassert.throws(\n\t\t\t\t() => compressor2.finalizeCreationRange(creationRange1),\n\t\t\t\t(e: Error) => e.message === errorMessage,\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribeNetwork(\"Networked\", (itNetwork) => {\n\t\titNetwork(\n\t\t\t\"upholds the invariant that IDs always decompress to the same UUID\",\n\t\t\t2,\n\t\t\t(network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 5);\n\n\t\t\t\tconst preAckLocals = new Map<Client, [SessionSpaceCompressedId, string][]>();\n\t\t\t\tfor (const [client, compressor] of network.getTargetCompressors(MetaClient.All)) {\n\t\t\t\t\tconst locals: [SessionSpaceCompressedId, string][] = [];\n\t\t\t\t\tfor (const idData of network.getIdLog(client)) {\n\t\t\t\t\t\tlocals.push([idData.id, compressor.decompress(idData.id)]);\n\t\t\t\t\t}\n\t\t\t\t\tpreAckLocals.set(client, locals);\n\t\t\t\t}\n\n\t\t\t\t// Ack all IDs\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\n\t\t\t\tfor (const [client, compressor] of network.getTargetCompressors(MetaClient.All)) {\n\t\t\t\t\tconst preAckLocalIds =\n\t\t\t\t\t\tpreAckLocals.get(client) ?? fail(\"Expected preack locals for client\");\n\t\t\t\t\tlet i = 0;\n\t\t\t\t\tfor (const idData of network.getIdLog(client)) {\n\t\t\t\t\t\tif (idData.originatingClient === client) {\n\t\t\t\t\t\t\tassert(!isFinalId(idData.id));\n\t\t\t\t\t\t\tconst currentUuid = compressor.decompress(idData.id);\n\t\t\t\t\t\t\tassert.equal(currentUuid, preAckLocalIds[i % preAckLocalIds.length][1]);\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\titNetwork(\"can normalize session space IDs to op space\", 5, (network) => {\n\t\t\tconst clusterCapacity = 5;\n\t\t\tconst idCount = clusterCapacity * 2;\n\t\t\tfor (let i = 0; i < idCount; i++) {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 1);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 1);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 1);\n\t\t\t}\n\n\t\t\tfor (const [client, compressor] of network.getTargetCompressors(MetaClient.All)) {\n\t\t\t\tfor (const idData of network.getIdLog(client)) {\n\t\t\t\t\tassert.equal(idData.originatingClient, client);\n\t\t\t\t\tassert(isLocalId(compressor.normalizeToOpSpace(idData.id)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\n\t\t\tfor (const [client, compressor] of network.getTargetCompressors(MetaClient.All)) {\n\t\t\t\tfor (const idData of network.getIdLog(client)) {\n\t\t\t\t\tassert(isFinalId(compressor.normalizeToOpSpace(idData.id)));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\titNetwork(\n\t\t\t\"can normalize local op space IDs from a local session to session space IDs\",\n\t\t\t(network) => {\n\t\t\t\tconst compressor = network.getCompressor(Client.Client1);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 1);\n\t\t\t\tnetwork.deliverOperations(Client.Client1);\n\t\t\t\tconst sessionSpaceIds = network.getIdLog(Client.Client1);\n\t\t\t\tconst opSpaceId = compressor.normalizeToOpSpace(sessionSpaceIds[0].id);\n\t\t\t\tconst sessionSpaceId = compressor.normalizeToSessionSpace(\n\t\t\t\t\topSpaceId,\n\t\t\t\t\tcompressor.localSessionId,\n\t\t\t\t);\n\t\t\t\tassert(isFinalId(opSpaceId));\n\t\t\t\tassert(isLocalId(sessionSpaceId));\n\t\t\t},\n\t\t);\n\n\t\titNetwork(\n\t\t\t\"can normalize local op space IDs from a remote session to session space IDs\",\n\t\t\t(network) => {\n\t\t\t\tconst compressor1 = network.getCompressor(Client.Client1);\n\t\t\t\tconst compressor2 = network.getCompressor(Client.Client2);\n\t\t\t\tconst opSpaceIds = network.allocateAndSendIds(Client.Client1, 1);\n\t\t\t\t// Mimic sending a reference to an ID that hasn't been acked yet, such as in a slow network\n\t\t\t\tconst id = opSpaceIds[0];\n\t\t\t\tconst getSessionNormalizedId = () =>\n\t\t\t\t\tcompressor2.normalizeToSessionSpace(id, compressor1.localSessionId);\n\t\t\t\tassert.throws(\n\t\t\t\t\tgetSessionNormalizedId,\n\t\t\t\t\t(e: Error) =>\n\t\t\t\t\t\te.message === \"No IDs have ever been finalized by the supplied session.\",\n\t\t\t\t);\n\t\t\t\tnetwork.deliverOperations(Client.Client2);\n\t\t\t\tassert(isFinalId(getSessionNormalizedId()));\n\t\t\t},\n\t\t);\n\n\t\tfunction expectSequencedLogsAlign(\n\t\t\tnetwork: IdCompressorTestNetwork,\n\t\t\tclient1: Client,\n\t\t\tclient2: Client,\n\t\t\tnumUnifications = 0,\n\t\t): void {\n\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\tassert(client1 !== client2, \"Clients must not be the same\");\n\t\t\tconst log1 = network.getSequencedIdLog(client1);\n\t\t\tconst log2 = network.getSequencedIdLog(client2);\n\t\t\tassert.equal(log1.length, log2.length);\n\t\t\tconst compressor1 = network.getCompressor(client1);\n\t\t\tconst compressor2 = network.getCompressor(client2);\n\t\t\tconst ids = new Set<OpSpaceCompressedId>();\n\t\t\tconst uuids = new Set<StableId>();\n\t\t\tfor (let i = 0; i < log1.length; i++) {\n\t\t\t\tconst data1 = log1[i];\n\t\t\t\tconst id1 = compressor1.normalizeToOpSpace(data1.id);\n\t\t\t\tconst id2 = compressor2.normalizeToOpSpace(log2[i].id);\n\t\t\t\tassert(isFinalId(id1));\n\t\t\t\tids.add(id1);\n\t\t\t\tassert.equal(id1, id2);\n\t\t\t\tconst uuidOrOverride1 = compressor1.decompress(\n\t\t\t\t\tcompressor1.normalizeToSessionSpace(id1, compressor1.localSessionId),\n\t\t\t\t);\n\t\t\t\tuuids.add(uuidOrOverride1);\n\t\t\t\tassert.equal(\n\t\t\t\t\tuuidOrOverride1,\n\t\t\t\t\tcompressor2.decompress(\n\t\t\t\t\t\tcompressor2.normalizeToSessionSpace(id2, compressor2.localSessionId),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst expectedSize = log1.length - numUnifications;\n\t\t\tassert.equal(ids.size, expectedSize);\n\t\t\tassert.equal(uuids.size, expectedSize);\n\t\t}\n\n\t\titNetwork(\"produces ID spaces correctly\", (network) => {\n\t\t\t// This test asserts that IDs returned from IdCompressor APIs are correctly encoded as either local or final.\n\t\t\t// This is a glass box test in that it assumes the negative/positive encoding of CompressedIds (negative = local, positive = final).\n\t\t\tconst compressor1 = network.getCompressor(Client.Client1);\n\n\t\t\t// Client 1 makes three IDs\n\t\t\tnetwork.allocateAndSendIds(Client.Client1, 3);\n\t\t\tnetwork.getIdLog(Client.Client1).forEach(({ id }) => assert(isLocalId(id)));\n\n\t\t\t// Client 1's IDs have not been acked so have no op space equivalent\n\t\t\tnetwork\n\t\t\t\t.getIdLog(Client.Client1)\n\t\t\t\t.forEach((idData) => assert(isLocalId(compressor1.normalizeToOpSpace(idData.id))));\n\n\t\t\t// Client 1's IDs are acked\n\t\t\tnetwork.deliverOperations(Client.Client1);\n\t\t\tnetwork.getIdLog(Client.Client1).forEach(({ id }) => assert(isLocalId(id)));\n\n\t\t\t// Client 2 makes three IDs\n\t\t\tnetwork.allocateAndSendIds(Client.Client2, 3);\n\n\t\t\tnetwork.getIdLog(Client.Client2).forEach(({ id }) => assert(isLocalId(id)));\n\n\t\t\t// Client 1 receives Client 2's IDs\n\t\t\tnetwork.deliverOperations(Client.Client1);\n\n\t\t\tnetwork\n\t\t\t\t.getIdLog(Client.Client1)\n\t\t\t\t.slice(-3)\n\t\t\t\t.forEach(({ id }) => assert(isFinalId(id)));\n\n\t\t\t// All IDs have been acked or are from another client, and therefore have a final form in op space\n\t\t\tnetwork\n\t\t\t\t.getIdLog(Client.Client1)\n\t\t\t\t.forEach(({ id }) => assert(isFinalId(compressor1.normalizeToOpSpace(id))));\n\n\t\t\t// Compression should preserve ID space correctness\n\t\t\tnetwork.getIdLog(Client.Client1).forEach((idData) => {\n\t\t\t\tconst roundtripped = compressor1.recompress(compressor1.decompress(idData.id));\n\t\t\t\tassert.equal(Math.sign(roundtripped), Math.sign(idData.id));\n\t\t\t});\n\n\t\t\tnetwork.getIdLog(Client.Client1).forEach((idData) => {\n\t\t\t\tconst opNormalized = compressor1.normalizeToOpSpace(idData.id);\n\t\t\t\tassert.equal(\n\t\t\t\t\tMath.sign(compressor1.normalizeToSessionSpace(opNormalized, idData.sessionId)),\n\t\t\t\t\tMath.sign(idData.id),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\titNetwork(\"produces consistent IDs with large fuzz input\", (network) => {\n\t\t\tconst generator = take(5000, makeOpGenerator({}));\n\t\t\tperformFuzzActions(generator, network, 1984, undefined, true, (n) =>\n\t\t\t\tn.assertNetworkState(),\n\t\t\t);\n\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t});\n\n\t\titNetwork(\"does not decompress ids for empty parts of clusters\", 2, (network) => {\n\t\t\t// This is a glass box test in that it creates a final ID outside of the ID compressor\n\t\t\tnetwork.allocateAndSendIds(Client.Client1, 1);\n\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\tconst id = network.getSequencedIdLog(Client.Client2)[0].id;\n\t\t\tassert(isFinalId(id));\n\t\t\t// eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n\t\t\tconst emptyId = (id + 1) as SessionSpaceCompressedId;\n\t\t\tassert.throws(\n\t\t\t\t() => network.getCompressor(Client.Client2).decompress(emptyId),\n\t\t\t\t(e: Error) => e.message === \"Unknown ID\",\n\t\t\t);\n\t\t});\n\n\t\tdescribe(\"Finalizing\", () => {\n\t\t\titNetwork(\"can finalize IDs from multiple clients\", (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 3);\n\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\tClient.Client2,\n\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\tnetwork.getCompressor(Client.Client2)[\"nextRequestedClusterSize\"] * 2,\n\t\t\t\t);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 5);\n\t\t\t\texpectSequencedLogsAlign(network, Client.Client1, Client.Client2);\n\t\t\t});\n\n\t\t\titNetwork(\"can finalize a range when the current cluster is full\", 5, (network) => {\n\t\t\t\tconst clusterCapacity = network.getCompressor(\n\t\t\t\t\tClient.Client1,\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t)[\"nextRequestedClusterSize\"];\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, clusterCapacity);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, clusterCapacity);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, clusterCapacity);\n\t\t\t\texpectSequencedLogsAlign(network, Client.Client1, Client.Client2);\n\t\t\t});\n\n\t\t\titNetwork(\"can finalize a range that spans multiple clusters\", 5, (network) => {\n\t\t\t\tconst clusterCapacity = network.getCompressor(\n\t\t\t\t\tClient.Client1,\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t)[\"nextRequestedClusterSize\"];\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 1);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 1);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, clusterCapacity * 3);\n\t\t\t\texpectSequencedLogsAlign(network, Client.Client1, Client.Client2);\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Serialization\", () => {\n\t\t\titNetwork(\n\t\t\t\t\"prevents attempts to resume a session from a serialized compressor with no session\",\n\t\t\t\t(network) => {\n\t\t\t\t\tconst compressor = network.getCompressor(Client.Client1);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 1);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 1);\n\t\t\t\t\tnetwork.deliverOperations(Client.Client1);\n\t\t\t\t\tconst serializedWithoutLocalState = compressor.serialize(false);\n\t\t\t\t\tassert.throws(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tIdCompressor.deserialize(\n\t\t\t\t\t\t\t\tserializedWithoutLocalState,\n\t\t\t\t\t\t\t\tsessionIds.get(Client.Client2),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(e: Error) => e.message === \"Cannot resume existing session.\",\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t);\n\n\t\t\titNetwork(\"round-trips local state\", 3, (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 3);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 3);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 3);\n\t\t\t\tnetwork.deliverOperations(Client.Client1);\n\t\t\t\t// Some un-acked locals at the end\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 4);\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t});\n\n\t\t\titNetwork(\"can serialize a partially empty cluster\", 5, (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client3));\n\t\t\t});\n\n\t\t\titNetwork(\"can serialize a full cluster\", 2, (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client3));\n\t\t\t});\n\n\t\t\titNetwork(\"can serialize full clusters from different clients\", 2, (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 2);\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client3));\n\t\t\t});\n\n\t\t\titNetwork(\"can serialize clusters of different sizes and clients\", 3, (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 3);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 3);\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client3));\n\t\t\t});\n\n\t\t\titNetwork(\n\t\t\t\t\"can resume a session and interact with multiple other clients\",\n\t\t\t\t3,\n\t\t\t\t(network) => {\n\t\t\t\t\tconst clusterSize = network.getCompressor(\n\t\t\t\t\t\tClient.Client1,\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t)[\"nextRequestedClusterSize\"];\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, clusterSize);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, clusterSize);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, clusterSize);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, clusterSize);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, clusterSize);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, clusterSize);\n\t\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\t\tnetwork.goOfflineThenResume(Client.Client1);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 2);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 2);\n\t\t\t\t\texpectSequencedLogsAlign(network, Client.Client1, Client.Client2);\n\t\t\t\t},\n\t\t\t);\n\n\t\t\titNetwork(\"can serialize after a large fuzz input\", 3, (network) => {\n\t\t\t\tconst generator = take(5000, makeOpGenerator({}));\n\t\t\t\tperformFuzzActions(generator, network, Math.PI, undefined, true, (n) => {\n\t\t\t\t\t// Periodically check that everyone in the network has the same serialized state\n\t\t\t\t\tn.deliverOperations(DestinationClient.All);\n\t\t\t\t\tconst compressors = n.getTargetCompressors(DestinationClient.All);\n\t\t\t\t\tlet deserializedPrev = roundtrip(compressors[0][1], false)[1];\n\t\t\t\t\tfor (let i = 1; i < compressors.length; i++) {\n\t\t\t\t\t\tconst deserializedCur = roundtrip(compressors[i][1], false)[1];\n\t\t\t\t\t\tassert(deserializedPrev.equals(deserializedCur, false));\n\t\t\t\t\t\tdeserializedPrev = deserializedCur;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client2));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client3));\n\t\t\t});\n\t\t});\n\t});\n});\n\ntype NetworkTestFunction = (\n\ttitle: string,\n\ttest: (network: IdCompressorTestNetwork) => void,\n) => void;\n\ntype NetworkTestFunctionWithCapacity = (\n\ttitle: string,\n\tinitialClusterCapacity: number,\n\ttest: (network: IdCompressorTestNetwork) => void,\n) => void;\n\nfunction createNetworkTestFunction(\n\tvalidateAfter: boolean,\n): NetworkTestFunction & NetworkTestFunctionWithCapacity {\n\treturn (\n\t\ttitle: string,\n\t\ttestOrCapacity: ((network: IdCompressorTestNetwork) => void) | number,\n\t\ttest?: (network: IdCompressorTestNetwork) => void,\n\t) => {\n\t\tit(title, () => {\n\t\t\tconst hasCapacity = typeof testOrCapacity === \"number\";\n\t\t\tconst capacity = hasCapacity ? testOrCapacity : undefined;\n\t\t\tconst network = new IdCompressorTestNetwork(capacity);\n\t\t\t(hasCapacity ? test ?? fail(\"test must be defined\") : testOrCapacity)(network);\n\t\t\tif (validateAfter) {\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\tnetwork.assertNetworkState();\n\t\t\t}\n\t\t}).timeout(10000);\n\t};\n}\n\nfunction describeNetwork(\n\ttitle: string,\n\tits: (itFunc: NetworkTestFunction & NetworkTestFunctionWithCapacity) => void,\n) {\n\tdescribe(title, () => {\n\t\tits(createNetworkTestFunction(false));\n\t});\n\n\tdescribe(`${title} (with validation)`, () => {\n\t\tits(createNetworkTestFunction(true));\n\t});\n}\n"]}
1
+ {"version":3,"file":"idCompressor.spec.js","sourceRoot":"","sources":["../../src/test/idCompressor.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\n\nimport { bufferToString, stringToBuffer } from \"@fluid-internal/client-utils\";\nimport { take } from \"@fluid-private/stochastic-test-utils\";\nimport { MockLogger } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { IdCompressor, createIdCompressor, deserializeIdCompressor } from \"../idCompressor.js\";\nimport {\n\tOpSpaceCompressedId,\n\tSerializedIdCompressorWithNoSession,\n\tSessionId,\n\tSessionSpaceCompressedId,\n\tStableId,\n} from \"../index.js\";\nimport { createSessionId } from \"../utilities.js\";\n\nimport {\n\tClient,\n\tCompressorFactory,\n\tDestinationClient,\n\tIdCompressorTestNetwork,\n\tMetaClient,\n\texpectSerializes,\n\tmakeOpGenerator,\n\tperformFuzzActions,\n\troundtrip,\n\tsessionIds,\n} from \"./idCompressorTestUtilities.js\";\nimport { LocalCompressedId, fail, incrementStableId, isFinalId, isLocalId } from \"./testCommon.js\";\n\ndescribe(\"IdCompressor\", () => {\n\tit(\"reports the proper session ID\", () => {\n\t\tconst sessionId = createSessionId();\n\t\tconst compressor = CompressorFactory.createCompressorWithSession(sessionId);\n\t\tassert(compressor.localSessionId, sessionId);\n\t});\n\n\tdescribe(\"ID Generation\", () => {\n\t\tit(\"can manually create a compressed ID\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tconst uuid = compressor.decompress(id);\n\t\t\tassert.equal(id, compressor.recompress(uuid));\n\t\t});\n\n\t\tit(\"can generate document unique IDs\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 2);\n\t\t\tlet id = compressor.generateDocumentUniqueId();\n\t\t\tassert(typeof id === \"string\");\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tid = compressor.generateDocumentUniqueId();\n\t\t\tassert(typeof id === \"number\" && isFinalId(id));\n\t\t\tid = compressor.generateDocumentUniqueId();\n\t\t\tassert(typeof id === \"number\" && isFinalId(id));\n\t\t\tid = compressor.generateDocumentUniqueId();\n\t\t\tassert(typeof id === \"string\");\n\t\t});\n\n\t\tdescribe(\"Eager final ID allocation\", () => {\n\t\t\tit(\"eagerly allocates final IDs when cluster creation has been finalized\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 3);\n\t\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(localId1));\n\t\t\t\tconst localId2 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(localId2));\n\t\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\t\tconst finalId3 = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(finalId3));\n\t\t\t\tconst finalId4 = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(finalId4));\n\t\t\t\tconst finalId5 = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(finalId5));\n\t\t\t\tconst localId6 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(localId6));\n\n\t\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\n\t\t\t\tconst opSpaceId1 = compressor.normalizeToOpSpace(localId1);\n\t\t\t\tconst opSpaceId2 = compressor.normalizeToOpSpace(localId2);\n\t\t\t\tconst opSpaceId3 = compressor.normalizeToOpSpace(finalId3);\n\t\t\t\tconst opSpaceId4 = compressor.normalizeToOpSpace(finalId4);\n\t\t\t\tconst opSpaceId5 = compressor.normalizeToOpSpace(finalId5);\n\t\t\t\tconst opSpaceId6 = compressor.normalizeToOpSpace(localId6);\n\n\t\t\t\tassert(isFinalId(opSpaceId1));\n\t\t\t\tassert(isFinalId(opSpaceId2));\n\t\t\t\tassert(isFinalId(opSpaceId3) && opSpaceId3 === finalId3);\n\t\t\t\tassert(isFinalId(opSpaceId4) && opSpaceId4 === finalId4);\n\t\t\t\tassert(isFinalId(opSpaceId5) && opSpaceId5 === finalId5);\n\t\t\t\tassert(isFinalId(opSpaceId6));\n\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId1, compressor.localSessionId),\n\t\t\t\t\tlocalId1,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId2, compressor.localSessionId),\n\t\t\t\t\tlocalId2,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId3, compressor.localSessionId),\n\t\t\t\t\tfinalId3,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId4, compressor.localSessionId),\n\t\t\t\t\tfinalId4,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId5, compressor.localSessionId),\n\t\t\t\t\tfinalId5,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId6, compressor.localSessionId),\n\t\t\t\t\tlocalId6,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"correctly normalizes eagerly allocated final IDs\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5);\n\t\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\t\tconst range1 = compressor.takeNextCreationRange();\n\t\t\t\tconst localId2 = compressor.generateCompressedId();\n\t\t\t\tconst range2 = compressor.takeNextCreationRange();\n\t\t\t\tassert(isLocalId(localId1));\n\t\t\t\tassert(isLocalId(localId2));\n\n\t\t\t\tcompressor.finalizeCreationRange(range1);\n\t\t\t\tcompressor.finalizeCreationRange(range2);\n\n\t\t\t\tconst opSpaceId1 = compressor.normalizeToOpSpace(localId1);\n\t\t\t\tconst opSpaceId2 = compressor.normalizeToOpSpace(localId2);\n\n\t\t\t\tassert(isFinalId(opSpaceId1));\n\t\t\t\tassert(isFinalId(opSpaceId2));\n\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId1, compressor.localSessionId),\n\t\t\t\t\tlocalId1,\n\t\t\t\t);\n\t\t\t\tassert.equal(\n\t\t\t\t\tcompressor.normalizeToSessionSpace(opSpaceId2, compressor.localSessionId),\n\t\t\t\t\tlocalId2,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"generates correct eager finals when there are outstanding locals after cluster expansion\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 2);\n\n\t\t\t\t// Before cluster expansion\n\t\t\t\tassert(isLocalId(compressor.generateCompressedId()));\n\t\t\t\tconst rangeA = compressor.takeNextCreationRange();\n\t\t\t\tcompressor.finalizeCreationRange(rangeA);\n\t\t\t\tassert(isFinalId(compressor.generateCompressedId()));\n\t\t\t\tassert(isFinalId(compressor.generateCompressedId()));\n\n\t\t\t\t// After cluster expansion\n\t\t\t\tassert(isLocalId(compressor.generateCompressedId()));\n\t\t\t\tconst rangeB = compressor.takeNextCreationRange();\n\t\t\t\tconst localId = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(localId));\n\n\t\t\t\t// Take a range that won't be finalized in this test; the finalizing of range B should associate this range with finals\n\t\t\t\tconst rangeC = compressor.takeNextCreationRange();\n\n\t\t\t\tcompressor.finalizeCreationRange(rangeB);\n\t\t\t\tconst eagerId = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(eagerId));\n\n\t\t\t\tassert.equal(compressor.recompress(compressor.decompress(localId)), localId);\n\t\t\t\tassert.equal(compressor.recompress(compressor.decompress(eagerId)), eagerId);\n\n\t\t\t\tcompressor.finalizeCreationRange(rangeC);\n\n\t\t\t\tassert.equal(compressor.recompress(compressor.decompress(localId)), localId);\n\t\t\t\tassert.equal(compressor.recompress(compressor.decompress(eagerId)), eagerId);\n\t\t\t});\n\n\t\t\tit(\"generates unique eager finals when multiple outstanding creation ranges during finalizing\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(\n\t\t\t\t\tClient.Client1,\n\t\t\t\t\t10 /* must be 10 for the test to make sense */,\n\t\t\t\t);\n\n\t\t\t\t// Make a first outstanding range\n\t\t\t\tconst id1_1 = compressor.generateCompressedId();\n\t\t\t\tconst id1_2 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(id1_1));\n\t\t\t\tassert(isLocalId(id1_2));\n\t\t\t\tconst range1 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Make a second outstanding range\n\t\t\t\tconst id2_1 = compressor.generateCompressedId();\n\t\t\t\tconst id2_2 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(id2_1));\n\t\t\t\tassert(isLocalId(id2_2));\n\t\t\t\tconst range2 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Finalize just the first one, which should create finals that align with both outstanding ranges\n\t\t\t\tcompressor.finalizeCreationRange(range1);\n\n\t\t\t\t// Make a third range. This one should be composed of eager finals that align after the two ranges above.\n\t\t\t\tconst id3_1 = compressor.generateCompressedId();\n\t\t\t\tconst id3_2 = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(id3_1));\n\t\t\t\tassert(isFinalId(id3_2));\n\t\t\t\tconst range3 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Finalize both initial ranges.\n\t\t\t\tcompressor.finalizeCreationRange(range2);\n\t\t\t\tcompressor.finalizeCreationRange(range3);\n\n\t\t\t\t// Make some more eager finals that should be aligned correctly.\n\t\t\t\tconst id4_1 = compressor.generateCompressedId();\n\t\t\t\tconst id4_2 = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(id4_1));\n\t\t\t\tassert(isFinalId(id4_2));\n\n\t\t\t\t// Assert everything is unique and consistent.\n\t\t\t\tconst ids = new Set<SessionSpaceCompressedId>();\n\t\t\t\tconst uuids = new Set<StableId | string>();\n\t\t\t\t[id1_1, id1_2, id2_1, id2_2, id3_1, id3_2, id4_1, id4_2].forEach((id) => {\n\t\t\t\t\tids.add(id);\n\t\t\t\t\tuuids.add(compressor.decompress(id));\n\t\t\t\t});\n\t\t\t\tassert.equal(ids.size, 8);\n\t\t\t\tassert.equal(uuids.size, 8);\n\t\t\t});\n\n\t\t\tit(\"generates unique eager finals when there are still outstanding locals after a cluster is expanded\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(\n\t\t\t\t\tClient.Client1,\n\t\t\t\t\t2 /* must be 2 for the test to make sense */,\n\t\t\t\t);\n\n\t\t\t\t// Make locals to fill half the future cluster\n\t\t\t\tconst id1_1 = compressor.generateCompressedId();\n\t\t\t\tconst id1_2 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(id1_1));\n\t\t\t\tassert(isLocalId(id1_2));\n\t\t\t\tconst range1 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Make locals to overflow the future cluster\n\t\t\t\tconst id2_1 = compressor.generateCompressedId();\n\t\t\t\tconst id2_2 = compressor.generateCompressedId();\n\t\t\t\tconst id2_3 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(id2_1));\n\t\t\t\tassert(isLocalId(id2_2));\n\t\t\t\tassert(isLocalId(id2_3));\n\t\t\t\tconst range2 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Finalize the first range. This should align the first four locals (i.e. all of range1, and 2/3 of range2)\n\t\t\t\tcompressor.finalizeCreationRange(range1);\n\t\t\t\tassert(isFinalId(compressor.normalizeToOpSpace(id2_2)));\n\t\t\t\tassert(isLocalId(compressor.normalizeToOpSpace(id2_3)));\n\n\t\t\t\t// Make a single range that should still be overflowing the initial cluster (i.e. be local)\n\t\t\t\tconst id3_1 = compressor.generateCompressedId();\n\t\t\t\tassert(isLocalId(id3_1));\n\t\t\t\tconst range3 = compressor.takeNextCreationRange();\n\n\t\t\t\t// Second finalize should expand the cluster and align all outstanding ranges.\n\t\t\t\tcompressor.finalizeCreationRange(range2);\n\n\t\t\t\t// All generated IDs should have aligned finals (even though range3 has not been finalized)\n\t\t\t\tconst allIds: SessionSpaceCompressedId[] = [\n\t\t\t\t\tid1_1,\n\t\t\t\t\tid1_2,\n\t\t\t\t\tid2_1,\n\t\t\t\t\tid2_2,\n\t\t\t\t\tid2_3,\n\t\t\t\t\tid3_1,\n\t\t\t\t];\n\t\t\t\tallIds.forEach((id) => assert(isFinalId(compressor.normalizeToOpSpace(id))));\n\n\t\t\t\tcompressor.finalizeCreationRange(range3);\n\n\t\t\t\t// Make one eager final\n\t\t\t\tconst id4_1 = compressor.generateCompressedId();\n\t\t\t\tallIds.push(id4_1);\n\t\t\t\tassert(isFinalId(id4_1));\n\n\t\t\t\t// Assert everything is unique and consistent.\n\t\t\t\tconst ids = new Set<SessionSpaceCompressedId>();\n\t\t\t\tconst uuids = new Set<StableId | string>();\n\t\t\t\tallIds.forEach((id) => {\n\t\t\t\t\tids.add(id);\n\t\t\t\t\tuuids.add(compressor.decompress(id));\n\t\t\t\t});\n\t\t\t\tassert.equal(ids.size, 7);\n\t\t\t\tassert.equal(uuids.size, 7);\n\t\t\t});\n\t\t});\n\t});\n\n\t/**\n\t * Helper to generate a fixed number of IDs.\n\t */\n\tfunction generateCompressedIds(\n\t\tcompressor: IdCompressor,\n\t\tcount: number,\n\t): SessionSpaceCompressedId[] {\n\t\tconst ids: SessionSpaceCompressedId[] = [];\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tids.push(compressor.generateCompressedId());\n\t\t}\n\t\treturn ids;\n\t}\n\n\tdescribe(\"can produce a creation range\", () => {\n\t\tconst clusterSize = 5;\n\t\tconst tests: {\n\t\t\ttitle: string;\n\t\t\tidCount: number;\n\t\t}[] = [\n\t\t\t{ title: \"that is empty\", idCount: 0 },\n\t\t\t{ title: \"with one ID\", idCount: 1 },\n\t\t\t{ title: \"with more IDs than fit in a cluster\", idCount: clusterSize * 2 },\n\t\t];\n\n\t\ttests.forEach(({ title, idCount }) => {\n\t\t\tit(title, () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\t\tgenerateCompressedIds(compressor, idCount);\n\t\t\t\tconst range = compressor.takeNextCreationRange();\n\t\t\t\tif (range.ids !== undefined) {\n\t\t\t\t\tassert.equal(range.ids.count, idCount);\n\t\t\t\t} else {\n\t\t\t\t\tassert.equal(idCount, 0);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tit(\"with the correct local ranges\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 1);\n\t\t\tconst ids1 = generateCompressedIds(compressor, 1);\n\t\t\tconst range1 = compressor.takeNextCreationRange(); // one local\n\t\t\tassert.deepEqual(ids1, [-1]);\n\t\t\tassert.deepEqual(range1.ids?.localIdRanges, [[1, 1]]);\n\n\t\t\tcompressor.finalizeCreationRange(range1);\n\t\t\tconst ids2 = generateCompressedIds(compressor, 1);\n\t\t\tconst range2 = compressor.takeNextCreationRange(); // one eager final\n\t\t\tassert.deepEqual(ids2, [1]);\n\t\t\tassert.deepEqual(range2.ids?.localIdRanges, []);\n\n\t\t\t// make new cluster\n\t\t\tcompressor.finalizeCreationRange(range2);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\n\t\t\tconst ids3 = generateCompressedIds(compressor, 2);\n\t\t\tconst range3 = compressor.takeNextCreationRange(); // one eager final and one local\n\t\t\tassert.deepEqual(ids3, [3, -5]);\n\t\t\tassert.deepEqual(range3.ids?.localIdRanges, [[5, 1]]);\n\n\t\t\t(range3 as any).ids.requestedClusterSize = 4;\n\t\t\tconst ids4 = generateCompressedIds(compressor, 2);\n\t\t\tcompressor.finalizeCreationRange(range3);\n\t\t\tids4.push(...generateCompressedIds(compressor, 5));\n\t\t\tconst range4 = compressor.takeNextCreationRange(); // two locals, two eager finals, three locals\n\t\t\tassert.deepEqual(ids4, [-6, -7, 7, 8, -10, -11, -12]);\n\t\t\tassert.deepEqual(range4.ids?.localIdRanges, [\n\t\t\t\t[6, 2],\n\t\t\t\t[10, 3],\n\t\t\t]);\n\t\t});\n\n\t\tdescribe(\"by retaking all outstanding ranges\", () => {\n\t\t\tit(\"when there are no outstanding ranges\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 2);\n\t\t\t\tlet retakenRangeEmpty = compressor.takeUnfinalizedCreationRange();\n\t\t\t\tassert.equal(retakenRangeEmpty.ids, undefined);\n\t\t\t\tcompressor.finalizeCreationRange(retakenRangeEmpty);\n\t\t\t\tgenerateCompressedIds(compressor, 1);\n\t\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\t\tretakenRangeEmpty = compressor.takeUnfinalizedCreationRange();\n\t\t\t\tassert.equal(retakenRangeEmpty.ids, undefined);\n\t\t\t});\n\n\t\t\tit(\"when there is one outstanding ranges with local IDs only\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 2);\n\n\t\t\t\tgenerateCompressedIds(compressor, 1);\n\t\t\t\tcompressor.takeNextCreationRange();\n\n\t\t\t\tlet retakenRangeLocalOnly = compressor.takeUnfinalizedCreationRange();\n\t\t\t\tassert.deepEqual(retakenRangeLocalOnly.ids, {\n\t\t\t\t\tfirstGenCount: 1,\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tlocalIdRanges: [[1, 1]],\n\t\t\t\t\trequestedClusterSize: 2,\n\t\t\t\t});\n\n\t\t\t\tgenerateCompressedIds(compressor, 1);\n\t\t\t\tretakenRangeLocalOnly = compressor.takeUnfinalizedCreationRange();\n\t\t\t\tassert.deepEqual(retakenRangeLocalOnly.ids, {\n\t\t\t\t\tfirstGenCount: 1,\n\t\t\t\t\tcount: 2,\n\t\t\t\t\tlocalIdRanges: [[1, 2]],\n\t\t\t\t\trequestedClusterSize: 2,\n\t\t\t\t});\n\n\t\t\t\tlet postRetakeRange = compressor.takeNextCreationRange();\n\t\t\t\t// IDs should be undefined because retaking should still advance the taken ID counter\n\t\t\t\t// if it doesn't, ranges will be resubmitted causing out of order errors\n\t\t\t\tassert.equal(postRetakeRange.ids, undefined);\n\t\t\t\tgenerateCompressedIds(compressor, 1);\n\t\t\t\tpostRetakeRange = compressor.takeNextCreationRange();\n\t\t\t\tassert.deepEqual(postRetakeRange.ids, {\n\t\t\t\t\tfirstGenCount: 3,\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tlocalIdRanges: [[3, 1]],\n\t\t\t\t\trequestedClusterSize: 2,\n\t\t\t\t});\n\n\t\t\t\tcompressor.finalizeCreationRange(retakenRangeLocalOnly);\n\t\t\t});\n\n\t\t\tit(\"when there are multiple outstanding ranges\", () => {\n\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 2);\n\t\t\t\tgenerateCompressedIds(compressor, 1);\n\t\t\t\tconst range1 = compressor.takeNextCreationRange();\n\t\t\t\tgenerateCompressedIds(compressor, 1); // one local\n\t\t\t\tcompressor.finalizeCreationRange(range1);\n\t\t\t\tconst range2 = compressor.takeNextCreationRange();\n\t\t\t\tassert.deepEqual(range2.ids?.localIdRanges, [[2, 1]]);\n\t\t\t\tgenerateCompressedIds(compressor, 1); // one eager final\n\t\t\t\tconst range3 = compressor.takeNextCreationRange();\n\t\t\t\tassert.deepEqual(range3.ids?.localIdRanges, []);\n\t\t\t\tgenerateCompressedIds(compressor, 1); // one local\n\t\t\t\tconst range4 = compressor.takeNextCreationRange();\n\t\t\t\tassert.deepEqual(range4.ids?.localIdRanges, [[4, 1]]);\n\n\t\t\t\tconst retakenRange = compressor.takeUnfinalizedCreationRange();\n\t\t\t\tassert.deepEqual(retakenRange.ids?.firstGenCount, 2);\n\t\t\t\tassert.deepEqual(retakenRange.ids?.count, 3);\n\t\t\t\tassert.deepEqual(retakenRange.ids?.localIdRanges, [\n\t\t\t\t\t[2, 1],\n\t\t\t\t\t[4, 1],\n\t\t\t\t]);\n\n\t\t\t\tcompressor.finalizeCreationRange(retakenRange);\n\t\t\t\tassert.throws(\n\t\t\t\t\t() => compressor.finalizeCreationRange(range2),\n\t\t\t\t\t(e: Error) => e.message === \"Ranges finalized out of order\",\n\t\t\t\t);\n\t\t\t\tassert.throws(\n\t\t\t\t\t() => compressor.finalizeCreationRange(range3),\n\t\t\t\t\t(e: Error) => e.message === \"Ranges finalized out of order\",\n\t\t\t\t);\n\t\t\t\tassert.throws(\n\t\t\t\t\t() => compressor.finalizeCreationRange(range4),\n\t\t\t\t\t(e: Error) => e.message === \"Ranges finalized out of order\",\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"Finalizing\", () => {\n\t\tit(\"prevents attempts to finalize ranges twice\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tgenerateCompressedIds(compressor, 3);\n\t\t\tconst batchRange = compressor.takeNextCreationRange();\n\t\t\tcompressor.finalizeCreationRange(batchRange);\n\t\t\tassert.throws(\n\t\t\t\t() => compressor.finalizeCreationRange(batchRange),\n\t\t\t\t(e: Error) =>\n\t\t\t\t\te.message === \"Ranges finalized out of order\" &&\n\t\t\t\t\t(e as any).expectedStart === -4 &&\n\t\t\t\t\t(e as any).actualStart === -1,\n\t\t\t);\n\t\t});\n\n\t\tit(\"prevents attempts to finalize ranges out of order\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.takeNextCreationRange();\n\t\t\tcompressor.generateCompressedId();\n\t\t\tconst secondRange = compressor.takeNextCreationRange();\n\t\t\tassert.throws(\n\t\t\t\t() => compressor.finalizeCreationRange(secondRange),\n\t\t\t\t(e: Error) =>\n\t\t\t\t\te.message === \"Ranges finalized out of order\" &&\n\t\t\t\t\t(e as any).expectedStart === -1 &&\n\t\t\t\t\t(e as any).actualStart === -2,\n\t\t\t);\n\t\t});\n\n\t\tit(\"can finalize ranges into clusters of varying sizes\", () => {\n\t\t\tfor (let i = 1; i < 5; i++) {\n\t\t\t\tfor (let j = 0; j <= i; j++) {\n\t\t\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, i);\n\t\t\t\t\tconst ids = new Set<SessionSpaceCompressedId>();\n\t\t\t\t\tfor (let k = 0; k <= j; k++) {\n\t\t\t\t\t\tids.add(compressor.generateCompressedId());\n\t\t\t\t\t}\n\t\t\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\t\t\tconst opIds = new Set<OpSpaceCompressedId>();\n\t\t\t\t\tids.forEach((id) => opIds.add(compressor.normalizeToOpSpace(id)));\n\t\t\t\t\tassert.equal(ids.size, opIds.size);\n\t\t\t\t\topIds.forEach((id) => assert.equal(isFinalId(id), true));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\"Ghost sessions\", () => {\n\t\tit(\"prevents non-allocation mutations during a ghost session\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst range = compressor.takeNextCreationRange();\n\t\t\tcompressor.beginGhostSession(createSessionId(), () => {\n\t\t\t\tassert.throws(() => compressor.takeNextCreationRange());\n\t\t\t\tassert.throws(() => compressor.finalizeCreationRange(range));\n\t\t\t\tassert.throws(() => compressor.serialize(false));\n\t\t\t});\n\t\t});\n\n\t\tit(\"can generate IDs during a ghost session\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst idCount = 10;\n\t\t\tconst ids = new Set<SessionSpaceCompressedId>();\n\t\t\tconst ghostSession = createSessionId();\n\t\t\tcompressor.beginGhostSession(ghostSession, () => {\n\t\t\t\tfor (let i = 0; i < idCount; i++) {\n\t\t\t\t\tconst id = compressor.generateCompressedId();\n\t\t\t\t\tassert(isFinalId(id));\n\t\t\t\t\tassert(compressor.decompress(id) === incrementStableId(ghostSession, i));\n\t\t\t\t\tids.add(id);\n\t\t\t\t}\n\t\t\t});\n\t\t\tassert.equal(ids.size, idCount);\n\t\t});\n\n\t\tit(\"does not create a cluster for a no-op ghost session\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5, mockLogger);\n\t\t\tcompressor.serialize(false);\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:SerializedIdCompressorSize\",\n\t\t\t\t\tclusterCount: 0,\n\t\t\t\t\tsessionCount: 0,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tcompressor.beginGhostSession(createSessionId(), () => {});\n\t\t\tcompressor.serialize(false);\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:SerializedIdCompressorSize\",\n\t\t\t\t\tclusterCount: 0,\n\t\t\t\t\tsessionCount: 0,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tcompressor.beginGhostSession(createSessionId(), () => {\n\t\t\t\tcompressor.generateCompressedId();\n\t\t\t});\n\t\t\tcompressor.serialize(false);\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:SerializedIdCompressorSize\",\n\t\t\t\t\tclusterCount: 1,\n\t\t\t\t\tsessionCount: 1,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\t});\n\n\tdescribe(\"Recompression\", () => {\n\t\tit(\"can re-compress a uuid it generated\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tconst uuid = compressor.decompress(id);\n\t\t\tassert.equal(compressor.recompress(uuid), id);\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tassert.equal(compressor.recompress(uuid), id);\n\t\t});\n\n\t\tit(\"can re-compress uuids from a remote client\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst uuid = compressor.decompress(compressor.generateCompressedId());\n\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2);\n\t\t\tcompressor2.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst finalId = compressor2.recompress(uuid);\n\t\t\tif (finalId === undefined) {\n\t\t\t\tassert.fail();\n\t\t\t}\n\t\t\tassert(isFinalId(finalId));\n\t\t});\n\n\t\tit(\"will not re-compress uuids it did not originally generate\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tassert.equal(\n\t\t\t\tcompressor.tryRecompress(\"5fff846a-efd4-42fb-8b78-b32ce2672f99\" as StableId),\n\t\t\t\tundefined,\n\t\t\t);\n\t\t});\n\n\t\tit(\"can re-compress an eager final ID that is not finalized\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst finalId = compressor.generateCompressedId();\n\t\t\tassert(isFinalId(finalId));\n\t\t\tconst stableId = incrementStableId(sessionIds.get(Client.Client1), 1);\n\t\t\tassert.equal(compressor.recompress(stableId), finalId);\n\t\t});\n\t});\n\n\tdescribe(\"Decompression\", () => {\n\t\tit(\"will not decompress IDs it did not generate\", () => {\n\t\t\tconst errorMessage = \"Unknown ID\";\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tassert.throws(\n\t\t\t\t() => compressor.decompress(-1 as LocalCompressedId),\n\t\t\t\t(e: Error) => e.message === errorMessage,\n\t\t\t);\n\t\t\tassert.throws(\n\t\t\t\t() => compressor.decompress(0 as SessionSpaceCompressedId),\n\t\t\t\t(e: Error) => e.message === errorMessage,\n\t\t\t);\n\t\t});\n\n\t\tit(\"can decompress a local ID before and after finalizing\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tconst uuid = compressor.decompress(id);\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tassert.equal(compressor.decompress(id), uuid);\n\t\t});\n\n\t\tit(\"can decompress a final ID\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst finalId = compressor.normalizeToOpSpace(id);\n\t\t\tif (isLocalId(finalId)) {\n\t\t\t\tassert.fail(\"Op space ID was finalized but is local\");\n\t\t\t}\n\t\t\tcompressor.decompress(\n\t\t\t\tcompressor.normalizeToSessionSpace(finalId, compressor.localSessionId),\n\t\t\t);\n\t\t});\n\n\t\tit(\"can decompress an eagerly generated final ID that is not finalized\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst finalId = compressor.generateCompressedId();\n\t\t\tassert(isFinalId(finalId));\n\t\t\tassert.equal(\n\t\t\t\tcompressor.decompress(finalId),\n\t\t\t\tincrementStableId(sessionIds.get(Client.Client1), 1),\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"Normalization\", () => {\n\t\tit(\"can normalize a local ID to op space before finalizing\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tconst normalized = compressor.normalizeToOpSpace(id);\n\t\t\tassert(isLocalId(id));\n\t\t\tassert.equal(id, normalized);\n\t\t});\n\n\t\tit(\"can normalize a local ID to op space after finalizing\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst normalized = compressor.normalizeToOpSpace(id);\n\t\t\tassert(isFinalId(normalized));\n\t\t\tassert.notEqual(id, normalized);\n\t\t});\n\n\t\tit(\"can normalize an eagerly generated final ID\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tconst eagerFinalId = compressor.generateCompressedId();\n\t\t\tassert(isFinalId(eagerFinalId));\n\t\t\tconst opNormalized = compressor.normalizeToOpSpace(eagerFinalId);\n\t\t\tassert.equal(eagerFinalId, opNormalized);\n\t\t\tconst sessionNormalized = compressor.normalizeToSessionSpace(\n\t\t\t\topNormalized,\n\t\t\t\tcompressor.localSessionId,\n\t\t\t);\n\t\t\tassert.equal(sessionNormalized, opNormalized);\n\t\t});\n\n\t\tit(\"cannot normalize a remote ID to session space if it has not been finalized\", () => {\n\t\t\tconst compressor1 = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2);\n\t\t\tconst normalized = compressor1.normalizeToOpSpace(compressor1.generateCompressedId());\n\t\t\tassert.throws(\n\t\t\t\t() => compressor2.normalizeToSessionSpace(normalized, compressor1.localSessionId),\n\t\t\t\t(e: Error) =>\n\t\t\t\t\te.message === \"No IDs have ever been finalized by the supplied session.\",\n\t\t\t);\n\t\t});\n\n\t\tit(\"can normalize local and final IDs from a remote session to session space\", () => {\n\t\t\tconst compressor1 = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2);\n\t\t\tconst id = compressor1.generateCompressedId();\n\t\t\tconst normalizedLocal = compressor1.normalizeToOpSpace(id);\n\t\t\tconst range = compressor1.takeNextCreationRange();\n\t\t\tcompressor1.finalizeCreationRange(range);\n\t\t\tconst normalizedFinal = compressor1.normalizeToOpSpace(id);\n\t\t\tcompressor2.finalizeCreationRange(range);\n\t\t\tassert(isLocalId(normalizedLocal));\n\t\t\tassert(isFinalId(normalizedFinal));\n\t\t\tassert.equal(\n\t\t\t\tcompressor2.normalizeToSessionSpace(normalizedFinal, compressor1.localSessionId),\n\t\t\t\tnormalizedFinal,\n\t\t\t);\n\t\t\tassert.equal(\n\t\t\t\tcompressor2.normalizeToSessionSpace(normalizedLocal, compressor1.localSessionId),\n\t\t\t\tnormalizedFinal,\n\t\t\t);\n\t\t});\n\n\t\tit(\"can normalize a final ID created by the local session but sent in another client's op space\", () => {\n\t\t\t// Regression test for the situation in which a client creates a final ID and another client references\n\t\t\t// that final ID in a message back to the creating client. The creating client will normalize it and\n\t\t\t// pass the session ID of the remote (non-creating) client. This should be handled correctly.\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5);\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2, 5);\n\t\t\tconst id = compressor.generateCompressedId();\n\t\t\tconst creationRange = compressor.takeNextCreationRange();\n\t\t\tcompressor.finalizeCreationRange(creationRange);\n\t\t\tcompressor2.finalizeCreationRange(creationRange);\n\t\t\tconst idInClient2OpSpace = compressor2.normalizeToOpSpace(\n\t\t\t\tcompressor2.normalizeToSessionSpace(\n\t\t\t\t\tcompressor.normalizeToOpSpace(id),\n\t\t\t\t\tcompressor.localSessionId,\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst normalizedToClient1SessionSpace = compressor.normalizeToSessionSpace(\n\t\t\t\tidInClient2OpSpace,\n\t\t\t\tcompressor2.localSessionId,\n\t\t\t);\n\t\t\tassert.equal(normalizedToClient1SessionSpace, id);\n\t\t});\n\t});\n\n\tdescribe(\"Telemetry\", () => {\n\t\tit(\"emits first cluster and new cluster telemetry events\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5, mockLogger);\n\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\tassert(isLocalId(localId1));\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\n\t\t\tmockLogger.assertMatch([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:FirstCluster\",\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:IdCompressorStatus\",\n\t\t\t\t\teagerFinalIdCount: 0,\n\t\t\t\t\tlocalIdCount: 1,\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\"emits new cluster event on second cluster\", () => {\n\t\t\t// Fill the first cluster\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 1, mockLogger);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tconst range = compressor.takeNextCreationRange();\n\t\t\tcompressor.finalizeCreationRange(range);\n\n\t\t\t// Create another cluster with a different client so that expansion doesn't happen\n\t\t\tconst mockLogger2 = new MockLogger();\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2, 1, mockLogger2);\n\t\t\tcompressor2.finalizeCreationRange(range);\n\t\t\tcompressor2.generateCompressedId();\n\t\t\tconst range2 = compressor2.takeNextCreationRange();\n\t\t\tcompressor2.finalizeCreationRange(range2);\n\t\t\tcompressor.finalizeCreationRange(range2);\n\t\t\t// Make sure we emitted the FirstCluster event\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:FirstCluster\",\n\t\t\t\t},\n\t\t\t]);\n\t\t\tmockLogger.clear();\n\n\t\t\t// Fill the one remaining spot\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\n\t\t\t// Trigger a new cluster creation\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:NewCluster\",\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\"correctly logs telemetry events for eager final id allocations\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5, mockLogger);\n\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\tassert(isLocalId(localId1));\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:IdCompressorStatus\",\n\t\t\t\t\teagerFinalIdCount: 0,\n\t\t\t\t\tlocalIdCount: 1,\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tmockLogger.clear();\n\t\t\tconst finalId1 = compressor.generateCompressedId();\n\t\t\tconst finalId2 = compressor.generateCompressedId();\n\t\t\tassert(isFinalId(finalId1));\n\t\t\tassert(isFinalId(finalId2));\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:IdCompressorStatus\",\n\t\t\t\t\teagerFinalIdCount: 2,\n\t\t\t\t\tlocalIdCount: 0,\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\"correctly logs telemetry events for expansion case\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5, mockLogger);\n\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\tassert(isLocalId(localId1));\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:IdCompressorStatus\",\n\t\t\t\t\teagerFinalIdCount: 0,\n\t\t\t\t\tlocalIdCount: 1,\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tmockLogger.clear();\n\n\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\tconst id = compressor.generateCompressedId();\n\t\t\t\tassert(isFinalId(id));\n\t\t\t}\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:IdCompressorStatus\",\n\t\t\t\t\teagerFinalIdCount: 5,\n\t\t\t\t\tlocalIdCount: 0,\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t},\n\t\t\t]);\n\t\t\tmockLogger.clear();\n\n\t\t\tconst expansionId1 = compressor.generateCompressedId();\n\t\t\tconst expansionId2 = compressor.generateCompressedId();\n\t\t\tassert(isLocalId(expansionId1));\n\t\t\tassert(isLocalId(expansionId2));\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:ClusterExpansion\",\n\t\t\t\t\tsessionId: compressor.localSessionId,\n\t\t\t\t\tpreviousCapacity: 6,\n\t\t\t\t\tnewCapacity: 13,\n\t\t\t\t\toverflow: 2,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\"emits telemetry when serialized\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1, 5, mockLogger);\n\t\t\tconst localId1 = compressor.generateCompressedId();\n\t\t\tassert(isLocalId(localId1));\n\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tcompressor.serialize(false);\n\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:SerializedIdCompressorSize\",\n\t\t\t\t\tsize: 72,\n\t\t\t\t\tclusterCount: 1,\n\t\t\t\t\tsessionCount: 1,\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\"correctly passes logger when no session specified\", () => {\n\t\t\tconst mockLogger = new MockLogger();\n\t\t\tconst compressor = createIdCompressor(mockLogger);\n\t\t\tcompressor.generateCompressedId();\n\t\t\tcompressor.finalizeCreationRange(compressor.takeNextCreationRange());\n\t\t\tmockLogger.assertMatchAny([\n\t\t\t\t{\n\t\t\t\t\teventName: \"RuntimeIdCompressor:FirstCluster\",\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\t});\n\n\tdescribe(\"Serialization\", () => {\n\t\tit(\"can serialize an empty compressor\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\texpectSerializes(compressor);\n\t\t\tcompressor.generateCompressedId();\n\t\t\texpectSerializes(compressor);\n\t\t});\n\n\t\tit(\"correctly deserializes and resumes a session\", () => {\n\t\t\tconst compressor1 = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst compressor2 = CompressorFactory.createCompressor(Client.Client2);\n\t\t\tcompressor1.generateCompressedId();\n\t\t\tconst creationRange = compressor1.takeNextCreationRange();\n\t\t\tcompressor1.finalizeCreationRange(creationRange);\n\t\t\tcompressor2.finalizeCreationRange(creationRange);\n\t\t\tconst [_, serializedWithSession] = expectSerializes(compressor1);\n\t\t\tconst compressorResumed = IdCompressor.deserialize(serializedWithSession);\n\t\t\tcompressorResumed.generateCompressedId();\n\t\t\tconst range2 = compressorResumed.takeNextCreationRange();\n\t\t\tcompressorResumed.finalizeCreationRange(range2);\n\t\t\tcompressor2.finalizeCreationRange(range2);\n\t\t\tconst [__, roundtrippedCompressorResumed] = roundtrip(compressorResumed, false);\n\t\t\tconst [___, roundtrippedCompressor2] = roundtrip(compressor2, false);\n\t\t\tassert(\n\t\t\t\troundtrippedCompressorResumed.equals(\n\t\t\t\t\troundtrippedCompressor2,\n\t\t\t\t\tfalse, // don't compare local state\n\t\t\t\t),\n\t\t\t);\n\t\t});\n\n\t\tit(\"can detect and fails to load 1.0 documents\", () => {\n\t\t\tconst compressor = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst base64Content = compressor.serialize(false);\n\t\t\tconst floatView = new Float64Array(stringToBuffer(base64Content, \"base64\"));\n\t\t\t// Change the version to 1.0\n\t\t\tfloatView[0] = 1.0;\n\t\t\tconst docString1 = bufferToString(\n\t\t\t\tfloatView.buffer,\n\t\t\t\t\"base64\",\n\t\t\t) as SerializedIdCompressorWithNoSession;\n\t\t\tassert.throws(\n\t\t\t\t() => deserializeIdCompressor(docString1, createSessionId()),\n\t\t\t\t(e: Error) => e.message === \"IdCompressor version 1.0 is no longer supported.\",\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"Collision detection\", () => {\n\t\tit(\"detects when a new cluster is allocated whose UUIDs collide with another cluster\", () => {\n\t\t\tconst compressor1 = CompressorFactory.createCompressor(Client.Client1);\n\t\t\tconst compressor2 = CompressorFactory.createCompressorWithSession(\n\t\t\t\tincrementStableId(compressor1.localSessionId, 5) as SessionId,\n\t\t\t);\n\t\t\tcompressor1.generateCompressedId();\n\t\t\tconst creationRange1 = compressor1.takeNextCreationRange();\n\n\t\t\tcompressor2.generateCompressedId();\n\t\t\tconst creationRange2 = compressor2.takeNextCreationRange();\n\n\t\t\tconst errorMessage = \"0x758\";\n\n\t\t\t// Simulate world in which range1 was sequenced first\n\t\t\tcompressor1.finalizeCreationRange(creationRange1);\n\t\t\tassert.throws(\n\t\t\t\t() => compressor1.finalizeCreationRange(creationRange2),\n\t\t\t\t(e: Error) => e.message === errorMessage,\n\t\t\t);\n\n\t\t\t// Simulate world in which range2 was sequenced first\n\t\t\tcompressor2.finalizeCreationRange(creationRange2);\n\t\t\tassert.throws(\n\t\t\t\t() => compressor2.finalizeCreationRange(creationRange1),\n\t\t\t\t(e: Error) => e.message === errorMessage,\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribeNetwork(\"Networked\", (itNetwork) => {\n\t\titNetwork(\n\t\t\t\"upholds the invariant that IDs always decompress to the same UUID\",\n\t\t\t2,\n\t\t\t(network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 5);\n\n\t\t\t\tconst preAckLocals = new Map<Client, [SessionSpaceCompressedId, string][]>();\n\t\t\t\tfor (const [client, compressor] of network.getTargetCompressors(MetaClient.All)) {\n\t\t\t\t\tconst locals: [SessionSpaceCompressedId, string][] = [];\n\t\t\t\t\tfor (const idData of network.getIdLog(client)) {\n\t\t\t\t\t\tlocals.push([idData.id, compressor.decompress(idData.id)]);\n\t\t\t\t\t}\n\t\t\t\t\tpreAckLocals.set(client, locals);\n\t\t\t\t}\n\n\t\t\t\t// Ack all IDs\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\n\t\t\t\tfor (const [client, compressor] of network.getTargetCompressors(MetaClient.All)) {\n\t\t\t\t\tconst preAckLocalIds =\n\t\t\t\t\t\tpreAckLocals.get(client) ?? fail(\"Expected preack locals for client\");\n\t\t\t\t\tlet i = 0;\n\t\t\t\t\tfor (const idData of network.getIdLog(client)) {\n\t\t\t\t\t\tif (idData.originatingClient === client) {\n\t\t\t\t\t\t\tassert(!isFinalId(idData.id));\n\t\t\t\t\t\t\tconst currentUuid = compressor.decompress(idData.id);\n\t\t\t\t\t\t\tassert.equal(currentUuid, preAckLocalIds[i % preAckLocalIds.length][1]);\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\titNetwork(\"can normalize session space IDs to op space\", 5, (network) => {\n\t\t\tconst clusterCapacity = 5;\n\t\t\tconst idCount = clusterCapacity * 2;\n\t\t\tfor (let i = 0; i < idCount; i++) {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 1);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 1);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 1);\n\t\t\t}\n\n\t\t\tfor (const [client, compressor] of network.getTargetCompressors(MetaClient.All)) {\n\t\t\t\tfor (const idData of network.getIdLog(client)) {\n\t\t\t\t\tassert.equal(idData.originatingClient, client);\n\t\t\t\t\tassert(isLocalId(compressor.normalizeToOpSpace(idData.id)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\n\t\t\tfor (const [client, compressor] of network.getTargetCompressors(MetaClient.All)) {\n\t\t\t\tfor (const idData of network.getIdLog(client)) {\n\t\t\t\t\tassert(isFinalId(compressor.normalizeToOpSpace(idData.id)));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\titNetwork(\n\t\t\t\"can normalize local op space IDs from a local session to session space IDs\",\n\t\t\t(network) => {\n\t\t\t\tconst compressor = network.getCompressor(Client.Client1);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 1);\n\t\t\t\tnetwork.deliverOperations(Client.Client1);\n\t\t\t\tconst sessionSpaceIds = network.getIdLog(Client.Client1);\n\t\t\t\tconst opSpaceId = compressor.normalizeToOpSpace(sessionSpaceIds[0].id);\n\t\t\t\tconst sessionSpaceId = compressor.normalizeToSessionSpace(\n\t\t\t\t\topSpaceId,\n\t\t\t\t\tcompressor.localSessionId,\n\t\t\t\t);\n\t\t\t\tassert(isFinalId(opSpaceId));\n\t\t\t\tassert(isLocalId(sessionSpaceId));\n\t\t\t},\n\t\t);\n\n\t\titNetwork(\n\t\t\t\"can normalize local op space IDs from a remote session to session space IDs\",\n\t\t\t(network) => {\n\t\t\t\tconst compressor1 = network.getCompressor(Client.Client1);\n\t\t\t\tconst compressor2 = network.getCompressor(Client.Client2);\n\t\t\t\tconst opSpaceIds = network.allocateAndSendIds(Client.Client1, 1);\n\t\t\t\t// Mimic sending a reference to an ID that hasn't been acked yet, such as in a slow network\n\t\t\t\tconst id = opSpaceIds[0];\n\t\t\t\tconst getSessionNormalizedId = () =>\n\t\t\t\t\tcompressor2.normalizeToSessionSpace(id, compressor1.localSessionId);\n\t\t\t\tassert.throws(\n\t\t\t\t\tgetSessionNormalizedId,\n\t\t\t\t\t(e: Error) =>\n\t\t\t\t\t\te.message === \"No IDs have ever been finalized by the supplied session.\",\n\t\t\t\t);\n\t\t\t\tnetwork.deliverOperations(Client.Client2);\n\t\t\t\tassert(isFinalId(getSessionNormalizedId()));\n\t\t\t},\n\t\t);\n\n\t\tfunction expectSequencedLogsAlign(\n\t\t\tnetwork: IdCompressorTestNetwork,\n\t\t\tclient1: Client,\n\t\t\tclient2: Client,\n\t\t\tnumUnifications = 0,\n\t\t): void {\n\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\tassert(client1 !== client2, \"Clients must not be the same\");\n\t\t\tconst log1 = network.getSequencedIdLog(client1);\n\t\t\tconst log2 = network.getSequencedIdLog(client2);\n\t\t\tassert.equal(log1.length, log2.length);\n\t\t\tconst compressor1 = network.getCompressor(client1);\n\t\t\tconst compressor2 = network.getCompressor(client2);\n\t\t\tconst ids = new Set<OpSpaceCompressedId>();\n\t\t\tconst uuids = new Set<StableId>();\n\t\t\tfor (let i = 0; i < log1.length; i++) {\n\t\t\t\tconst data1 = log1[i];\n\t\t\t\tconst id1 = compressor1.normalizeToOpSpace(data1.id);\n\t\t\t\tconst id2 = compressor2.normalizeToOpSpace(log2[i].id);\n\t\t\t\tassert(isFinalId(id1));\n\t\t\t\tids.add(id1);\n\t\t\t\tassert.equal(id1, id2);\n\t\t\t\tconst uuidOrOverride1 = compressor1.decompress(\n\t\t\t\t\tcompressor1.normalizeToSessionSpace(id1, compressor1.localSessionId),\n\t\t\t\t);\n\t\t\t\tuuids.add(uuidOrOverride1);\n\t\t\t\tassert.equal(\n\t\t\t\t\tuuidOrOverride1,\n\t\t\t\t\tcompressor2.decompress(\n\t\t\t\t\t\tcompressor2.normalizeToSessionSpace(id2, compressor2.localSessionId),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst expectedSize = log1.length - numUnifications;\n\t\t\tassert.equal(ids.size, expectedSize);\n\t\t\tassert.equal(uuids.size, expectedSize);\n\t\t}\n\n\t\titNetwork(\"produces ID spaces correctly\", (network) => {\n\t\t\t// This test asserts that IDs returned from IdCompressor APIs are correctly encoded as either local or final.\n\t\t\t// This is a glass box test in that it assumes the negative/positive encoding of CompressedIds (negative = local, positive = final).\n\t\t\tconst compressor1 = network.getCompressor(Client.Client1);\n\n\t\t\t// Client 1 makes three IDs\n\t\t\tnetwork.allocateAndSendIds(Client.Client1, 3);\n\t\t\tnetwork.getIdLog(Client.Client1).forEach(({ id }) => assert(isLocalId(id)));\n\n\t\t\t// Client 1's IDs have not been acked so have no op space equivalent\n\t\t\tnetwork\n\t\t\t\t.getIdLog(Client.Client1)\n\t\t\t\t.forEach((idData) => assert(isLocalId(compressor1.normalizeToOpSpace(idData.id))));\n\n\t\t\t// Client 1's IDs are acked\n\t\t\tnetwork.deliverOperations(Client.Client1);\n\t\t\tnetwork.getIdLog(Client.Client1).forEach(({ id }) => assert(isLocalId(id)));\n\n\t\t\t// Client 2 makes three IDs\n\t\t\tnetwork.allocateAndSendIds(Client.Client2, 3);\n\n\t\t\tnetwork.getIdLog(Client.Client2).forEach(({ id }) => assert(isLocalId(id)));\n\n\t\t\t// Client 1 receives Client 2's IDs\n\t\t\tnetwork.deliverOperations(Client.Client1);\n\n\t\t\tnetwork\n\t\t\t\t.getIdLog(Client.Client1)\n\t\t\t\t.slice(-3)\n\t\t\t\t.forEach(({ id }) => assert(isFinalId(id)));\n\n\t\t\t// All IDs have been acked or are from another client, and therefore have a final form in op space\n\t\t\tnetwork\n\t\t\t\t.getIdLog(Client.Client1)\n\t\t\t\t.forEach(({ id }) => assert(isFinalId(compressor1.normalizeToOpSpace(id))));\n\n\t\t\t// Compression should preserve ID space correctness\n\t\t\tnetwork.getIdLog(Client.Client1).forEach((idData) => {\n\t\t\t\tconst roundtripped = compressor1.recompress(compressor1.decompress(idData.id));\n\t\t\t\tassert.equal(Math.sign(roundtripped), Math.sign(idData.id));\n\t\t\t});\n\n\t\t\tnetwork.getIdLog(Client.Client1).forEach((idData) => {\n\t\t\t\tconst opNormalized = compressor1.normalizeToOpSpace(idData.id);\n\t\t\t\tassert.equal(\n\t\t\t\t\tMath.sign(compressor1.normalizeToSessionSpace(opNormalized, idData.sessionId)),\n\t\t\t\t\tMath.sign(idData.id),\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\titNetwork(\"produces consistent IDs with large fuzz input\", (network) => {\n\t\t\tconst generator = take(5000, makeOpGenerator({}));\n\t\t\tperformFuzzActions(generator, network, 1984, undefined, true, (n) =>\n\t\t\t\tn.assertNetworkState(),\n\t\t\t);\n\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t});\n\n\t\titNetwork(\"does not decompress ids for empty parts of clusters\", 2, (network) => {\n\t\t\t// This is a glass box test in that it creates a final ID outside of the ID compressor\n\t\t\tnetwork.allocateAndSendIds(Client.Client1, 1);\n\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\tconst id = network.getSequencedIdLog(Client.Client2)[0].id;\n\t\t\tassert(isFinalId(id));\n\t\t\t// eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n\t\t\tconst emptyId = (id + 1) as SessionSpaceCompressedId;\n\t\t\tassert.throws(\n\t\t\t\t() => network.getCompressor(Client.Client2).decompress(emptyId),\n\t\t\t\t(e: Error) => e.message === \"Unknown ID\",\n\t\t\t);\n\t\t});\n\n\t\tdescribe(\"Finalizing\", () => {\n\t\t\titNetwork(\"can finalize IDs from multiple clients\", (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 3);\n\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\tClient.Client2,\n\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\tnetwork.getCompressor(Client.Client2)[\"nextRequestedClusterSize\"] * 2,\n\t\t\t\t);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 5);\n\t\t\t\texpectSequencedLogsAlign(network, Client.Client1, Client.Client2);\n\t\t\t});\n\n\t\t\titNetwork(\"can finalize a range when the current cluster is full\", 5, (network) => {\n\t\t\t\tconst clusterCapacity = network.getCompressor(\n\t\t\t\t\tClient.Client1,\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t)[\"nextRequestedClusterSize\"];\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, clusterCapacity);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, clusterCapacity);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, clusterCapacity);\n\t\t\t\texpectSequencedLogsAlign(network, Client.Client1, Client.Client2);\n\t\t\t});\n\n\t\t\titNetwork(\"can finalize a range that spans multiple clusters\", 5, (network) => {\n\t\t\t\tconst clusterCapacity = network.getCompressor(\n\t\t\t\t\tClient.Client1,\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t)[\"nextRequestedClusterSize\"];\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 1);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 1);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, clusterCapacity * 3);\n\t\t\t\texpectSequencedLogsAlign(network, Client.Client1, Client.Client2);\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Serialization\", () => {\n\t\t\titNetwork(\n\t\t\t\t\"prevents attempts to resume a session from a serialized compressor with no session\",\n\t\t\t\t(network) => {\n\t\t\t\t\tconst compressor = network.getCompressor(Client.Client1);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 1);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 1);\n\t\t\t\t\tnetwork.deliverOperations(Client.Client1);\n\t\t\t\t\tconst serializedWithoutLocalState = compressor.serialize(false);\n\t\t\t\t\tassert.throws(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tIdCompressor.deserialize(\n\t\t\t\t\t\t\t\tserializedWithoutLocalState,\n\t\t\t\t\t\t\t\tsessionIds.get(Client.Client2),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t(e: Error) => e.message === \"Cannot resume existing session.\",\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t);\n\n\t\t\titNetwork(\"round-trips local state\", 3, (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 3);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 3);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 3);\n\t\t\t\tnetwork.deliverOperations(Client.Client1);\n\t\t\t\t// Some un-acked locals at the end\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 4);\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t});\n\n\t\t\titNetwork(\"can serialize a partially empty cluster\", 5, (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client3));\n\t\t\t});\n\n\t\t\titNetwork(\"can serialize a full cluster\", 2, (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client3));\n\t\t\t});\n\n\t\t\titNetwork(\"can serialize full clusters from different clients\", 2, (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 2);\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client3));\n\t\t\t});\n\n\t\t\titNetwork(\"can serialize clusters of different sizes and clients\", 3, (network) => {\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 3);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 5);\n\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 3);\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client3));\n\t\t\t});\n\n\t\t\titNetwork(\n\t\t\t\t\"can resume a session and interact with multiple other clients\",\n\t\t\t\t3,\n\t\t\t\t(network) => {\n\t\t\t\t\tconst clusterSize = network.getCompressor(\n\t\t\t\t\t\tClient.Client1,\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t)[\"nextRequestedClusterSize\"];\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, clusterSize);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, clusterSize);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, clusterSize);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, clusterSize);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, clusterSize);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, clusterSize);\n\t\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\t\tnetwork.goOfflineThenResume(Client.Client1);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client1, 2);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client2, 2);\n\t\t\t\t\tnetwork.allocateAndSendIds(Client.Client3, 2);\n\t\t\t\t\texpectSequencedLogsAlign(network, Client.Client1, Client.Client2);\n\t\t\t\t},\n\t\t\t);\n\n\t\t\titNetwork(\"can serialize after a large fuzz input\", 3, (network) => {\n\t\t\t\tconst generator = take(5000, makeOpGenerator({}));\n\t\t\t\tperformFuzzActions(generator, network, Math.PI, undefined, true, (n) => {\n\t\t\t\t\t// Periodically check that everyone in the network has the same serialized state\n\t\t\t\t\tn.deliverOperations(DestinationClient.All);\n\t\t\t\t\tconst compressors = n.getTargetCompressors(DestinationClient.All);\n\t\t\t\t\tlet deserializedPrev = roundtrip(compressors[0][1], false)[1];\n\t\t\t\t\tfor (let i = 1; i < compressors.length; i++) {\n\t\t\t\t\t\tconst deserializedCur = roundtrip(compressors[i][1], false)[1];\n\t\t\t\t\t\tassert(deserializedPrev.equals(deserializedCur, false));\n\t\t\t\t\t\tdeserializedPrev = deserializedCur;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client1));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client2));\n\t\t\t\texpectSerializes(network.getCompressor(Client.Client3));\n\t\t\t});\n\t\t});\n\t});\n});\n\ntype NetworkTestFunction = (\n\ttitle: string,\n\ttest: (network: IdCompressorTestNetwork) => void,\n) => void;\n\ntype NetworkTestFunctionWithCapacity = (\n\ttitle: string,\n\tinitialClusterCapacity: number,\n\ttest: (network: IdCompressorTestNetwork) => void,\n) => void;\n\nfunction createNetworkTestFunction(\n\tvalidateAfter: boolean,\n): NetworkTestFunction & NetworkTestFunctionWithCapacity {\n\treturn (\n\t\ttitle: string,\n\t\ttestOrCapacity: ((network: IdCompressorTestNetwork) => void) | number,\n\t\ttest?: (network: IdCompressorTestNetwork) => void,\n\t) => {\n\t\tit(title, () => {\n\t\t\tconst hasCapacity = typeof testOrCapacity === \"number\";\n\t\t\tconst capacity = hasCapacity ? testOrCapacity : undefined;\n\t\t\tconst network = new IdCompressorTestNetwork(capacity);\n\t\t\t(hasCapacity ? test ?? fail(\"test must be defined\") : testOrCapacity)(network);\n\t\t\tif (validateAfter) {\n\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\tnetwork.assertNetworkState();\n\t\t\t}\n\t\t}).timeout(10000);\n\t};\n}\n\nfunction describeNetwork(\n\ttitle: string,\n\tits: (itFunc: NetworkTestFunction & NetworkTestFunctionWithCapacity) => void,\n) {\n\tdescribe(title, () => {\n\t\tits(createNetworkTestFunction(false));\n\t});\n\n\tdescribe(`${title} (with validation)`, () => {\n\t\tits(createNetworkTestFunction(true));\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"idCompressorTestUtilities.d.ts","sourceRoot":"","sources":["../../src/test/idCompressorTestUtilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idCompressorTestUtilities.d.ts","sourceRoot":"","sources":["../../src/test/idCompressorTestUtilities.ts"],"names":[],"mappings":"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"}