@fluidframework/id-compressor 2.0.0-rc.2.0.2 → 2.0.0-rc.3.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.
- package/CHANGELOG.md +23 -0
- package/api-report/id-compressor.api.md +2 -1
- package/dist/appendOnlySortedMap.js +2 -2
- package/dist/appendOnlySortedMap.js.map +1 -1
- package/dist/finalSpace.d.ts +1 -1
- package/dist/finalSpace.d.ts.map +1 -1
- package/dist/finalSpace.js +2 -2
- package/dist/finalSpace.js.map +1 -1
- package/dist/idCompressor.d.ts +1 -1
- package/dist/idCompressor.d.ts.map +1 -1
- package/dist/idCompressor.js +25 -24
- package/dist/idCompressor.js.map +1 -1
- package/dist/legacy.d.ts +28 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +18 -0
- package/dist/sessionSpaceNormalizer.d.ts +2 -0
- package/dist/sessionSpaceNormalizer.d.ts.map +1 -1
- package/dist/sessionSpaceNormalizer.js +44 -0
- package/dist/sessionSpaceNormalizer.js.map +1 -1
- package/dist/sessions.d.ts +1 -1
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +5 -5
- package/dist/sessions.js.map +1 -1
- package/dist/test/appendOnlySortedMap.perf.spec.js.map +1 -1
- package/dist/test/appendOnlySortedMap.spec.js.map +1 -1
- package/dist/test/idCompressor.perf.spec.js.map +1 -1
- package/dist/test/idCompressor.spec.js.map +1 -1
- package/dist/test/idCompressorTestUtilities.d.ts +2 -2
- package/dist/test/idCompressorTestUtilities.d.ts.map +1 -1
- package/dist/test/idCompressorTestUtilities.js +25 -1
- package/dist/test/idCompressorTestUtilities.js.map +1 -1
- package/dist/test/numericUuid.spec.js.map +1 -1
- package/dist/test/sessionSpaceNormalizer.spec.js.map +1 -1
- package/dist/test/snapshots/summary.spec.js.map +1 -1
- package/dist/test/testCommon.d.ts +1 -1
- package/dist/test/testCommon.d.ts.map +1 -1
- package/dist/test/testCommon.js +4 -4
- package/dist/test/testCommon.js.map +1 -1
- package/dist/types/idCompressor.d.ts +2 -2
- package/dist/types/idCompressor.d.ts.map +1 -1
- package/dist/types/idCompressor.js.map +1 -1
- package/dist/types/persisted-types/0.0.1.d.ts +4 -0
- package/dist/types/persisted-types/0.0.1.d.ts.map +1 -1
- package/dist/types/persisted-types/0.0.1.js.map +1 -1
- package/dist/utilities.d.ts +1 -1
- package/dist/utilities.d.ts.map +1 -1
- package/dist/utilities.js +2 -2
- package/dist/utilities.js.map +1 -1
- package/internal.d.ts +11 -0
- package/legacy.d.ts +11 -0
- package/lib/appendOnlySortedMap.js +1 -1
- package/lib/appendOnlySortedMap.js.map +1 -1
- package/lib/finalSpace.d.ts +1 -1
- package/lib/finalSpace.d.ts.map +1 -1
- package/lib/finalSpace.js +1 -1
- package/lib/finalSpace.js.map +1 -1
- package/lib/idCompressor.d.ts +1 -1
- package/lib/idCompressor.d.ts.map +1 -1
- package/lib/idCompressor.js +6 -5
- package/lib/idCompressor.js.map +1 -1
- package/lib/legacy.d.ts +28 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +18 -0
- package/lib/sessionSpaceNormalizer.d.ts +2 -0
- package/lib/sessionSpaceNormalizer.d.ts.map +1 -1
- package/lib/sessionSpaceNormalizer.js +44 -0
- package/lib/sessionSpaceNormalizer.js.map +1 -1
- package/lib/sessions.d.ts +1 -1
- package/lib/sessions.d.ts.map +1 -1
- package/lib/sessions.js +2 -2
- package/lib/sessions.js.map +1 -1
- package/lib/test/appendOnlySortedMap.perf.spec.js.map +1 -1
- package/lib/test/appendOnlySortedMap.spec.js.map +1 -1
- package/lib/test/idCompressor.perf.spec.js.map +1 -1
- package/lib/test/idCompressor.spec.js.map +1 -1
- package/lib/test/idCompressorTestUtilities.d.ts +2 -2
- package/lib/test/idCompressorTestUtilities.d.ts.map +1 -1
- package/lib/test/idCompressorTestUtilities.js +27 -3
- package/lib/test/idCompressorTestUtilities.js.map +1 -1
- package/lib/test/numericUuid.spec.js.map +1 -1
- package/lib/test/sessionSpaceNormalizer.spec.js.map +1 -1
- package/lib/test/snapshots/summary.spec.js.map +1 -1
- package/lib/test/testCommon.d.ts +1 -1
- package/lib/test/testCommon.d.ts.map +1 -1
- package/lib/test/testCommon.js +1 -1
- package/lib/test/testCommon.js.map +1 -1
- package/lib/types/idCompressor.d.ts +2 -2
- package/lib/types/idCompressor.d.ts.map +1 -1
- package/lib/types/idCompressor.js.map +1 -1
- package/lib/types/persisted-types/0.0.1.d.ts +4 -0
- package/lib/types/persisted-types/0.0.1.d.ts.map +1 -1
- package/lib/types/persisted-types/0.0.1.js.map +1 -1
- package/lib/utilities.d.ts +1 -1
- package/lib/utilities.d.ts.map +1 -1
- package/lib/utilities.js +1 -1
- package/lib/utilities.js.map +1 -1
- package/package.json +35 -65
- package/src/appendOnlySortedMap.ts +1 -1
- package/src/finalSpace.ts +3 -2
- package/src/idCompressor.ts +31 -25
- package/src/packageVersion.ts +1 -1
- package/src/sessionSpaceNormalizer.ts +63 -0
- package/src/sessions.ts +5 -4
- package/src/test/idCompressorTestUtilities.ts +38 -10
- package/src/test/testCommon.ts +4 -3
- package/src/test/tsconfig.json +1 -1
- package/src/types/idCompressor.ts +2 -2
- package/src/types/persisted-types/0.0.1.ts +5 -0
- package/src/utilities.ts +3 -2
- package/api-extractor-cjs.json +0 -8
- package/dist/id-compressor-alpha.d.ts +0 -352
- package/dist/id-compressor-beta.d.ts +0 -179
- package/dist/id-compressor-public.d.ts +0 -179
- package/dist/id-compressor-untrimmed.d.ts +0 -365
- package/lib/id-compressor-alpha.d.ts +0 -352
- package/lib/id-compressor-beta.d.ts +0 -179
- package/lib/id-compressor-public.d.ts +0 -179
- package/lib/id-compressor-untrimmed.d.ts +0 -365
- package/lib/test/appendOnlySortedMap.perf.spec.js +0 -49
- package/lib/test/appendOnlySortedMap.spec.js +0 -166
- package/lib/test/idCompressor.perf.spec.js +0 -281
- package/lib/test/idCompressor.spec.js +0 -953
- package/lib/test/numericUuid.spec.js +0 -74
- package/lib/test/sessionSpaceNormalizer.spec.js +0 -43
- package/lib/test/snapshots/summary.spec.js +0 -127
- /package/{dist → lib}/tsdoc-metadata.json +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appendOnlySortedMap.perf.spec.js","sourceRoot":"","sources":["../../src/test/appendOnlySortedMap.perf.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,
|
|
1
|
+
{"version":3,"file":"appendOnlySortedMap.perf.spec.js","sourceRoot":"","sources":["../../src/test/appendOnlySortedMap.perf.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,gFAA2E;AAC3E,sDAAkE;AAElE,sEAAgE;AAChE,kDAAuD;AAEvD,SAAS,yBAAyB,CAAC,UAAqD;IACvF,MAAM,IAAI,GAAG,yBAAa,CAAC,WAAW,CAAC;IACvC,IAAI,GAAwC,CAAC;IAC7C,IAAI,IAAa,CAAC;IAClB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,GAAG,EAAE;QACnB,IAAI,GAAG,IAAA,kCAAU,EAAC,EAAE,CAAC,CAAC;QACtB,GAAG,GAAG,UAAU,EAAE,CAAC;QACnB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAChC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7D,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC9B;QACD,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAClC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACrD;QACD,WAAW,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,IAAA,qBAAS,EAAC;QACT,IAAI;QACJ,KAAK,EAAE,cAAc;QACrB,MAAM;QACN,WAAW,EAAE,GAAG,EAAE;YACjB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,CAAC;KACD,CAAC,CAAC;IAEH,IAAA,qBAAS,EAAC;QACT,IAAI;QACJ,KAAK,EAAE,wBAAwB;QAC/B,MAAM;QACN,WAAW,EAAE,GAAG,EAAE;YACjB,GAAG,CAAC,kBAAkB,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACzC,yBAAyB,CAAC,GAAG,EAAE,CAAC,IAAI,4CAAmB,CAAC,mCAAoB,CAAC,CAAC,CAAC;AAChF,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IRandom, makeRandom } from \"@fluid-private/stochastic-test-utils\";\nimport { BenchmarkType, benchmark } from \"@fluid-tools/benchmark\";\n\nimport { AppendOnlySortedMap } from \"../appendOnlySortedMap.js\";\nimport { compareFiniteNumbers } from \"../utilities.js\";\n\nfunction runAppendOnlyMapPerfTests(mapBuilder: () => AppendOnlySortedMap<number, number>) {\n\tconst type = BenchmarkType.Measurement;\n\tlet map: AppendOnlySortedMap<number, number>;\n\tlet rand: IRandom;\n\tconst keyChoices: number[] = [];\n\tlet localChoice = 0;\n\tconst before = () => {\n\t\trand = makeRandom(42);\n\t\tmap = mapBuilder();\n\t\tlet curKey = 0;\n\t\tfor (let i = 0; i < 100000; i++) {\n\t\t\tmap.append(curKey, rand.integer(0, Number.MAX_SAFE_INTEGER));\n\t\t\tcurKey += rand.integer(1, 10);\n\t\t}\n\t\tconst keys = [...map.keys()];\n\t\tfor (let i = 0; i < map.size; i++) {\n\t\t\tkeyChoices.push(keys[rand.integer(0, map.size - 1)]);\n\t\t}\n\t\tlocalChoice = 0;\n\t};\n\n\tbenchmark({\n\t\ttype,\n\t\ttitle: `lookup a key`,\n\t\tbefore,\n\t\tbenchmarkFn: () => {\n\t\t\tmap.get(keyChoices[localChoice++ % keyChoices.length]);\n\t\t},\n\t});\n\n\tbenchmark({\n\t\ttype,\n\t\ttitle: `lookup a pair or lower`,\n\t\tbefore,\n\t\tbenchmarkFn: () => {\n\t\t\tmap.getPairOrNextLower(keyChoices[localChoice++ % keyChoices.length]);\n\t\t},\n\t});\n}\n\ndescribe(\"AppendOnlySortedMap Perf\", () => {\n\trunAppendOnlyMapPerfTests(() => new AppendOnlySortedMap(compareFiniteNumbers));\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appendOnlySortedMap.spec.js","sourceRoot":"","sources":["../../src/test/appendOnlySortedMap.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\nimport { strict as assert } from \"assert\";\nimport { AppendOnlySortedMap } from \"../appendOnlySortedMap.js\";\nimport { compareFiniteNumbers } from \"../utilities.js\";\nimport { assertNotUndefined } from \"./testCommon.js\";\n\nfunction runAppendOnlyMapTests(mapBuilder: () => AppendOnlySortedMap<number, number>) {\n\tit(\"detects out-of-order keys\", () => {\n\t\tconst map = mapBuilder();\n\t\tmap.append(0, 0);\n\t\tconst exception = \"Inserted key must be > all others in the map.\";\n\t\tassert.throws(\n\t\t\t() => map.append(-1, 1),\n\t\t\t(e: Error) => e.message === exception,\n\t\t);\n\t\tmap.append(1, 2);\n\t});\n\n\tit(\"can get the min and max keys\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tassert.equal(map.maxKey(), undefined);\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i, i);\n\t\t\tassert.equal(map.maxKey(), i);\n\t\t\tassert.equal(map.minKey(), 0);\n\t\t}\n\t});\n\n\tit(\"can get the first and last pairs\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tassert.equal(map.first(), undefined);\n\t\tassert.equal(map.last(), undefined);\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i, i);\n\t\t\tassert.deepEqual(map.last(), [i, i]);\n\t\t\tassert.deepEqual(map.first(), [0, 0]);\n\t\t}\n\t});\n\n\tit(\"can get values\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i, i);\n\t\t}\n\t\tassert.equal(map.get(-1), undefined);\n\t\tassert.equal(map.get(10), undefined);\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tassert.equal(map.get(i), i);\n\t\t}\n\t});\n\n\tit(\"can get pairs by index\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i * 10, i);\n\t\t}\n\t\tassert.equal(map.getAtIndex(-1), undefined);\n\t\tassert.equal(map.getAtIndex(10), undefined);\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tassert.deepEqual(map.getAtIndex(i), [i * 10, i]);\n\t\t}\n\t});\n\n\tit(\"can get an entry or next lower by key\", () => {\n\t\t[99, 100].forEach((elementCount) => {\n\t\t\tconst map = mapBuilder();\n\t\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\t\tmap.append(i * 2, i * 2);\n\t\t\t}\n\t\t\tassert.equal(map.getPairOrNextLower(-1), undefined);\n\t\t\tfor (let i = 0; i < map.size; i++) {\n\t\t\t\tassert.deepEqual(map.getPairOrNextLower(i * 2), [i * 2, i * 2]);\n\t\t\t\tassert.deepEqual(map.getPairOrNextLower(i * 2 + 1), [i * 2, i * 2]);\n\t\t\t}\n\t\t\tconst maxKey = assertNotUndefined(map.maxKey());\n\t\t\tassert.deepEqual(map.getPairOrNextLower(maxKey + 1), [maxKey, maxKey]);\n\t\t});\n\t});\n\n\tit(\"can get an entry or next higher by key\", () => {\n\t\t[99, 100].forEach((elementCount) => {\n\t\t\tconst map = mapBuilder();\n\t\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\t\tmap.append(i * 2, i * 2);\n\t\t\t}\n\t\t\tconst minKey = assertNotUndefined(map.minKey());\n\t\t\tassert.deepEqual(map.getPairOrNextHigher(minKey - 1), [minKey, minKey]);\n\t\t\tfor (let i = 0; i < map.size - 1; i++) {\n\t\t\t\tassert.deepEqual(map.getPairOrNextHigher(i * 2), [i * 2, i * 2]);\n\t\t\t\tassert.deepEqual(map.getPairOrNextHigher(i * 2 + 1), [i * 2 + 2, i * 2 + 2]);\n\t\t\t}\n\t\t\tassert.equal(map.getPairOrNextHigher(map.size * 2 + 1), undefined);\n\t\t});\n\t});\n\n\tit(\"knows how big it is\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tassert.equal(map.size, i);\n\t\t\tmap.append(i, i);\n\t\t}\n\t\tassert.equal(map.size, elementCount);\n\t});\n\n\tit(\"can enumerate its keys and values\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tconst keys: number[] = [];\n\t\tconst values: number[] = [];\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tconst key = i;\n\t\t\tconst value = i * 2;\n\t\t\tmap.append(key, value);\n\t\t\tkeys.push(key);\n\t\t\tvalues.push(value);\n\t\t}\n\t\tassert.deepEqual([...map.keys()], keys);\n\t\tassert.deepEqual([...map.values()], values);\n\t});\n\n\tit(\"can calculate the indexOf a search element\", () => {\n\t\tconst elements: number[] = [0, 0, 2, 0, 3, 0];\n\t\tconst comparator = (search: number, key: number, value: number): number => {\n\t\t\treturn compareFiniteNumbers(search, key);\n\t\t};\n\t\tassert.equal(AppendOnlySortedMap.keyIndexOf(elements, 0, comparator), 0);\n\t\tassert.equal(AppendOnlySortedMap.keyIndexOf(elements, 2, comparator), 2);\n\t\tassert.equal(AppendOnlySortedMap.keyIndexOf(elements, 3, comparator), 4);\n\t\tassert.equal(\n\t\t\tAppendOnlySortedMap.keyIndexOf(elements, -1, comparator),\n\t\t\t0 ^ AppendOnlySortedMap.failureXor,\n\t\t);\n\t\tassert.equal(\n\t\t\tAppendOnlySortedMap.keyIndexOf(elements, 1, comparator),\n\t\t\t2 ^ AppendOnlySortedMap.failureXor,\n\t\t);\n\t\tassert.equal(\n\t\t\tAppendOnlySortedMap.keyIndexOf(elements, 10, comparator),\n\t\t\t6 ^ AppendOnlySortedMap.failureXor,\n\t\t);\n\t});\n\n\tdescribe(\"can perform range queries\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i * 2, i * 2);\n\t\t}\n\t\tconst maxKey = assertNotUndefined(map.maxKey());\n\n\t\tit(\"on empty ranges\", () => {\n\t\t\tassert.deepEqual([...map.getRange(1, -1)], []);\n\t\t\tassert.deepEqual([...map.getRange(maxKey + 1, maxKey + 1)], []);\n\t\t});\n\n\t\tit(\"on ranges of size 1\", () => {\n\t\t\tassert.deepEqual([...map.getRange(0, 0)], [[0, 0]]);\n\t\t\tassert.deepEqual([...map.getRange(1, 1)], []);\n\t\t\tassert.deepEqual([...map.getRange(-1, -1)], []);\n\t\t});\n\n\t\tit(\"on non-empty ranges\", () => {\n\t\t\tassert.deepEqual([...map.getRange(0, 1)], [[0, 0]]);\n\t\t\tassert.deepEqual(\n\t\t\t\t[...map.getRange(0, 2)],\n\t\t\t\t[\n\t\t\t\t\t[0, 0],\n\t\t\t\t\t[2, 2],\n\t\t\t\t],\n\t\t\t);\n\t\t\tassert.deepEqual(\n\t\t\t\t[...map.getRange(1, 5)],\n\t\t\t\t[\n\t\t\t\t\t[2, 2],\n\t\t\t\t\t[4, 4],\n\t\t\t\t],\n\t\t\t);\n\t\t\tconst allEntries = [...map.entries()];\n\t\t\tassert.deepEqual([...map.getRange(0, maxKey)], allEntries);\n\t\t\tassert.deepEqual([...map.getRange(-maxKey, maxKey)], allEntries);\n\t\t\tassert.deepEqual([...map.getRange(0, 2 * maxKey)], allEntries);\n\t\t\tassert.deepEqual([...map.getRange(-maxKey, 2 * maxKey)], allEntries);\n\t\t});\n\t});\n}\n\ndescribe(\"AppendOnlySortedMap\", () => {\n\trunAppendOnlyMapTests(() => new AppendOnlySortedMap(compareFiniteNumbers));\n});\n"]}
|
|
1
|
+
{"version":3,"file":"appendOnlySortedMap.spec.js","sourceRoot":"","sources":["../../src/test/appendOnlySortedMap.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\nimport { strict as assert } from \"assert\";\n\nimport { AppendOnlySortedMap } from \"../appendOnlySortedMap.js\";\nimport { compareFiniteNumbers } from \"../utilities.js\";\n\nimport { assertNotUndefined } from \"./testCommon.js\";\n\nfunction runAppendOnlyMapTests(mapBuilder: () => AppendOnlySortedMap<number, number>) {\n\tit(\"detects out-of-order keys\", () => {\n\t\tconst map = mapBuilder();\n\t\tmap.append(0, 0);\n\t\tconst exception = \"Inserted key must be > all others in the map.\";\n\t\tassert.throws(\n\t\t\t() => map.append(-1, 1),\n\t\t\t(e: Error) => e.message === exception,\n\t\t);\n\t\tmap.append(1, 2);\n\t});\n\n\tit(\"can get the min and max keys\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tassert.equal(map.maxKey(), undefined);\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i, i);\n\t\t\tassert.equal(map.maxKey(), i);\n\t\t\tassert.equal(map.minKey(), 0);\n\t\t}\n\t});\n\n\tit(\"can get the first and last pairs\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tassert.equal(map.first(), undefined);\n\t\tassert.equal(map.last(), undefined);\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i, i);\n\t\t\tassert.deepEqual(map.last(), [i, i]);\n\t\t\tassert.deepEqual(map.first(), [0, 0]);\n\t\t}\n\t});\n\n\tit(\"can get values\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i, i);\n\t\t}\n\t\tassert.equal(map.get(-1), undefined);\n\t\tassert.equal(map.get(10), undefined);\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tassert.equal(map.get(i), i);\n\t\t}\n\t});\n\n\tit(\"can get pairs by index\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i * 10, i);\n\t\t}\n\t\tassert.equal(map.getAtIndex(-1), undefined);\n\t\tassert.equal(map.getAtIndex(10), undefined);\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tassert.deepEqual(map.getAtIndex(i), [i * 10, i]);\n\t\t}\n\t});\n\n\tit(\"can get an entry or next lower by key\", () => {\n\t\t[99, 100].forEach((elementCount) => {\n\t\t\tconst map = mapBuilder();\n\t\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\t\tmap.append(i * 2, i * 2);\n\t\t\t}\n\t\t\tassert.equal(map.getPairOrNextLower(-1), undefined);\n\t\t\tfor (let i = 0; i < map.size; i++) {\n\t\t\t\tassert.deepEqual(map.getPairOrNextLower(i * 2), [i * 2, i * 2]);\n\t\t\t\tassert.deepEqual(map.getPairOrNextLower(i * 2 + 1), [i * 2, i * 2]);\n\t\t\t}\n\t\t\tconst maxKey = assertNotUndefined(map.maxKey());\n\t\t\tassert.deepEqual(map.getPairOrNextLower(maxKey + 1), [maxKey, maxKey]);\n\t\t});\n\t});\n\n\tit(\"can get an entry or next higher by key\", () => {\n\t\t[99, 100].forEach((elementCount) => {\n\t\t\tconst map = mapBuilder();\n\t\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\t\tmap.append(i * 2, i * 2);\n\t\t\t}\n\t\t\tconst minKey = assertNotUndefined(map.minKey());\n\t\t\tassert.deepEqual(map.getPairOrNextHigher(minKey - 1), [minKey, minKey]);\n\t\t\tfor (let i = 0; i < map.size - 1; i++) {\n\t\t\t\tassert.deepEqual(map.getPairOrNextHigher(i * 2), [i * 2, i * 2]);\n\t\t\t\tassert.deepEqual(map.getPairOrNextHigher(i * 2 + 1), [i * 2 + 2, i * 2 + 2]);\n\t\t\t}\n\t\t\tassert.equal(map.getPairOrNextHigher(map.size * 2 + 1), undefined);\n\t\t});\n\t});\n\n\tit(\"knows how big it is\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tassert.equal(map.size, i);\n\t\t\tmap.append(i, i);\n\t\t}\n\t\tassert.equal(map.size, elementCount);\n\t});\n\n\tit(\"can enumerate its keys and values\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tconst keys: number[] = [];\n\t\tconst values: number[] = [];\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tconst key = i;\n\t\t\tconst value = i * 2;\n\t\t\tmap.append(key, value);\n\t\t\tkeys.push(key);\n\t\t\tvalues.push(value);\n\t\t}\n\t\tassert.deepEqual([...map.keys()], keys);\n\t\tassert.deepEqual([...map.values()], values);\n\t});\n\n\tit(\"can calculate the indexOf a search element\", () => {\n\t\tconst elements: number[] = [0, 0, 2, 0, 3, 0];\n\t\tconst comparator = (search: number, key: number, value: number): number => {\n\t\t\treturn compareFiniteNumbers(search, key);\n\t\t};\n\t\tassert.equal(AppendOnlySortedMap.keyIndexOf(elements, 0, comparator), 0);\n\t\tassert.equal(AppendOnlySortedMap.keyIndexOf(elements, 2, comparator), 2);\n\t\tassert.equal(AppendOnlySortedMap.keyIndexOf(elements, 3, comparator), 4);\n\t\tassert.equal(\n\t\t\tAppendOnlySortedMap.keyIndexOf(elements, -1, comparator),\n\t\t\t0 ^ AppendOnlySortedMap.failureXor,\n\t\t);\n\t\tassert.equal(\n\t\t\tAppendOnlySortedMap.keyIndexOf(elements, 1, comparator),\n\t\t\t2 ^ AppendOnlySortedMap.failureXor,\n\t\t);\n\t\tassert.equal(\n\t\t\tAppendOnlySortedMap.keyIndexOf(elements, 10, comparator),\n\t\t\t6 ^ AppendOnlySortedMap.failureXor,\n\t\t);\n\t});\n\n\tdescribe(\"can perform range queries\", () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i * 2, i * 2);\n\t\t}\n\t\tconst maxKey = assertNotUndefined(map.maxKey());\n\n\t\tit(\"on empty ranges\", () => {\n\t\t\tassert.deepEqual([...map.getRange(1, -1)], []);\n\t\t\tassert.deepEqual([...map.getRange(maxKey + 1, maxKey + 1)], []);\n\t\t});\n\n\t\tit(\"on ranges of size 1\", () => {\n\t\t\tassert.deepEqual([...map.getRange(0, 0)], [[0, 0]]);\n\t\t\tassert.deepEqual([...map.getRange(1, 1)], []);\n\t\t\tassert.deepEqual([...map.getRange(-1, -1)], []);\n\t\t});\n\n\t\tit(\"on non-empty ranges\", () => {\n\t\t\tassert.deepEqual([...map.getRange(0, 1)], [[0, 0]]);\n\t\t\tassert.deepEqual(\n\t\t\t\t[...map.getRange(0, 2)],\n\t\t\t\t[\n\t\t\t\t\t[0, 0],\n\t\t\t\t\t[2, 2],\n\t\t\t\t],\n\t\t\t);\n\t\t\tassert.deepEqual(\n\t\t\t\t[...map.getRange(1, 5)],\n\t\t\t\t[\n\t\t\t\t\t[2, 2],\n\t\t\t\t\t[4, 4],\n\t\t\t\t],\n\t\t\t);\n\t\t\tconst allEntries = [...map.entries()];\n\t\t\tassert.deepEqual([...map.getRange(0, maxKey)], allEntries);\n\t\t\tassert.deepEqual([...map.getRange(-maxKey, maxKey)], allEntries);\n\t\t\tassert.deepEqual([...map.getRange(0, 2 * maxKey)], allEntries);\n\t\t\tassert.deepEqual([...map.getRange(-maxKey, 2 * maxKey)], allEntries);\n\t\t});\n\t});\n}\n\ndescribe(\"AppendOnlySortedMap\", () => {\n\trunAppendOnlyMapTests(() => new AppendOnlySortedMap(compareFiniteNumbers));\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idCompressor.perf.spec.js","sourceRoot":"","sources":["../../src/test/idCompressor.perf.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { benchmark, BenchmarkType } from \"@fluid-tools/benchmark\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { take } from \"@fluid-private/stochastic-test-utils\";\nimport {\n\tIdCreationRange,\n\tSerializedIdCompressorWithNoSession,\n\tOpSpaceCompressedId,\n\tSessionSpaceCompressedId,\n\tSessionId,\n\tStableId,\n} from \"..//index.js\";\nimport { IdCompressor } from \"../idCompressor.js\";\nimport { createSessionId } from \"../utilities.js\";\nimport { FinalCompressedId, LocalCompressedId, isFinalId, isLocalId, fail } from \"./testCommon.js\";\nimport {\n\tClient,\n\tDestinationClient,\n\tIdCompressorTestNetwork,\n\tbuildHugeCompressor,\n\tmakeOpGenerator,\n\tperformFuzzActions,\n\tsessionIds,\n} from \"./idCompressorTestUtilities.js\";\n\nconst initialClusterCapacity = 512;\n\ndescribe(\"IdCompressor Perf\", () => {\n\tconst type = BenchmarkType.Measurement;\n\tconst localClient = Client.Client1;\n\tconst remoteClient = Client.Client2;\n\tlet perfCompressor: IdCompressor;\n\n\tfunction setupCompressors(\n\t\tclusterSize: number,\n\t\tlocalClientCanEdit: boolean,\n\t\tsynchronizeAtEnd: boolean,\n\t): IdCompressorTestNetwork {\n\t\tconst perfNetwork = new IdCompressorTestNetwork(clusterSize);\n\t\tconst maxClusterSize = clusterSize * 2;\n\t\tconst generator = take(\n\t\t\t1000,\n\t\t\tmakeOpGenerator({\n\t\t\t\tvalidateInterval: 2000,\n\t\t\t\tmaxClusterSize,\n\t\t\t\toutsideAllocationFraction: 0.9,\n\t\t\t}),\n\t\t);\n\t\tperformFuzzActions(\n\t\t\tgenerator,\n\t\t\tperfNetwork,\n\t\t\tMath.E,\n\t\t\tlocalClientCanEdit ? undefined : localClient,\n\t\t\tsynchronizeAtEnd,\n\t\t);\n\t\tperfCompressor = perfNetwork.getCompressorUnsafeNoProxy(localClient);\n\t\treturn perfNetwork;\n\t}\n\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: false,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): LocalCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: true,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): FinalCompressedId & SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId {\n\t\tconst log = network.getIdLog(client);\n\t\tfor (let i = log.length - 1; i > 0; i--) {\n\t\t\tconst { id, originatingClient } = log[i];\n\t\t\tif (originatingClient === client) {\n\t\t\t\tif ((eagerFinal && isFinalId(id)) || (!eagerFinal && isLocalId(id))) {\n\t\t\t\t\tassert(eagerFinal === isFinalId(id), \"Not local/final as requested.\");\n\t\t\t\t\treturn id;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfail(\"no ID found in log\");\n\t}\n\n\tfunction benchmarkWithFlag(creator: (flag: boolean) => void) {\n\t\tfor (const flag of [true, false]) {\n\t\t\tcreator(flag);\n\t\t}\n\t}\n\n\tbenchmark({\n\t\ttype,\n\t\ttitle: `allocate local ID`,\n\t\tbefore: () => {\n\t\t\tsetupCompressors(initialClusterCapacity, true, true);\n\t\t},\n\t\tbenchmarkFn: () => {\n\t\t\tperfCompressor!.generateCompressedId();\n\t\t},\n\t});\n\n\tbenchmark({\n\t\ttype,\n\t\ttitle: \"take an ID creation range\",\n\t\tbefore: () => {\n\t\t\tsetupCompressors(initialClusterCapacity, true, true);\n\t\t},\n\t\tbenchmarkFn: () => {\n\t\t\tperfCompressor!.generateCompressedId();\n\t\t\tperfCompressor!.takeNextCreationRange();\n\t\t},\n\t});\n\n\tfor (const clusterSize of [1, 10, 500, 1000]) {\n\t\tconst numIds = 7;\n\t\tconst session1 = \"8150a099-5302-4672-b5f3-7a4492b59418\" as SessionId;\n\t\tconst session2 = \"f2ded886-92da-4248-967b-eb96ee04cf51\" as SessionId;\n\t\tlet session: SessionId = session1;\n\t\tlet nextFirstFinalizedGenCount1 = 1;\n\t\tlet nextFirstFinalizedGenCount2 = 1;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `finalize a range of IDs (cluster size = ${clusterSize})`,\n\t\t\tbefore: () => {\n\t\t\t\tsetupCompressors(clusterSize, false, true);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\t// Create a range with as minimal overhead as possible, as we'd like for this code to not exist\n\t\t\t\t// in the timing loop at all (but benchmark forces us to do so)\n\t\t\t\tconst isFirstClient = session === session1;\n\t\t\t\tconst firstGenCount = isFirstClient\n\t\t\t\t\t? nextFirstFinalizedGenCount1\n\t\t\t\t\t: nextFirstFinalizedGenCount2;\n\t\t\t\tconst range: IdCreationRange = {\n\t\t\t\t\tsessionId: session,\n\t\t\t\t\tids: {\n\t\t\t\t\t\tfirstGenCount,\n\t\t\t\t\t\tcount: numIds,\n\t\t\t\t\t\trequestedClusterSize: initialClusterCapacity,\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tperfCompressor!.finalizeCreationRange(range);\n\n\t\t\t\tconst lastGenCount = firstGenCount + numIds;\n\t\t\t\tif (isFirstClient) {\n\t\t\t\t\tnextFirstFinalizedGenCount1 = lastGenCount;\n\t\t\t\t} else {\n\t\t\t\t\tnextFirstFinalizedGenCount2 = lastGenCount;\n\t\t\t\t}\n\t\t\t\t// Alternate clients to sidestep optimization that packs them all into last cluster\n\t\t\t\tsession = isFirstClient ? session1 : session2;\n\t\t\t},\n\t\t});\n\t}\n\n\tbenchmarkWithFlag((isLocal) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tlet opSpaceId!: OpSpaceCompressedId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `normalize a ${\n\t\t\t\tisLocal ? \"local\" : \"final\"\n\t\t\t} ID from a remote session to session space`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tconst remoteSession = getIdMadeBy(remoteClient, false, network);\n\t\t\t\topSpaceId = (\n\t\t\t\t\tisLocal\n\t\t\t\t\t\t? remoteSession\n\t\t\t\t\t\t: network.getCompressor(remoteClient).normalizeToOpSpace(remoteSession)\n\t\t\t\t) as OpSpaceCompressedId;\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t},\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tlet id!: OpSpaceCompressedId & FinalCompressedId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `normalize a final ID corresponding to a ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from op space to the local session`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tconst opId = perfCompressor.normalizeToOpSpace(\n\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t);\n\t\t\t\tassert(isFinalId(opId), \"Must be final\");\n\t\t\t\tid = opId;\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.normalizeToSessionSpace(id, perfCompressor.localSessionId);\n\t\t\t},\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((isLocalOriginator) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tlet opSpaceId!: OpSpaceCompressedId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `normalize a final ID from a ${\n\t\t\t\tisLocalOriginator ? \"local\" : \"remote\"\n\t\t\t} session to a small session space (common case)`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, false, true);\n\t\t\t\t// Ensure the local session has several different clusters\n\t\t\t\tfor (let clusterCount = 0; clusterCount < 5; clusterCount++) {\n\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\tlocalClient,\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"],\n\t\t\t\t\t);\n\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\tremoteClient,\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"] * 2,\n\t\t\t\t\t);\n\t\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\t}\n\t\t\t\tconst client = isLocalOriginator ? localClient : remoteClient;\n\t\t\t\tconst idFromSession = getIdMadeBy(client, true, network);\n\t\t\t\topSpaceId = network.getCompressor(client).normalizeToOpSpace(idFromSession);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t},\n\t\t});\n\t});\n\n\tlet unackedLocalId!: LocalCompressedId;\n\tbenchmark({\n\t\ttype,\n\t\ttitle: `normalize an unacked local ID from the local session to op space`,\n\t\tbefore: () => {\n\t\t\tconst network = setupCompressors(initialClusterCapacity, true, false);\n\t\t\t// Ensure no eager finals\n\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\tlocalClient,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\tnetwork.getCompressor(localClient)[\"nextRequestedClusterSize\"] * 2 + 1,\n\t\t\t);\n\t\t\tunackedLocalId = getIdMadeBy(localClient, false, network);\n\t\t\tassert(\n\t\t\t\tperfCompressor.normalizeToOpSpace(unackedLocalId) === (unackedLocalId as number),\n\t\t\t\t\"Local was acked.\",\n\t\t\t);\n\t\t},\n\t\tbenchmarkFn: () => {\n\t\t\tperfCompressor!.normalizeToOpSpace(unackedLocalId);\n\t\t},\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tlet id!: SessionSpaceCompressedId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `normalize an acked ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from the local session to op space`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tid = getIdMadeBy(localClient, eagerFinal, network);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.normalizeToOpSpace(id);\n\t\t\t},\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((local) => {\n\t\tlet finalIdToDecompress!: SessionSpaceCompressedId & FinalCompressedId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `decompress a final ID from a ${\n\t\t\t\tlocal ? \"local\" : \"remote\"\n\t\t\t} client into a stable ID`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tfinalIdToDecompress = getIdMadeBy(\n\t\t\t\t\tlocal ? localClient : remoteClient,\n\t\t\t\t\ttrue,\n\t\t\t\t\tnetwork,\n\t\t\t\t);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.decompress(finalIdToDecompress);\n\t\t\t},\n\t\t});\n\t});\n\n\tlet localIdToDecompress!: LocalCompressedId;\n\tbenchmark({\n\t\ttype,\n\t\ttitle: `decompress a local ID into a stable ID`,\n\t\tbefore: () => {\n\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\tlocalIdToDecompress = getIdMadeBy(localClient, false, network);\n\t\t},\n\t\tbenchmarkFn: () => {\n\t\t\tperfCompressor!.decompress(localIdToDecompress);\n\t\t},\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tlet stableToCompress!: StableId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `recompress a stable ID to a ${eagerFinal ? \"local\" : \"final\"} ID`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tstableToCompress = perfCompressor.decompress(\n\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.recompress(stableToCompress);\n\t\t\t},\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `serialize an IdCompressor (${\n\t\t\t\tmanySessions ? \"many sessions\" : \"many clusters\"\n\t\t\t})`,\n\t\t\tbefore: () => {\n\t\t\t\tif (manySessions) {\n\t\t\t\t\tperfCompressor = buildHugeCompressor(undefined, initialClusterCapacity);\n\t\t\t\t} else {\n\t\t\t\t\tsetupCompressors(initialClusterCapacity, false, true);\n\t\t\t\t}\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.serialize(false);\n\t\t\t},\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tlet serialized!: SerializedIdCompressorWithNoSession;\n\t\tconst overrideRemoteSessionId = createSessionId();\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `deserialize an IdCompressor (${\n\t\t\t\tmanySessions ? \"many sessions\" : \"many clusters\"\n\t\t\t})`,\n\t\t\tbefore: () => {\n\t\t\t\tif (manySessions) {\n\t\t\t\t\tperfCompressor = buildHugeCompressor(undefined, initialClusterCapacity);\n\t\t\t\t} else {\n\t\t\t\t\tsetupCompressors(initialClusterCapacity, false, true);\n\t\t\t\t}\n\t\t\t\tserialized = perfCompressor.serialize(false);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tIdCompressor.deserialize(serialized, overrideRemoteSessionId);\n\t\t\t},\n\t\t});\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"idCompressor.perf.spec.js","sourceRoot":"","sources":["../../src/test/idCompressor.perf.spec.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,6DAA6D;AAE7D,gFAA4D;AAC5D,sDAAkE;AAClE,kEAA6D;AAE7D,wDAAkD;AASlD,kDAAkD;AAElD,iFAQwC;AACxC,mDAAmG;AAEnG,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,MAAM,IAAI,GAAG,yBAAa,CAAC,WAAW,CAAC;IACvC,MAAM,WAAW,GAAG,qCAAM,CAAC,OAAO,CAAC;IACnC,MAAM,YAAY,GAAG,qCAAM,CAAC,OAAO,CAAC;IACpC,IAAI,cAA4B,CAAC;IAEjC,SAAS,gBAAgB,CACxB,WAAmB,EACnB,kBAA2B,EAC3B,gBAAyB;QAEzB,MAAM,WAAW,GAAG,IAAI,sDAAuB,CAAC,WAAW,CAAC,CAAC;QAC7D,MAAM,cAAc,GAAG,WAAW,GAAG,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,IAAA,4BAAI,EACrB,IAAI,EACJ,IAAA,8CAAe,EAAC;YACf,gBAAgB,EAAE,IAAI;YACtB,cAAc;YACd,yBAAyB,EAAE,GAAG;SAC9B,CAAC,CACF,CAAC;QACF,IAAA,iDAAkB,EACjB,SAAS,EACT,WAAW,EACX,IAAI,CAAC,CAAC,EACN,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAC5C,gBAAgB,CAChB,CAAC;QACF,cAAc,GAAG,WAAW,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;QACrE,OAAO,WAAW,CAAC;IACpB,CAAC;IAiBD,SAAS,WAAW,CACnB,MAAc,EACd,UAAmB,EACnB,OAAgC;QAEhC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,iBAAiB,KAAK,MAAM,EAAE;gBACjC,IAAI,CAAC,UAAU,IAAI,IAAA,yBAAS,EAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,IAAA,yBAAS,EAAC,EAAE,CAAC,CAAC,EAAE;oBACpE,IAAA,iBAAM,EAAC,UAAU,KAAK,IAAA,yBAAS,EAAC,EAAE,CAAC,EAAE,+BAA+B,CAAC,CAAC;oBACtE,OAAO,EAAE,CAAC;iBACV;aACD;SACD;QACD,IAAA,oBAAI,EAAC,oBAAoB,CAAC,CAAC;IAC5B,CAAC;IAED,SAAS,iBAAiB,CAAC,OAAgC;QAC1D,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC;SACd;IACF,CAAC;IAED,IAAA,qBAAS,EAAC;QACT,IAAI;QACJ,KAAK,EAAE,mBAAmB;QAC1B,MAAM,EAAE,GAAG,EAAE;YACZ,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,WAAW,EAAE,GAAG,EAAE;YACjB,cAAe,CAAC,oBAAoB,EAAE,CAAC;QACxC,CAAC;KACD,CAAC,CAAC;IAEH,IAAA,qBAAS,EAAC;QACT,IAAI;QACJ,KAAK,EAAE,2BAA2B;QAClC,MAAM,EAAE,GAAG,EAAE;YACZ,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,WAAW,EAAE,GAAG,EAAE;YACjB,cAAe,CAAC,oBAAoB,EAAE,CAAC;YACvC,cAAe,CAAC,qBAAqB,EAAE,CAAC;QACzC,CAAC;KACD,CAAC,CAAC;IAEH,KAAK,MAAM,WAAW,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE;QAC7C,MAAM,MAAM,GAAG,CAAC,CAAC;QACjB,MAAM,QAAQ,GAAG,sCAAmD,CAAC;QACrE,MAAM,QAAQ,GAAG,sCAAmD,CAAC;QACrE,IAAI,OAAO,GAAc,QAAQ,CAAC;QAClC,IAAI,2BAA2B,GAAG,CAAC,CAAC;QACpC,IAAI,2BAA2B,GAAG,CAAC,CAAC;QACpC,IAAA,qBAAS,EAAC;YACT,IAAI;YACJ,KAAK,EAAE,2CAA2C,WAAW,GAAG;YAChE,MAAM,EAAE,GAAG,EAAE;gBACZ,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5C,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,+FAA+F;gBAC/F,+DAA+D;gBAC/D,MAAM,aAAa,GAAG,OAAO,KAAK,QAAQ,CAAC;gBAC3C,MAAM,aAAa,GAAG,aAAa;oBAClC,CAAC,CAAC,2BAA2B;oBAC7B,CAAC,CAAC,2BAA2B,CAAC;gBAC/B,MAAM,KAAK,GAAoB;oBAC9B,SAAS,EAAE,OAAO;oBAClB,GAAG,EAAE;wBACJ,aAAa;wBACb,KAAK,EAAE,MAAM;wBACb,oBAAoB,EAAE,sBAAsB;wBAC5C,aAAa,EAAE,EAAE,EAAE,sFAAsF;qBACzG;iBACD,CAAC;gBAEF,cAAe,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAE7C,MAAM,YAAY,GAAG,aAAa,GAAG,MAAM,CAAC;gBAC5C,IAAI,aAAa,EAAE;oBAClB,2BAA2B,GAAG,YAAY,CAAC;iBAC3C;qBAAM;oBACN,2BAA2B,GAAG,YAAY,CAAC;iBAC3C;gBACD,mFAAmF;gBACnF,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC/C,CAAC;SACD,CAAC,CAAC;KACH;IAED,iBAAiB,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,eAAe,GAAG,yCAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,SAA+B,CAAC;QACpC,IAAA,qBAAS,EAAC;YACT,IAAI;YACJ,KAAK,EAAE,eACN,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OACrB,4CAA4C;YAC5C,MAAM,EAAE,GAAG,EAAE;gBACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBAChE,SAAS,GAAG,CACX,OAAO;oBACN,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CACjD,CAAC;YAC1B,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,cAAe,CAAC,uBAAuB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YACrE,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,iBAAiB,CAAC,CAAC,UAAU,EAAE,EAAE;QAChC,IAAI,EAA4C,CAAC;QACjD,IAAA,qBAAS,EAAC;YACT,IAAI;YACJ,KAAK,EAAE,2CACN,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAC9B,wCAAwC;YACxC,MAAM,EAAE,GAAG,EAAE;gBACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrE,MAAM,IAAI,GAAG,cAAc,CAAC,kBAAkB,CAC7C,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAC7C,CAAC;gBACF,IAAA,iBAAM,EAAC,IAAA,yBAAS,EAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC;gBACzC,EAAE,GAAG,IAAI,CAAC;YACX,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,cAAe,CAAC,uBAAuB,CAAC,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;YAC5E,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,iBAAiB,CAAC,CAAC,iBAAiB,EAAE,EAAE;QACvC,MAAM,eAAe,GAAG,yCAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,SAA+B,CAAC;QACpC,IAAA,qBAAS,EAAC;YACT,IAAI;YACJ,KAAK,EAAE,+BACN,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAC/B,iDAAiD;YACjD,MAAM,EAAE,GAAG,EAAE;gBACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBACtE,0DAA0D;gBAC1D,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,YAAY,EAAE,EAAE;oBAC5D,OAAO,CAAC,kBAAkB,CACzB,WAAW;oBACX,2DAA2D;oBAC3D,cAAc,CAAC,0BAA0B,CAAC,CAC1C,CAAC;oBACF,OAAO,CAAC,kBAAkB,CACzB,YAAY;oBACZ,2DAA2D;oBAC3D,cAAc,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAC9C,CAAC;oBACF,OAAO,CAAC,iBAAiB,CAAC,gDAAiB,CAAC,GAAG,CAAC,CAAC;iBACjD;gBACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;gBAC9D,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBACzD,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAC7E,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,cAAe,CAAC,uBAAuB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YACrE,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,cAAkC,CAAC;IACvC,IAAA,qBAAS,EAAC;QACT,IAAI;QACJ,KAAK,EAAE,kEAAkE;QACzE,MAAM,EAAE,GAAG,EAAE;YACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACtE,yBAAyB;YACzB,OAAO,CAAC,kBAAkB,CACzB,WAAW;YACX,2DAA2D;YAC3D,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CACtE,CAAC;YACF,cAAc,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAC1D,IAAA,iBAAM,EACL,cAAc,CAAC,kBAAkB,CAAC,cAAc,CAAC,KAAM,cAAyB,EAChF,kBAAkB,CAClB,CAAC;QACH,CAAC;QACD,WAAW,EAAE,GAAG,EAAE;YACjB,cAAe,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;KACD,CAAC,CAAC;IAEH,iBAAiB,CAAC,CAAC,UAAU,EAAE,EAAE;QAChC,IAAI,EAA6B,CAAC;QAClC,IAAA,qBAAS,EAAC;YACT,IAAI;YACJ,KAAK,EAAE,sBACN,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAC9B,wCAAwC;YACxC,MAAM,EAAE,GAAG,EAAE;gBACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrE,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACpD,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,cAAe,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,iBAAiB,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,IAAI,mBAAkE,CAAC;QACvE,IAAA,qBAAS,EAAC;YACT,IAAI;YACJ,KAAK,EAAE,gCACN,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QACnB,0BAA0B;YAC1B,MAAM,EAAE,GAAG,EAAE;gBACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrE,mBAAmB,GAAG,WAAW,CAChC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,EAClC,IAAI,EACJ,OAAO,CACP,CAAC;YACH,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,cAAe,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACjD,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,mBAAuC,CAAC;IAC5C,IAAA,qBAAS,EAAC;QACT,IAAI;QACJ,KAAK,EAAE,wCAAwC;QAC/C,MAAM,EAAE,GAAG,EAAE;YACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACrE,mBAAmB,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QACD,WAAW,EAAE,GAAG,EAAE;YACjB,cAAe,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACjD,CAAC;KACD,CAAC,CAAC;IAEH,iBAAiB,CAAC,CAAC,UAAU,EAAE,EAAE;QAChC,IAAI,gBAA2B,CAAC;QAChC,IAAA,qBAAS,EAAC;YACT,IAAI;YACJ,KAAK,EAAE,+BAA+B,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK;YACzE,MAAM,EAAE,GAAG,EAAE;gBACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrE,gBAAgB,GAAG,cAAc,CAAC,UAAU,CAC3C,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAC7C,CAAC;YACH,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,cAAe,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;YAC9C,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,iBAAiB,CAAC,CAAC,YAAY,EAAE,EAAE;QAClC,IAAA,qBAAS,EAAC;YACT,IAAI;YACJ,KAAK,EAAE,8BACN,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAClC,GAAG;YACH,MAAM,EAAE,GAAG,EAAE;gBACZ,IAAI,YAAY,EAAE;oBACjB,cAAc,GAAG,IAAA,kDAAmB,EAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;iBACxE;qBAAM;oBACN,gBAAgB,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;iBACtD;YACF,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,cAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,iBAAiB,CAAC,CAAC,YAAY,EAAE,EAAE;QAClC,IAAI,UAAgD,CAAC;QACrD,MAAM,uBAAuB,GAAG,IAAA,8BAAe,GAAE,CAAC;QAClD,IAAA,qBAAS,EAAC;YACT,IAAI;YACJ,KAAK,EAAE,gCACN,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAClC,GAAG;YACH,MAAM,EAAE,GAAG,EAAE;gBACZ,IAAI,YAAY,EAAE;oBACjB,cAAc,GAAG,IAAA,kDAAmB,EAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;iBACxE;qBAAM;oBACN,gBAAgB,CAAC,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;iBACtD;gBACD,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,8BAAY,CAAC,WAAW,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;YAC/D,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\nimport { take } from \"@fluid-private/stochastic-test-utils\";\nimport { BenchmarkType, benchmark } from \"@fluid-tools/benchmark\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport { IdCompressor } from \"../idCompressor.js\";\nimport {\n\tIdCreationRange,\n\tOpSpaceCompressedId,\n\tSerializedIdCompressorWithNoSession,\n\tSessionId,\n\tSessionSpaceCompressedId,\n\tStableId,\n} from \"../index.js\";\nimport { createSessionId } from \"../utilities.js\";\n\nimport {\n\tClient,\n\tDestinationClient,\n\tIdCompressorTestNetwork,\n\tbuildHugeCompressor,\n\tmakeOpGenerator,\n\tperformFuzzActions,\n\tsessionIds,\n} from \"./idCompressorTestUtilities.js\";\nimport { FinalCompressedId, LocalCompressedId, fail, isFinalId, isLocalId } from \"./testCommon.js\";\n\nconst initialClusterCapacity = 512;\n\ndescribe(\"IdCompressor Perf\", () => {\n\tconst type = BenchmarkType.Measurement;\n\tconst localClient = Client.Client1;\n\tconst remoteClient = Client.Client2;\n\tlet perfCompressor: IdCompressor;\n\n\tfunction setupCompressors(\n\t\tclusterSize: number,\n\t\tlocalClientCanEdit: boolean,\n\t\tsynchronizeAtEnd: boolean,\n\t): IdCompressorTestNetwork {\n\t\tconst perfNetwork = new IdCompressorTestNetwork(clusterSize);\n\t\tconst maxClusterSize = clusterSize * 2;\n\t\tconst generator = take(\n\t\t\t1000,\n\t\t\tmakeOpGenerator({\n\t\t\t\tvalidateInterval: 2000,\n\t\t\t\tmaxClusterSize,\n\t\t\t\toutsideAllocationFraction: 0.9,\n\t\t\t}),\n\t\t);\n\t\tperformFuzzActions(\n\t\t\tgenerator,\n\t\t\tperfNetwork,\n\t\t\tMath.E,\n\t\t\tlocalClientCanEdit ? undefined : localClient,\n\t\t\tsynchronizeAtEnd,\n\t\t);\n\t\tperfCompressor = perfNetwork.getCompressorUnsafeNoProxy(localClient);\n\t\treturn perfNetwork;\n\t}\n\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: false,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): LocalCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: true,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): FinalCompressedId & SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId;\n\tfunction getIdMadeBy(\n\t\tclient: Client,\n\t\teagerFinal: boolean,\n\t\tnetwork: IdCompressorTestNetwork,\n\t): SessionSpaceCompressedId {\n\t\tconst log = network.getIdLog(client);\n\t\tfor (let i = log.length - 1; i > 0; i--) {\n\t\t\tconst { id, originatingClient } = log[i];\n\t\t\tif (originatingClient === client) {\n\t\t\t\tif ((eagerFinal && isFinalId(id)) || (!eagerFinal && isLocalId(id))) {\n\t\t\t\t\tassert(eagerFinal === isFinalId(id), \"Not local/final as requested.\");\n\t\t\t\t\treturn id;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfail(\"no ID found in log\");\n\t}\n\n\tfunction benchmarkWithFlag(creator: (flag: boolean) => void) {\n\t\tfor (const flag of [true, false]) {\n\t\t\tcreator(flag);\n\t\t}\n\t}\n\n\tbenchmark({\n\t\ttype,\n\t\ttitle: `allocate local ID`,\n\t\tbefore: () => {\n\t\t\tsetupCompressors(initialClusterCapacity, true, true);\n\t\t},\n\t\tbenchmarkFn: () => {\n\t\t\tperfCompressor!.generateCompressedId();\n\t\t},\n\t});\n\n\tbenchmark({\n\t\ttype,\n\t\ttitle: \"take an ID creation range\",\n\t\tbefore: () => {\n\t\t\tsetupCompressors(initialClusterCapacity, true, true);\n\t\t},\n\t\tbenchmarkFn: () => {\n\t\t\tperfCompressor!.generateCompressedId();\n\t\t\tperfCompressor!.takeNextCreationRange();\n\t\t},\n\t});\n\n\tfor (const clusterSize of [1, 10, 500, 1000]) {\n\t\tconst numIds = 7;\n\t\tconst session1 = \"8150a099-5302-4672-b5f3-7a4492b59418\" as SessionId;\n\t\tconst session2 = \"f2ded886-92da-4248-967b-eb96ee04cf51\" as SessionId;\n\t\tlet session: SessionId = session1;\n\t\tlet nextFirstFinalizedGenCount1 = 1;\n\t\tlet nextFirstFinalizedGenCount2 = 1;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `finalize a range of IDs (cluster size = ${clusterSize})`,\n\t\t\tbefore: () => {\n\t\t\t\tsetupCompressors(clusterSize, false, true);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\t// Create a range with as minimal overhead as possible, as we'd like for this code to not exist\n\t\t\t\t// in the timing loop at all (but benchmark forces us to do so)\n\t\t\t\tconst isFirstClient = session === session1;\n\t\t\t\tconst firstGenCount = isFirstClient\n\t\t\t\t\t? nextFirstFinalizedGenCount1\n\t\t\t\t\t: nextFirstFinalizedGenCount2;\n\t\t\t\tconst range: IdCreationRange = {\n\t\t\t\t\tsessionId: session,\n\t\t\t\t\tids: {\n\t\t\t\t\t\tfirstGenCount,\n\t\t\t\t\t\tcount: numIds,\n\t\t\t\t\t\trequestedClusterSize: initialClusterCapacity,\n\t\t\t\t\t\tlocalIdRanges: [], // no need to populate, as session is remote and compressor would ignore in production\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tperfCompressor!.finalizeCreationRange(range);\n\n\t\t\t\tconst lastGenCount = firstGenCount + numIds;\n\t\t\t\tif (isFirstClient) {\n\t\t\t\t\tnextFirstFinalizedGenCount1 = lastGenCount;\n\t\t\t\t} else {\n\t\t\t\t\tnextFirstFinalizedGenCount2 = lastGenCount;\n\t\t\t\t}\n\t\t\t\t// Alternate clients to sidestep optimization that packs them all into last cluster\n\t\t\t\tsession = isFirstClient ? session1 : session2;\n\t\t\t},\n\t\t});\n\t}\n\n\tbenchmarkWithFlag((isLocal) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tlet opSpaceId!: OpSpaceCompressedId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `normalize a ${\n\t\t\t\tisLocal ? \"local\" : \"final\"\n\t\t\t} ID from a remote session to session space`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tconst remoteSession = getIdMadeBy(remoteClient, false, network);\n\t\t\t\topSpaceId = (\n\t\t\t\t\tisLocal\n\t\t\t\t\t\t? remoteSession\n\t\t\t\t\t\t: network.getCompressor(remoteClient).normalizeToOpSpace(remoteSession)\n\t\t\t\t) as OpSpaceCompressedId;\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t},\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tlet id!: OpSpaceCompressedId & FinalCompressedId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `normalize a final ID corresponding to a ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from op space to the local session`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tconst opId = perfCompressor.normalizeToOpSpace(\n\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t);\n\t\t\t\tassert(isFinalId(opId), \"Must be final\");\n\t\t\t\tid = opId;\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.normalizeToSessionSpace(id, perfCompressor.localSessionId);\n\t\t\t},\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((isLocalOriginator) => {\n\t\tconst remoteSessionId = sessionIds.get(remoteClient);\n\t\tlet opSpaceId!: OpSpaceCompressedId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `normalize a final ID from a ${\n\t\t\t\tisLocalOriginator ? \"local\" : \"remote\"\n\t\t\t} session to a small session space (common case)`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, false, true);\n\t\t\t\t// Ensure the local session has several different clusters\n\t\t\t\tfor (let clusterCount = 0; clusterCount < 5; clusterCount++) {\n\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\tlocalClient,\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"],\n\t\t\t\t\t);\n\t\t\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\t\t\tremoteClient,\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\t\t\tperfCompressor[\"nextRequestedClusterSize\"] * 2,\n\t\t\t\t\t);\n\t\t\t\t\tnetwork.deliverOperations(DestinationClient.All);\n\t\t\t\t}\n\t\t\t\tconst client = isLocalOriginator ? localClient : remoteClient;\n\t\t\t\tconst idFromSession = getIdMadeBy(client, true, network);\n\t\t\t\topSpaceId = network.getCompressor(client).normalizeToOpSpace(idFromSession);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.normalizeToSessionSpace(opSpaceId, remoteSessionId);\n\t\t\t},\n\t\t});\n\t});\n\n\tlet unackedLocalId!: LocalCompressedId;\n\tbenchmark({\n\t\ttype,\n\t\ttitle: `normalize an unacked local ID from the local session to op space`,\n\t\tbefore: () => {\n\t\t\tconst network = setupCompressors(initialClusterCapacity, true, false);\n\t\t\t// Ensure no eager finals\n\t\t\tnetwork.allocateAndSendIds(\n\t\t\t\tlocalClient,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/dot-notation\n\t\t\t\tnetwork.getCompressor(localClient)[\"nextRequestedClusterSize\"] * 2 + 1,\n\t\t\t);\n\t\t\tunackedLocalId = getIdMadeBy(localClient, false, network);\n\t\t\tassert(\n\t\t\t\tperfCompressor.normalizeToOpSpace(unackedLocalId) === (unackedLocalId as number),\n\t\t\t\t\"Local was acked.\",\n\t\t\t);\n\t\t},\n\t\tbenchmarkFn: () => {\n\t\t\tperfCompressor!.normalizeToOpSpace(unackedLocalId);\n\t\t},\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tlet id!: SessionSpaceCompressedId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `normalize an acked ${\n\t\t\t\teagerFinal ? \"eager final\" : \"local\"\n\t\t\t} ID from the local session to op space`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tid = getIdMadeBy(localClient, eagerFinal, network);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.normalizeToOpSpace(id);\n\t\t\t},\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((local) => {\n\t\tlet finalIdToDecompress!: SessionSpaceCompressedId & FinalCompressedId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `decompress a final ID from a ${\n\t\t\t\tlocal ? \"local\" : \"remote\"\n\t\t\t} client into a stable ID`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tfinalIdToDecompress = getIdMadeBy(\n\t\t\t\t\tlocal ? localClient : remoteClient,\n\t\t\t\t\ttrue,\n\t\t\t\t\tnetwork,\n\t\t\t\t);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.decompress(finalIdToDecompress);\n\t\t\t},\n\t\t});\n\t});\n\n\tlet localIdToDecompress!: LocalCompressedId;\n\tbenchmark({\n\t\ttype,\n\t\ttitle: `decompress a local ID into a stable ID`,\n\t\tbefore: () => {\n\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\tlocalIdToDecompress = getIdMadeBy(localClient, false, network);\n\t\t},\n\t\tbenchmarkFn: () => {\n\t\t\tperfCompressor!.decompress(localIdToDecompress);\n\t\t},\n\t});\n\n\tbenchmarkWithFlag((eagerFinal) => {\n\t\tlet stableToCompress!: StableId;\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `recompress a stable ID to a ${eagerFinal ? \"local\" : \"final\"} ID`,\n\t\t\tbefore: () => {\n\t\t\t\tconst network = setupCompressors(initialClusterCapacity, true, true);\n\t\t\t\tstableToCompress = perfCompressor.decompress(\n\t\t\t\t\tgetIdMadeBy(localClient, eagerFinal, network),\n\t\t\t\t);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.recompress(stableToCompress);\n\t\t\t},\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `serialize an IdCompressor (${\n\t\t\t\tmanySessions ? \"many sessions\" : \"many clusters\"\n\t\t\t})`,\n\t\t\tbefore: () => {\n\t\t\t\tif (manySessions) {\n\t\t\t\t\tperfCompressor = buildHugeCompressor(undefined, initialClusterCapacity);\n\t\t\t\t} else {\n\t\t\t\t\tsetupCompressors(initialClusterCapacity, false, true);\n\t\t\t\t}\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tperfCompressor!.serialize(false);\n\t\t\t},\n\t\t});\n\t});\n\n\tbenchmarkWithFlag((manySessions) => {\n\t\tlet serialized!: SerializedIdCompressorWithNoSession;\n\t\tconst overrideRemoteSessionId = createSessionId();\n\t\tbenchmark({\n\t\t\ttype,\n\t\t\ttitle: `deserialize an IdCompressor (${\n\t\t\t\tmanySessions ? \"many sessions\" : \"many clusters\"\n\t\t\t})`,\n\t\t\tbefore: () => {\n\t\t\t\tif (manySessions) {\n\t\t\t\t\tperfCompressor = buildHugeCompressor(undefined, initialClusterCapacity);\n\t\t\t\t} else {\n\t\t\t\t\tsetupCompressors(initialClusterCapacity, false, true);\n\t\t\t\t}\n\t\t\t\tserialized = perfCompressor.serialize(false);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tIdCompressor.deserialize(serialized, overrideRemoteSessionId);\n\t\t\t},\n\t\t});\n\t});\n});\n"]}
|