@fluid-experimental/tree 0.59.2001 → 0.59.3000
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/.eslintrc.js +2 -0
- package/.vscode/SharedTree.code-workspace +15 -0
- package/.vscode/settings.json +6 -0
- package/dist/ChangeCompression.js +9 -9
- package/dist/ChangeCompression.js.map +1 -1
- package/dist/ChangeTypes.d.ts +1 -6
- package/dist/ChangeTypes.d.ts.map +1 -1
- package/dist/ChangeTypes.js +5 -5
- package/dist/ChangeTypes.js.map +1 -1
- package/dist/Checkout.js +14 -14
- package/dist/Checkout.js.map +1 -1
- package/dist/Common.d.ts +21 -3
- package/dist/Common.d.ts.map +1 -1
- package/dist/Common.js +29 -4
- package/dist/Common.js.map +1 -1
- package/dist/EditLog.js +26 -25
- package/dist/EditLog.js.map +1 -1
- package/dist/EditUtilities.js +17 -17
- package/dist/EditUtilities.js.map +1 -1
- package/dist/Forest.js +31 -31
- package/dist/Forest.js.map +1 -1
- package/dist/HistoryEditFactory.js +9 -9
- package/dist/HistoryEditFactory.js.map +1 -1
- package/dist/IdConversion.js +9 -9
- package/dist/IdConversion.js.map +1 -1
- package/dist/Identifiers.d.ts +4 -0
- package/dist/Identifiers.d.ts.map +1 -1
- package/dist/Identifiers.js.map +1 -1
- package/dist/LogViewer.d.ts +1 -5
- package/dist/LogViewer.d.ts.map +1 -1
- package/dist/LogViewer.js +11 -19
- package/dist/LogViewer.js.map +1 -1
- package/dist/MergeHealth.js +2 -2
- package/dist/MergeHealth.js.map +1 -1
- package/dist/NodeIdUtilities.js +2 -2
- package/dist/NodeIdUtilities.js.map +1 -1
- package/dist/PayloadUtilities.js +1 -1
- package/dist/PayloadUtilities.js.map +1 -1
- package/dist/RevisionValueCache.d.ts +13 -10
- package/dist/RevisionValueCache.d.ts.map +1 -1
- package/dist/RevisionValueCache.js +14 -11
- package/dist/RevisionValueCache.js.map +1 -1
- package/dist/RevisionView.js +4 -4
- package/dist/RevisionView.js.map +1 -1
- package/dist/SerializationUtilities.js +4 -4
- package/dist/SerializationUtilities.js.map +1 -1
- package/dist/SharedTree.d.ts +93 -31
- package/dist/SharedTree.d.ts.map +1 -1
- package/dist/SharedTree.js +160 -131
- package/dist/SharedTree.js.map +1 -1
- package/dist/SharedTreeEncoder.d.ts +3 -3
- package/dist/SharedTreeEncoder.d.ts.map +1 -1
- package/dist/SharedTreeEncoder.js +36 -36
- package/dist/SharedTreeEncoder.js.map +1 -1
- package/dist/StringInterner.js +1 -1
- package/dist/StringInterner.js.map +1 -1
- package/dist/Summary.js +1 -1
- package/dist/Summary.js.map +1 -1
- package/dist/SummaryBackCompatibility.js +8 -8
- package/dist/SummaryBackCompatibility.js.map +1 -1
- package/dist/Transaction.js +1 -1
- package/dist/Transaction.js.map +1 -1
- package/dist/TransactionInternal.js +17 -17
- package/dist/TransactionInternal.js.map +1 -1
- package/dist/TreeCompressor.d.ts.map +1 -1
- package/dist/TreeCompressor.js +6 -8
- package/dist/TreeCompressor.js.map +1 -1
- package/dist/TreeNodeHandle.js +4 -4
- package/dist/TreeNodeHandle.js.map +1 -1
- package/dist/TreeView.js +7 -7
- package/dist/TreeView.js.map +1 -1
- package/dist/TreeViewUtilities.js +2 -2
- package/dist/TreeViewUtilities.js.map +1 -1
- package/dist/UndoRedoHandler.js +1 -1
- package/dist/UndoRedoHandler.js.map +1 -1
- package/dist/UuidUtilities.d.ts +30 -0
- package/dist/UuidUtilities.d.ts.map +1 -0
- package/dist/UuidUtilities.js +106 -0
- package/dist/UuidUtilities.js.map +1 -0
- package/dist/id-compressor/AppendOnlySortedMap.d.ts +52 -28
- package/dist/id-compressor/AppendOnlySortedMap.d.ts.map +1 -1
- package/dist/id-compressor/AppendOnlySortedMap.js +167 -90
- package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -1
- package/dist/id-compressor/IdCompressor.d.ts +43 -42
- package/dist/id-compressor/IdCompressor.d.ts.map +1 -1
- package/dist/id-compressor/IdCompressor.js +179 -177
- package/dist/id-compressor/IdCompressor.js.map +1 -1
- package/dist/id-compressor/IdRange.js +1 -1
- package/dist/id-compressor/IdRange.js.map +1 -1
- package/dist/id-compressor/NumericUuid.d.ts +6 -14
- package/dist/id-compressor/NumericUuid.d.ts.map +1 -1
- package/dist/id-compressor/NumericUuid.js +15 -76
- package/dist/id-compressor/NumericUuid.js.map +1 -1
- package/dist/id-compressor/SessionIdNormalizer.d.ts +122 -0
- package/dist/id-compressor/SessionIdNormalizer.d.ts.map +1 -0
- package/dist/id-compressor/SessionIdNormalizer.js +418 -0
- package/dist/id-compressor/SessionIdNormalizer.js.map +1 -0
- package/dist/id-compressor/persisted-types/0.0.1.d.ts +6 -13
- package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -1
- package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/persisted-types/0.1.1.d.ts +1 -6
- package/dist/persisted-types/0.1.1.d.ts.map +1 -1
- package/dist/persisted-types/0.1.1.js +3 -3
- package/dist/persisted-types/0.1.1.js.map +1 -1
- package/lib/ChangeTypes.d.ts +1 -6
- package/lib/ChangeTypes.d.ts.map +1 -1
- package/lib/Checkout.js.map +1 -1
- package/lib/Common.d.ts +21 -3
- package/lib/Common.d.ts.map +1 -1
- package/lib/Common.js +25 -3
- package/lib/Common.js.map +1 -1
- package/lib/EditLog.js +2 -1
- package/lib/EditLog.js.map +1 -1
- package/lib/EditUtilities.js.map +1 -1
- package/lib/Forest.js.map +1 -1
- package/lib/HistoryEditFactory.js.map +1 -1
- package/lib/Identifiers.d.ts +4 -0
- package/lib/Identifiers.d.ts.map +1 -1
- package/lib/Identifiers.js.map +1 -1
- package/lib/LogViewer.d.ts +1 -5
- package/lib/LogViewer.d.ts.map +1 -1
- package/lib/LogViewer.js +5 -13
- package/lib/LogViewer.js.map +1 -1
- package/lib/MergeHealth.js.map +1 -1
- package/lib/NodeIdUtilities.js.map +1 -1
- package/lib/RevisionValueCache.d.ts +13 -10
- package/lib/RevisionValueCache.d.ts.map +1 -1
- package/lib/RevisionValueCache.js +10 -7
- package/lib/RevisionValueCache.js.map +1 -1
- package/lib/RevisionView.js.map +1 -1
- package/lib/SharedTree.d.ts +93 -31
- package/lib/SharedTree.d.ts.map +1 -1
- package/lib/SharedTree.js +107 -78
- package/lib/SharedTree.js.map +1 -1
- package/lib/SharedTreeEncoder.d.ts +3 -3
- package/lib/SharedTreeEncoder.d.ts.map +1 -1
- package/lib/SharedTreeEncoder.js +4 -4
- package/lib/SharedTreeEncoder.js.map +1 -1
- package/lib/StringInterner.js.map +1 -1
- package/lib/Summary.js.map +1 -1
- package/lib/TreeCompressor.d.ts.map +1 -1
- package/lib/TreeCompressor.js +1 -3
- package/lib/TreeCompressor.js.map +1 -1
- package/lib/TreeNodeHandle.js.map +1 -1
- package/lib/TreeView.js.map +1 -1
- package/lib/TreeViewUtilities.js.map +1 -1
- package/lib/UuidUtilities.d.ts +30 -0
- package/lib/UuidUtilities.d.ts.map +1 -0
- package/lib/UuidUtilities.js +98 -0
- package/lib/UuidUtilities.js.map +1 -0
- package/lib/id-compressor/AppendOnlySortedMap.d.ts +52 -28
- package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -1
- package/lib/id-compressor/AppendOnlySortedMap.js +165 -88
- package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -1
- package/lib/id-compressor/IdCompressor.d.ts +43 -42
- package/lib/id-compressor/IdCompressor.d.ts.map +1 -1
- package/lib/id-compressor/IdCompressor.js +97 -95
- package/lib/id-compressor/IdCompressor.js.map +1 -1
- package/lib/id-compressor/NumericUuid.d.ts +6 -14
- package/lib/id-compressor/NumericUuid.d.ts.map +1 -1
- package/lib/id-compressor/NumericUuid.js +11 -70
- package/lib/id-compressor/NumericUuid.js.map +1 -1
- package/lib/id-compressor/SessionIdNormalizer.d.ts +122 -0
- package/lib/id-compressor/SessionIdNormalizer.d.ts.map +1 -0
- package/lib/id-compressor/SessionIdNormalizer.js +414 -0
- package/lib/id-compressor/SessionIdNormalizer.js.map +1 -0
- package/lib/id-compressor/persisted-types/0.0.1.d.ts +6 -13
- package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -1
- package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/persisted-types/0.1.1.d.ts +1 -6
- package/lib/persisted-types/0.1.1.d.ts.map +1 -1
- package/lib/persisted-types/0.1.1.js.map +1 -1
- package/lib/test/AppendOnlySortedMap.perf.tests.d.ts +6 -0
- package/lib/test/AppendOnlySortedMap.perf.tests.d.ts.map +1 -0
- package/lib/test/AppendOnlySortedMap.perf.tests.js +49 -0
- package/lib/test/AppendOnlySortedMap.perf.tests.js.map +1 -0
- package/lib/test/AppendOnlySortedMap.tests.js +56 -14
- package/lib/test/AppendOnlySortedMap.tests.js.map +1 -1
- package/lib/test/Checkout.tests.js +2 -2
- package/lib/test/Checkout.tests.js.map +1 -1
- package/lib/test/Forest.tests.js.map +1 -1
- package/lib/test/IdCompressor.perf.tests.js +8 -2
- package/lib/test/IdCompressor.perf.tests.js.map +1 -1
- package/lib/test/IdCompressor.tests.js +75 -24
- package/lib/test/IdCompressor.tests.js.map +1 -1
- package/lib/test/LogViewer.tests.js +3 -5
- package/lib/test/LogViewer.tests.js.map +1 -1
- package/lib/test/NumericUuid.perf.tests.js +4 -4
- package/lib/test/NumericUuid.perf.tests.js.map +1 -1
- package/lib/test/NumericUuid.tests.js +5 -4
- package/lib/test/NumericUuid.tests.js.map +1 -1
- package/lib/test/RevisionValueCache.tests.js.map +1 -1
- package/lib/test/RevisionView.tests.js.map +1 -1
- package/lib/test/SessionIdNormalizer.tests.d.ts +6 -0
- package/lib/test/SessionIdNormalizer.tests.d.ts.map +1 -0
- package/lib/test/SessionIdNormalizer.tests.js +299 -0
- package/lib/test/SessionIdNormalizer.tests.js.map +1 -0
- package/lib/test/Summary.tests.js +1 -1
- package/lib/test/Summary.tests.js.map +1 -1
- package/lib/test/TreeCompression.tests.js +1 -1
- package/lib/test/TreeCompression.tests.js.map +1 -1
- package/lib/test/Virtualization.tests.js +1 -1
- package/lib/test/Virtualization.tests.js.map +1 -1
- package/lib/test/fuzz/Generators.d.ts +3 -14
- package/lib/test/fuzz/Generators.d.ts.map +1 -1
- package/lib/test/fuzz/Generators.js +60 -151
- package/lib/test/fuzz/Generators.js.map +1 -1
- package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +10 -7
- package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -1
- package/lib/test/fuzz/SharedTreeFuzzTests.js +94 -104
- package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -1
- package/lib/test/fuzz/Types.d.ts +2 -9
- package/lib/test/fuzz/Types.d.ts.map +1 -1
- package/lib/test/fuzz/Types.js +1 -1
- package/lib/test/fuzz/Types.js.map +1 -1
- package/lib/test/utilities/IdCompressorTestUtilities.d.ts +57 -11
- package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -1
- package/lib/test/utilities/IdCompressorTestUtilities.js +112 -98
- package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -1
- package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -1
- package/lib/test/utilities/PendingLocalStateTests.js +2 -1
- package/lib/test/utilities/PendingLocalStateTests.js.map +1 -1
- package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
- package/lib/test/utilities/SharedTreeTests.js +30 -1
- package/lib/test/utilities/SharedTreeTests.js.map +1 -1
- package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -1
- package/lib/test/utilities/SharedTreeVersioningTests.js +20 -0
- package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -1
- package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -1
- package/lib/test/utilities/SummaryLoadPerfTests.js +6 -3
- package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -1
- package/lib/test/utilities/TestNode.js.map +1 -1
- package/lib/test/utilities/TestUtilities.d.ts +9 -1
- package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
- package/lib/test/utilities/TestUtilities.js +27 -13
- package/lib/test/utilities/TestUtilities.js.map +1 -1
- package/package.json +19 -17
- package/src/Common.ts +42 -4
- package/src/EditLog.ts +1 -1
- package/src/Identifiers.ts +5 -0
- package/src/LogViewer.ts +4 -20
- package/src/RevisionValueCache.ts +11 -8
- package/src/SharedTree.ts +222 -75
- package/src/SharedTreeEncoder.ts +17 -11
- package/src/TreeCompressor.ts +2 -4
- package/src/UuidUtilities.ts +123 -0
- package/src/id-compressor/AppendOnlySortedMap.ts +183 -94
- package/src/id-compressor/IdCompressor.ts +144 -132
- package/src/id-compressor/NumericUuid.ts +11 -80
- package/src/id-compressor/SessionIdNormalizer.ts +497 -0
- package/src/id-compressor/persisted-types/0.0.1.ts +12 -15
- package/src/index.ts +5 -0
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH;;;GAGG;AAEH,cAAc;AAEd,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAS,MAAM,EAA0B,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH;;;GAGG;AAEH,cAAc;AAEd,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAS,MAAM,EAA0B,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAkBnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAIrD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAmB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AAEpC,OAAO,EACN,IAAI,EACJ,UAAU,EAIV,gBAAgB,EAEhB,cAAc,EAqBd,kBAAkB,EAElB,WAAW,EAEX,mBAAmB,EACnB,mBAAmB,GAOnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAKN,iBAAiB,EACjB,UAAU,GAOV,MAAM,cAAc,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,OAAO,EACN,QAAQ,EACR,iCAAiC,EAGjC,qBAAqB,EAErB,yBAAyB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACN,mBAAmB,EACnB,kBAAkB,GAWlB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIN,QAAQ,GAKR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAqB,MAAM,eAAe,CAAC;AAEjF;;GAEG;AACH,OAAO;AACN,wEAAwE;AACxE,sCAAsC,IAAI,4BAA4B,EACtE,sCAAsC,GACtC,MAAM,wBAAwB,CAAC;AAEhC,cAAc,eAAe,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Fluid DDS storing a tree.\n *\n * @packageDocumentation\n */\n\n/**\n * This file represents the public API. Consumers of this package will not see exported modules unless they are enumerated here.\n * Removing / editing existing exports here will often indicate a breaking change, so please be cognizant of changes made here.\n */\n\n// API Exports\n\nexport { initialTree } from './InitialTree';\nexport { TreeNodeHandle } from './TreeNodeHandle';\nexport { Delta, Forest, ForestNode, ParentData } from './Forest';\nexport { sharedTreeAssertionErrorType, isSharedTreeEvent, Result } from './Common';\nexport type {\n\tCompressedId,\n\tDefinition,\n\tDetachedSequenceId,\n\tEditId,\n\tInternedStringId,\n\tFinalCompressedId,\n\tLocalCompressedId,\n\tNodeId,\n\tNodeIdBrand,\n\tStableNodeId,\n\tSessionSpaceCompressedId,\n\tSessionUnique,\n\tTraitLabel,\n\tUuidString,\n\tAttributionId,\n} from './Identifiers';\nexport { isDetachedSequenceId } from './Identifiers';\nexport type { OrderedEditSet, EditHandle } from './EditLog';\nexport { LogViewer } from './LogViewer';\nexport { Revision } from './RevisionValueCache';\nexport { Checkout, CheckoutEvent, ICheckoutEvents, EditValidationResult } from './Checkout';\nexport { LazyCheckout } from './LazyCheckout';\nexport { EagerCheckout } from './EagerCheckout';\nexport * from './ReconciliationPath';\nexport * from './MergeHealth';\nexport * from './TreeViewUtilities';\nexport { StringInterner } from './StringInterner';\nexport {\n\tSide,\n\tEditStatus,\n\tTreeNode,\n\tTreeNodeSequence,\n\tPayload,\n\tConstraintEffect,\n\tEdit,\n\tChangeInternal,\n\tInternalizedChange,\n\tChangeNode,\n\tChangeNode_0_0_2,\n\tEditLogSummary,\n\tFluidEditHandle,\n\tSharedTreeSummaryBase,\n\tEditWithoutId,\n\tPlaceholderTree,\n\tEditBase,\n\tHasTraits,\n\tInsertInternal,\n\tDetachInternal,\n\tBuildInternal,\n\tSetValueInternal,\n\tConstraintInternal,\n\tBuildNodeInternal,\n\tStablePlaceInternal_0_0_2,\n\tStableRangeInternal_0_0_2,\n\tNodeData,\n\tTraitMap,\n\tChangeTypeInternal,\n\tTraitLocationInternal_0_0_2,\n\tWriteFormat,\n\tConstraintInternal_0_0_2,\n\tStablePlaceInternal,\n\tStableRangeInternal,\n\tBuildNodeInternal_0_0_2,\n\tBuildInternal_0_0_2,\n\tInsertInternal_0_0_2,\n\tDetachInternal_0_0_2,\n\tSetValueInternal_0_0_2,\n\tTraitLocationInternal,\n} from './persisted-types';\nexport {\n\tSharedTreeArgs,\n\tSharedTreeOptions,\n\tSharedTreeOptions_0_0_2,\n\tSharedTreeOptions_0_1_1,\n\tSharedTreeFactory,\n\tSharedTree,\n\tEditCommittedHandler,\n\tSequencedEditAppliedHandler,\n\tEditCommittedEventArguments,\n\tSequencedEditAppliedEventArguments,\n\tEditApplicationOutcome,\n\tISharedTreeEvents,\n} from './SharedTree';\nexport * from './EventTypes';\nexport {\n\tsetTrait,\n\tareRevisionViewsSemanticallyEqual,\n\tBadPlaceValidationResult,\n\tBadRangeValidationResult,\n\tPlaceValidationResult,\n\tRangeValidationResult,\n\tRangeValidationResultKind,\n} from './EditUtilities';\nexport { comparePayloads } from './PayloadUtilities';\nexport {\n\tTransactionInternal,\n\tGenericTransaction,\n\tGenericTransactionPolicy,\n\tEditingResult,\n\tEditingResultBase,\n\tFailedEditingResult,\n\tValidEditingResult,\n\tTransactionState,\n\tTransactionFailure,\n\tSucceedingTransactionState,\n\tFailingTransactionState,\n\tChangeResult,\n} from './TransactionInternal';\nexport {\n\tNodeInTrait,\n\tPlaceIndex,\n\tTreeViewNode,\n\tTreeView,\n\tTraitNodeIndex,\n\tTreeViewPlace,\n\tTreeViewRange,\n\tTraitLocation,\n} from './TreeView';\nexport { RevisionView, TransactionView } from './RevisionView';\nexport { NodeIdContext, NodeIdGenerator, NodeIdConverter } from './NodeIdUtilities';\nexport { Transaction, TransactionEvent, TransactionEvents } from './Transaction';\n\n/**\n * TODO:#61413: Publish test utilities from a separate test package\n */\nexport {\n\t/** @deprecated Use `getSerializedUploadedEditChunkContents` instead. */\n\tgetSerializedUploadedEditChunkContents as getUploadedEditChunkContents,\n\tgetSerializedUploadedEditChunkContents,\n} from './SummaryTestUtilities';\n\nexport * from './ChangeTypes';\n"]}
|
|
@@ -208,12 +208,7 @@ export declare const ChangeInternal: {
|
|
|
208
208
|
detach: (source: StableRangeInternal, destination?: DetachedSequenceId | undefined) => DetachInternal;
|
|
209
209
|
setPayload: (nodeToModify: NodeData<NodeId> | NodeId, payload: Payload) => SetValueInternal;
|
|
210
210
|
clearPayload: (nodeToModify: NodeData<NodeId> | NodeId) => SetValueInternal;
|
|
211
|
-
constraint: (toConstrain: StableRangeInternal, effect: ConstraintEffect, identityHash?: UuidString | undefined, length?: number | undefined, contentHash?: UuidString | undefined, parentNode?:
|
|
212
|
-
readonly LocalCompressedId: "6fccb42f-e2a4-4243-bd29-f13d12b9c6d1";
|
|
213
|
-
} & import("../Identifiers").SessionUnique & import("../Identifiers").NodeIdBrand) | (number & {
|
|
214
|
-
readonly FinalCompressedId: "5d83d1e2-98b7-4e4e-a889-54c855cfa73d";
|
|
215
|
-
readonly OpNormalized: "9209432d-a959-4df7-b2ad-767ead4dbcae";
|
|
216
|
-
} & import("../Identifiers").SessionUnique & import("../Identifiers").NodeIdBrand) | undefined, label?: TraitLabel | undefined) => ConstraintInternal;
|
|
211
|
+
constraint: (toConstrain: StableRangeInternal, effect: ConstraintEffect, identityHash?: UuidString | undefined, length?: number | undefined, contentHash?: UuidString | undefined, parentNode?: NodeId | undefined, label?: TraitLabel | undefined) => ConstraintInternal;
|
|
217
212
|
/** {@inheritdoc (Change:variable).delete } */
|
|
218
213
|
delete: (stableRange: StableRangeInternal) => ChangeInternal;
|
|
219
214
|
/** {@inheritdoc (Change:variable).insertTree } */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"0.1.1.d.ts","sourceRoot":"","sources":["../../src/persisted-types/0.1.1.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"0.1.1.d.ts","sourceRoot":"","sources":["../../src/persisted-types/0.1.1.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"0.1.1.js","sourceRoot":"","sources":["../../src/persisted-types/0.1.1.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 */\nimport { assert, assertNotUndefined, ReplaceRecursive } from '../Common';\n// These are re-exported from a persisted-types file.\nimport type {\n\tIdCreationRange,\n\tSerializedIdCompressorWithNoSession,\n\tSerializedIdCompressorWithOngoingSession,\n} from '../id-compressor';\nimport type {\n\tDefinition,\n\tDetachedSequenceId,\n\tEditId,\n\tFinalNodeId,\n\tInternedStringId,\n\tNodeId,\n\tOpSpaceNodeId,\n\tSessionId,\n\tTraitLabel,\n\tUuidString,\n} from '../Identifiers';\nimport {\n\tBuildInternal_0_0_2,\n\tChangeTypeInternal,\n\tConstraintEffect,\n\tConstraintInternal_0_0_2,\n\tDetachInternal_0_0_2,\n\tEdit,\n\tEditWithoutId,\n\tInsertInternal_0_0_2,\n\tNodeData,\n\tPayload,\n\tSetValueInternal_0_0_2,\n\tSharedTreeNoOp,\n\tSharedTreeOpType,\n\tSharedTreeSummaryBase,\n\tSharedTreeUpdateOp,\n\tSide,\n\tStablePlaceInternal_0_0_2,\n\tTraitLocationInternal_0_0_2,\n\tTreeNode,\n\tTreeNodeSequence,\n\tVersionedOp,\n\tWriteFormat,\n} from './0.0.2';\n\n/**\n * Specifies the location of a trait (a labeled sequence of nodes) within the tree.\n * @public\n */\nexport interface TraitLocationInternal extends Omit<TraitLocationInternal_0_0_2, 'parent'> {\n\treadonly parent: NodeId;\n}\n\n/**\n * Alternating list of label then children list under that label.\n * The label may be interned, and children are {@link CompressedPlaceholderTree}.\n */\nexport type CompressedTraits<TId extends OpSpaceNodeId, TPlaceholder extends number | never> = (\n\t| InternedStringId\n\t| TraitLabel\n\t| (CompressedPlaceholderTree<TId, TPlaceholder> | TPlaceholder)[]\n)[];\n\n/**\n * A TreeNode that has been compressed into the following array format:\n * [identifier, definition, traits, payload],\n * where traits is also an array of [label, [trait], label, [trait], ...].\n * Payload is omitted if empty, and traits will be an empty subarray if no traits exist but a payload exists.\n * If both traits and payload does not exist, then both are omitted.\n * All trait labels and node definitions may also be string interned.\n * @internal\n */\nexport type CompressedPlaceholderTree<TId extends OpSpaceNodeId, TPlaceholder extends number | never> =\n\t| TPlaceholder\n\t| [InternedStringId | Definition] // The node Definition's interned string ID\n\t| [InternedStringId | Definition, TId]\n\t| [\n\t\t\tInternedStringId | Definition,\n\t\t\t[Payload, ...CompressedTraits<TId, TPlaceholder>] | CompressedTraits<TId, TPlaceholder>\n\t ]\n\t| [\n\t\t\tInternedStringId | Definition,\n\t\t\tTId,\n\t\t\t[Payload, ...CompressedTraits<TId, TPlaceholder>] | CompressedTraits<TId, TPlaceholder>\n\t ];\n\n/**\n * JSON-compatible Node type. Objects of this type will be persisted in internal change objects (under Edits) in the SharedTree history.\n * @public\n */\nexport type ChangeNode = TreeNode<ChangeNode, NodeId>;\n\n/**\n * A ChangeNode that has been compressed into a {@link CompressedPlaceholderTree}.\n */\nexport type CompressedChangeNode<TId extends OpSpaceNodeId> = CompressedPlaceholderTree<TId, never>;\n\n/**\n * The contents of a SharedTree summary for write format 0.1.1.\n * Contains the current tree in a compressed format,\n * the edits needed to get from `initialTree` to the current tree,\n * and the interned strings that can be used to retrieve the interned summary.\n */\nexport interface SharedTreeSummary extends SharedTreeSummaryBase {\n\treadonly version: WriteFormat.v0_1_1;\n\n\treadonly currentTree?: CompressedChangeNode<FinalNodeId>;\n\n\t/**\n\t * Information that can populate an edit log.\n\t */\n\treadonly editHistory: EditLogSummary<CompressedChangeInternal<FinalNodeId>, FluidEditHandle>;\n\n\t/**\n\t * List of interned strings.\n\t * In 0.1.1, definitions and trait labels are interned deterministically on sequenced ops,\n\t * and each client maintains a string interner whose lifetime is tied to the SharedTree.\n\t */\n\treadonly internedStrings: readonly string[];\n\n\t/**\n\t * Information about all IDs compressed in the summary\n\t */\n\treadonly idCompressor: SerializedIdCompressorWithNoSession | SerializedIdCompressorWithOngoingSession;\n}\n\n/**\n * Information used to populate an edit log.\n * In 0.1.1, this is a persisted type only for `EditLogSummary<CompressedChangeInternal, FluidEditHandle>`,\n * where calling `FluidEditHandle.get` returns an array buffer of compressed `editChunk` contents.\n * The type is parameterized to avoid nearly identical type definitions for uncompressed forms of the edit\n * log, and abstracting away the fact that handle fetching needs to invoke decompression.\n * @public\n */\nexport interface EditLogSummary<TChange, THandle> {\n\t/**\n\t * A of list of serialized chunks and their corresponding keys.\n\t * Start revision is the index of the first edit in the chunk in relation to the edit log.\n\t */\n\treadonly editChunks: readonly {\n\t\treadonly startRevision: number;\n\t\t/**\n\t\t * Either a chunk of edits or a handle that can be used to load that chunk.\n\t\t */\n\t\treadonly chunk: THandle | readonly EditWithoutId<TChange>[];\n\t}[];\n\n\t/**\n\t * A list of edits IDs for all sequenced edits.\n\t */\n\treadonly editIds: readonly EditId[];\n}\n\n/**\n * FluidEditHandles are used to load edit chunks stored outside of the EditLog.\n * Can be satisfied by IFluidHandle<ArrayBufferLike>.\n * Note that though this is in `PersistedTypes`, it isn't directly serializable (e.g. `get` is a function).\n * Its serialization relies on being encoded via an IFluidSerializer.\n * @public\n */\nexport interface FluidEditHandle {\n\treadonly get: () => Promise<ArrayBuffer>;\n\treadonly absolutePath: string;\n}\n\n// Future write formats should make this a union type and append to it (e.g. `EditChunkContents_0_1_1 | EditChunkContents_2_0_0`).\nexport type EditChunkContents = EditChunkContents_0_1_1;\n\nexport interface EditChunkContents_0_1_1 {\n\tversion: WriteFormat.v0_1_1;\n\tedits: readonly EditWithoutId<CompressedChangeInternal<FinalNodeId>>[];\n}\n\n/**\n * Edits per edit chunk. This value is in persisted types because it requires consensus to change.\n */\nexport const editsPerChunk = 100;\n\n/**\n * Compressed change format type.\n * Encodes the same information as a {@link ChangeInternal}, but uses a more compact object format for `build` changes.\n */\nexport type CompressedChangeInternal<TId extends OpSpaceNodeId> =\n\t| ReplaceRecursive<Exclude<ChangeInternal, BuildInternal>, NodeId, TId>\n\t| CompressedBuildInternal<TId>;\n\n/**\n * A compressed version of {@link BuildInternal} where the source is a sequence of compressed nodes.\n */\nexport interface CompressedBuildInternal<TId extends OpSpaceNodeId> {\n\t/** {@inheritdoc Build.destination } */\n\treadonly destination: DetachedSequenceId;\n\t/** A sequence of nodes to build in some compressed format. */\n\treadonly source: TreeNodeSequence<CompressedBuildNode<TId>>;\n\t/** {@inheritdoc Build.\"type\" } */\n\treadonly type: typeof ChangeTypeInternal.CompressedBuild;\n}\n\n/**\n * A BuildNode that has been compressed into a {@link CompressedPlaceholderTree}.\n */\nexport type CompressedBuildNode<TId extends OpSpaceNodeId> = CompressedPlaceholderTree<TId, DetachedSequenceId>;\n\n// TODO: `ChangeInternal`s should be assignable to this type without casting; this will require some test refactoring.\n/**\n * This type should be used as an opaque handle in the public API for `ChangeInternal` objects.\n * This is useful for supporting public APIs which involve working with a tree's edit history,\n * which will involve changes that have already been internalized.\n * @public\n */\nexport interface InternalizedChange {\n\tInternalChangeBrand: '2cae1045-61cf-4ef7-a6a3-8ad920cb7ab3';\n}\n\n/**\n * {@inheritdoc (Change:type)}\n * @public\n */\nexport type ChangeInternal = InsertInternal | DetachInternal | BuildInternal | SetValueInternal | ConstraintInternal;\n\n/**\n * {@inheritdoc BuildNode}\n * @public\n */\nexport type BuildNodeInternal = TreeNode<BuildNodeInternal, NodeId> | DetachedSequenceId;\n\n/**\n * {@inheritdoc Build}\n * @public\n */\nexport interface BuildInternal extends Omit<BuildInternal_0_0_2, 'source'> {\n\treadonly source: TreeNodeSequence<BuildNodeInternal>;\n}\n\n/**\n * {@inheritdoc (Insert:interface)}\n * @public\n */\nexport interface InsertInternal extends Omit<InsertInternal_0_0_2, 'destination'> {\n\t/** {@inheritdoc (Insert:interface).destination } */\n\treadonly destination: StablePlaceInternal;\n}\n\n/**\n * {@inheritdoc Detach}\n * @public\n */\nexport interface DetachInternal extends Omit<DetachInternal_0_0_2, 'source'> {\n\t/** {@inheritdoc Detach.source } */\n\treadonly source: StableRangeInternal;\n}\n\n/**\n * {@inheritdoc SetValue}\n * @public\n */\nexport interface SetValueInternal extends Omit<SetValueInternal_0_0_2, 'nodeToModify'> {\n\t/** {@inheritdoc SetValue.nodeToModify } */\n\treadonly nodeToModify: NodeId;\n}\n\n/**\n * {@inheritdoc Constraint}\n * @public\n */\nexport interface ConstraintInternal extends Omit<ConstraintInternal_0_0_2, 'toConstrain' | 'parentNode'> {\n\t/** {@inheritdoc Constraint.toConstrain } */\n\treadonly toConstrain: StableRangeInternal;\n\t/** {@inheritdoc Constraint.parentNode } */\n\treadonly parentNode?: NodeId;\n}\n\n// Note: Documentation of this constant is merged with documentation of the `ChangeInternal` interface.\n/**\n * @public\n */\nexport const ChangeInternal = {\n\tbuild: (source: TreeNodeSequence<BuildNodeInternal>, destination: DetachedSequenceId): BuildInternal => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeTypeInternal.Build,\n\t}),\n\n\tinsert: (source: DetachedSequenceId, destination: StablePlaceInternal): InsertInternal => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeTypeInternal.Insert,\n\t}),\n\n\tdetach: (source: StableRangeInternal, destination?: DetachedSequenceId): DetachInternal => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeTypeInternal.Detach,\n\t}),\n\n\tsetPayload: (nodeToModify: NodeData<NodeId> | NodeId, payload: Payload): SetValueInternal => ({\n\t\tnodeToModify: getNodeId(nodeToModify),\n\t\tpayload,\n\t\ttype: ChangeTypeInternal.SetValue,\n\t}),\n\n\tclearPayload: (nodeToModify: NodeData<NodeId> | NodeId): SetValueInternal => ({\n\t\tnodeToModify: getNodeId(nodeToModify),\n\t\t// Rationale: 'undefined' is reserved for future use (see 'SetValue' interface above.)\n\t\tpayload: null,\n\t\ttype: ChangeTypeInternal.SetValue,\n\t}),\n\n\tconstraint: (\n\t\ttoConstrain: StableRangeInternal,\n\t\teffect: ConstraintEffect,\n\t\tidentityHash?: UuidString,\n\t\tlength?: number,\n\t\tcontentHash?: UuidString,\n\t\tparentNode?: NodeId,\n\t\tlabel?: TraitLabel\n\t): ConstraintInternal => ({\n\t\ttoConstrain,\n\t\teffect,\n\t\tidentityHash,\n\t\tlength,\n\t\tcontentHash,\n\t\tparentNode,\n\t\tlabel,\n\t\ttype: ChangeTypeInternal.Constraint,\n\t}),\n\n\t/** {@inheritdoc (Change:variable).delete } */\n\tdelete: (stableRange: StableRangeInternal): ChangeInternal => ChangeInternal.detach(stableRange),\n\n\t/** {@inheritdoc (Change:variable).insertTree } */\n\tinsertTree: (nodes: TreeNodeSequence<BuildNodeInternal>, destination: StablePlaceInternal): ChangeInternal[] => {\n\t\tconst build = ChangeInternal.build(nodes, 0 as DetachedSequenceId);\n\t\treturn [build, ChangeInternal.insert(build.destination, destination)];\n\t},\n\n\t/** {@inheritdoc (Change:variable).move } */\n\tmove: (source: StableRangeInternal, destination: StablePlaceInternal): ChangeInternal[] => {\n\t\tconst detach = ChangeInternal.detach(source, 0 as DetachedSequenceId);\n\t\treturn [detach, ChangeInternal.insert(assertNotUndefined(detach.destination), destination)];\n\t},\n};\n\n/**\n * {@inheritdoc (StablePlace:interface) }\n * @public\n */\nexport interface StablePlaceInternal extends Omit<StablePlaceInternal_0_0_2, 'referenceSibling' | 'referenceTrait'> {\n\t/**\n\t * {@inheritdoc (StablePlace:interface).referenceSibling }\n\t */\n\treadonly referenceSibling?: NodeId;\n\n\t/**\n\t * {@inheritdoc (StablePlace:interface).referenceTrait }\n\t */\n\treadonly referenceTrait?: TraitLocationInternal;\n}\n\n/**\n * {@inheritdoc (StableRange:interface) }\n * @public\n */\nexport interface StableRangeInternal {\n\t/** {@inheritdoc (StableRange:interface).start } */\n\treadonly start: StablePlaceInternal;\n\t/** {@inheritdoc (StableRange:interface).end } */\n\treadonly end: StablePlaceInternal;\n}\n\n/**\n * The remainder of this file consists of factory methods duplicated with those for StableRange/StablePlace and are maintained while\n * the new persisted version of SharedTree ops/summaries is rolled out.\n */\n\n/**\n * @public\n */\nexport const StablePlaceInternal = {\n\t/**\n\t * @returns The location directly before `node`.\n\t */\n\tbefore: (node: NodeData<NodeId> | NodeId): StablePlaceInternal => ({\n\t\tside: Side.Before,\n\t\treferenceSibling: getNodeId(node),\n\t}),\n\t/**\n\t * @returns The location directly after `node`.\n\t */\n\tafter: (node: NodeData<NodeId> | NodeId): StablePlaceInternal => ({\n\t\tside: Side.After,\n\t\treferenceSibling: getNodeId(node),\n\t}),\n\t/**\n\t * @returns The location at the start of `trait`.\n\t */\n\tatStartOf: (trait: TraitLocationInternal): StablePlaceInternal => ({\n\t\tside: Side.After,\n\t\treferenceTrait: trait,\n\t}),\n\t/**\n\t * @returns The location at the end of `trait`.\n\t */\n\tatEndOf: (trait: TraitLocationInternal): StablePlaceInternal => ({\n\t\tside: Side.Before,\n\t\treferenceTrait: trait,\n\t}),\n};\n\n/**\n * @public\n */\nexport const StableRangeInternal = {\n\t/**\n\t * Factory for producing a `StableRange` from a start `StablePlace` to an end `StablePlace`.\n\t * @example\n\t * StableRange.from(StablePlace.before(startNode)).to(StablePlace.after(endNode))\n\t */\n\tfrom: (start: StablePlaceInternal): { to: (end: StablePlaceInternal) => StableRangeInternal } => ({\n\t\tto: (end: StablePlaceInternal): StableRangeInternal => {\n\t\t\tif (start.referenceTrait && end.referenceTrait) {\n\t\t\t\tconst message = 'StableRange must be constructed with endpoints from the same trait';\n\t\t\t\tassert(start.referenceTrait.parent === end.referenceTrait.parent, message);\n\t\t\t\tassert(start.referenceTrait.label === end.referenceTrait.label, message);\n\t\t\t}\n\t\t\treturn { start, end };\n\t\t},\n\t}),\n\t/**\n\t * @returns a `StableRange` which contains only the provided `node`.\n\t * Both the start and end `StablePlace` objects used to anchor this `StableRange` are in terms of the passed in node.\n\t */\n\tonly: (node: NodeData<NodeId> | NodeId): StableRangeInternal => ({\n\t\tstart: StablePlaceInternal.before(node),\n\t\tend: StablePlaceInternal.after(node),\n\t}),\n\t/**\n\t * @returns a `StableRange` which contains everything in the trait.\n\t * This is anchored using the provided `trait`, and is independent of the actual contents of the trait:\n\t * it does not use sibling anchoring.\n\t */\n\tall: (trait: TraitLocationInternal): StableRangeInternal => ({\n\t\tstart: StablePlaceInternal.atStartOf(trait),\n\t\tend: StablePlaceInternal.atEndOf(trait),\n\t}),\n};\n\n/**\n * Discriminated union of valid 0.0.1 SharedTree op types.\n */\nexport type SharedTreeOp = SharedTreeEditOp | SharedTreeHandleOp | SharedTreeUpdateOp | SharedTreeNoOp;\n\nexport interface SharedTreeEditOp extends VersionedOp<WriteFormat.v0_1_1> {\n\treadonly type: SharedTreeOpType.Edit;\n\t/** The collection of changes to apply. */\n\treadonly edit: Edit<CompressedChangeInternal<OpSpaceNodeId>>;\n\t/** Contains all the IDs generated by the originating client since the last sent op */\n\treadonly idRange: IdCreationRange;\n}\n\n/**\n * A SharedTree op that includes edit handle information.\n * The handle corresponds to an edit chunk in the edit log.\n */\nexport interface SharedTreeHandleOp extends VersionedOp<WriteFormat.v0_1_1> {\n\treadonly type: SharedTreeOpType.Handle;\n\t/** The serialized handle to an uploaded edit chunk. */\n\treadonly editHandle: string;\n\t/** The index of the first edit in the chunk that corresponds to the handle. */\n\treadonly startRevision: number;\n}\n\n/** The number of IDs that a SharedTree reserves for current or future internal use */\n// This value must never change\nexport const reservedIdCount = 10;\n\n/** The SessionID of the Upgrade Session */\n// This UUID must never change\nexport const ghostSessionId = '79590933-1c70-4fda-817a-adab57c20318' as SessionId;\n\n/** Accepts either a node or a node's identifier, and returns the identifier */\nfunction getNodeId<TId>(node: TId | NodeData<TId>): TId {\n\treturn (node as NodeData<TId>).identifier ?? (node as TId);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"0.1.1.js","sourceRoot":"","sources":["../../src/persisted-types/0.1.1.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 */\nimport { assert, assertNotUndefined, ReplaceRecursive } from '../Common';\n// These are re-exported from a persisted-types file.\nimport type {\n\tIdCreationRange,\n\tSerializedIdCompressorWithNoSession,\n\tSerializedIdCompressorWithOngoingSession,\n} from '../id-compressor';\nimport type {\n\tDefinition,\n\tDetachedSequenceId,\n\tEditId,\n\tFinalNodeId,\n\tInternedStringId,\n\tNodeId,\n\tOpSpaceNodeId,\n\tSessionId,\n\tTraitLabel,\n\tUuidString,\n} from '../Identifiers';\nimport {\n\tBuildInternal_0_0_2,\n\tChangeTypeInternal,\n\tConstraintEffect,\n\tConstraintInternal_0_0_2,\n\tDetachInternal_0_0_2,\n\tEdit,\n\tEditWithoutId,\n\tInsertInternal_0_0_2,\n\tNodeData,\n\tPayload,\n\tSetValueInternal_0_0_2,\n\tSharedTreeNoOp,\n\tSharedTreeOpType,\n\tSharedTreeSummaryBase,\n\tSharedTreeUpdateOp,\n\tSide,\n\tStablePlaceInternal_0_0_2,\n\tTraitLocationInternal_0_0_2,\n\tTreeNode,\n\tTreeNodeSequence,\n\tVersionedOp,\n\tWriteFormat,\n} from './0.0.2';\n\n/**\n * Specifies the location of a trait (a labeled sequence of nodes) within the tree.\n * @public\n */\nexport interface TraitLocationInternal extends Omit<TraitLocationInternal_0_0_2, 'parent'> {\n\treadonly parent: NodeId;\n}\n\n/**\n * Alternating list of label then children list under that label.\n * The label may be interned, and children are {@link CompressedPlaceholderTree}.\n */\nexport type CompressedTraits<TId extends OpSpaceNodeId, TPlaceholder extends number | never> = (\n\t| InternedStringId\n\t| TraitLabel\n\t| (CompressedPlaceholderTree<TId, TPlaceholder> | TPlaceholder)[]\n)[];\n\n/**\n * A TreeNode that has been compressed into the following array format:\n * [identifier, definition, traits, payload],\n * where traits is also an array of [label, [trait], label, [trait], ...].\n * Payload is omitted if empty, and traits will be an empty subarray if no traits exist but a payload exists.\n * If both traits and payload does not exist, then both are omitted.\n * All trait labels and node definitions may also be string interned.\n * @internal\n */\nexport type CompressedPlaceholderTree<TId extends OpSpaceNodeId, TPlaceholder extends number | never> =\n\t| TPlaceholder\n\t| [InternedStringId | Definition] // The node Definition's interned string ID\n\t| [InternedStringId | Definition, TId]\n\t| [\n\t\t\tInternedStringId | Definition,\n\t\t\t[Payload, ...CompressedTraits<TId, TPlaceholder>] | CompressedTraits<TId, TPlaceholder>\n\t ]\n\t| [\n\t\t\tInternedStringId | Definition,\n\t\t\tTId,\n\t\t\t[Payload, ...CompressedTraits<TId, TPlaceholder>] | CompressedTraits<TId, TPlaceholder>\n\t ];\n\n/**\n * JSON-compatible Node type. Objects of this type will be persisted in internal change objects (under Edits) in the SharedTree history.\n * @public\n */\nexport type ChangeNode = TreeNode<ChangeNode, NodeId>;\n\n/**\n * A ChangeNode that has been compressed into a {@link CompressedPlaceholderTree}.\n */\nexport type CompressedChangeNode<TId extends OpSpaceNodeId> = CompressedPlaceholderTree<TId, never>;\n\n/**\n * The contents of a SharedTree summary for write format 0.1.1.\n * Contains the current tree in a compressed format,\n * the edits needed to get from `initialTree` to the current tree,\n * and the interned strings that can be used to retrieve the interned summary.\n */\nexport interface SharedTreeSummary extends SharedTreeSummaryBase {\n\treadonly version: WriteFormat.v0_1_1;\n\n\treadonly currentTree?: CompressedChangeNode<FinalNodeId>;\n\n\t/**\n\t * Information that can populate an edit log.\n\t */\n\treadonly editHistory: EditLogSummary<CompressedChangeInternal<FinalNodeId>, FluidEditHandle>;\n\n\t/**\n\t * List of interned strings.\n\t * In 0.1.1, definitions and trait labels are interned deterministically on sequenced ops,\n\t * and each client maintains a string interner whose lifetime is tied to the SharedTree.\n\t */\n\treadonly internedStrings: readonly string[];\n\n\t/**\n\t * Information about all IDs compressed in the summary\n\t */\n\treadonly idCompressor: SerializedIdCompressorWithNoSession | SerializedIdCompressorWithOngoingSession;\n}\n\n/**\n * Information used to populate an edit log.\n * In 0.1.1, this is a persisted type only for `EditLogSummary<CompressedChangeInternal, FluidEditHandle>`,\n * where calling `FluidEditHandle.get` returns an array buffer of compressed `editChunk` contents.\n * The type is parameterized to avoid nearly identical type definitions for uncompressed forms of the edit\n * log, and abstracting away the fact that handle fetching needs to invoke decompression.\n * @public\n */\nexport interface EditLogSummary<TChange, THandle> {\n\t/**\n\t * A of list of serialized chunks and their corresponding keys.\n\t * Start revision is the index of the first edit in the chunk in relation to the edit log.\n\t */\n\treadonly editChunks: readonly {\n\t\treadonly startRevision: number;\n\t\t/**\n\t\t * Either a chunk of edits or a handle that can be used to load that chunk.\n\t\t */\n\t\treadonly chunk: THandle | readonly EditWithoutId<TChange>[];\n\t}[];\n\n\t/**\n\t * A list of edits IDs for all sequenced edits.\n\t */\n\treadonly editIds: readonly EditId[];\n}\n\n/**\n * FluidEditHandles are used to load edit chunks stored outside of the EditLog.\n * Can be satisfied by IFluidHandle<ArrayBufferLike>.\n * Note that though this is in `PersistedTypes`, it isn't directly serializable (e.g. `get` is a function).\n * Its serialization relies on being encoded via an IFluidSerializer.\n * @public\n */\nexport interface FluidEditHandle {\n\treadonly get: () => Promise<ArrayBuffer>;\n\treadonly absolutePath: string;\n}\n\n// Future write formats should make this a union type and append to it (e.g. `EditChunkContents_0_1_1 | EditChunkContents_2_0_0`).\nexport type EditChunkContents = EditChunkContents_0_1_1;\n\nexport interface EditChunkContents_0_1_1 {\n\tversion: WriteFormat.v0_1_1;\n\tedits: readonly EditWithoutId<CompressedChangeInternal<FinalNodeId>>[];\n}\n\n/**\n * Edits per edit chunk. This value is in persisted types because it requires consensus to change.\n */\nexport const editsPerChunk = 100;\n\n/**\n * Compressed change format type.\n * Encodes the same information as a {@link ChangeInternal}, but uses a more compact object format for `build` changes.\n */\nexport type CompressedChangeInternal<TId extends OpSpaceNodeId> =\n\t| ReplaceRecursive<Exclude<ChangeInternal, BuildInternal>, NodeId, TId>\n\t| CompressedBuildInternal<TId>;\n\n/**\n * A compressed version of {@link BuildInternal} where the source is a sequence of compressed nodes.\n */\nexport interface CompressedBuildInternal<TId extends OpSpaceNodeId> {\n\t/** {@inheritdoc Build.destination } */\n\treadonly destination: DetachedSequenceId;\n\t/** A sequence of nodes to build in some compressed format. */\n\treadonly source: TreeNodeSequence<CompressedBuildNode<TId>>;\n\t/** {@inheritdoc Build.\"type\" } */\n\treadonly type: typeof ChangeTypeInternal.CompressedBuild;\n}\n\n/**\n * A BuildNode that has been compressed into a {@link CompressedPlaceholderTree}.\n */\nexport type CompressedBuildNode<TId extends OpSpaceNodeId> = CompressedPlaceholderTree<TId, DetachedSequenceId>;\n\n// TODO: `ChangeInternal`s should be assignable to this type without casting; this will require some test refactoring.\n/**\n * This type should be used as an opaque handle in the public API for `ChangeInternal` objects.\n * This is useful for supporting public APIs which involve working with a tree's edit history,\n * which will involve changes that have already been internalized.\n * @public\n */\nexport interface InternalizedChange {\n\tInternalChangeBrand: '2cae1045-61cf-4ef7-a6a3-8ad920cb7ab3';\n}\n\n/**\n * {@inheritdoc (Change:type)}\n * @public\n */\nexport type ChangeInternal = InsertInternal | DetachInternal | BuildInternal | SetValueInternal | ConstraintInternal;\n\n/**\n * {@inheritdoc BuildNode}\n * @public\n */\nexport type BuildNodeInternal = TreeNode<BuildNodeInternal, NodeId> | DetachedSequenceId;\n\n/**\n * {@inheritdoc Build}\n * @public\n */\nexport interface BuildInternal extends Omit<BuildInternal_0_0_2, 'source'> {\n\treadonly source: TreeNodeSequence<BuildNodeInternal>;\n}\n\n/**\n * {@inheritdoc (Insert:interface)}\n * @public\n */\nexport interface InsertInternal extends Omit<InsertInternal_0_0_2, 'destination'> {\n\t/** {@inheritdoc (Insert:interface).destination } */\n\treadonly destination: StablePlaceInternal;\n}\n\n/**\n * {@inheritdoc Detach}\n * @public\n */\nexport interface DetachInternal extends Omit<DetachInternal_0_0_2, 'source'> {\n\t/** {@inheritdoc Detach.source } */\n\treadonly source: StableRangeInternal;\n}\n\n/**\n * {@inheritdoc SetValue}\n * @public\n */\nexport interface SetValueInternal extends Omit<SetValueInternal_0_0_2, 'nodeToModify'> {\n\t/** {@inheritdoc SetValue.nodeToModify } */\n\treadonly nodeToModify: NodeId;\n}\n\n/**\n * {@inheritdoc Constraint}\n * @public\n */\nexport interface ConstraintInternal extends Omit<ConstraintInternal_0_0_2, 'toConstrain' | 'parentNode'> {\n\t/** {@inheritdoc Constraint.toConstrain } */\n\treadonly toConstrain: StableRangeInternal;\n\t/** {@inheritdoc Constraint.parentNode } */\n\treadonly parentNode?: NodeId;\n}\n\n// Note: Documentation of this constant is merged with documentation of the `ChangeInternal` interface.\n/**\n * @public\n */\nexport const ChangeInternal = {\n\tbuild: (source: TreeNodeSequence<BuildNodeInternal>, destination: DetachedSequenceId): BuildInternal => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeTypeInternal.Build,\n\t}),\n\n\tinsert: (source: DetachedSequenceId, destination: StablePlaceInternal): InsertInternal => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeTypeInternal.Insert,\n\t}),\n\n\tdetach: (source: StableRangeInternal, destination?: DetachedSequenceId): DetachInternal => ({\n\t\tdestination,\n\t\tsource,\n\t\ttype: ChangeTypeInternal.Detach,\n\t}),\n\n\tsetPayload: (nodeToModify: NodeData<NodeId> | NodeId, payload: Payload): SetValueInternal => ({\n\t\tnodeToModify: getNodeId(nodeToModify),\n\t\tpayload,\n\t\ttype: ChangeTypeInternal.SetValue,\n\t}),\n\n\tclearPayload: (nodeToModify: NodeData<NodeId> | NodeId): SetValueInternal => ({\n\t\tnodeToModify: getNodeId(nodeToModify),\n\t\t// Rationale: 'undefined' is reserved for future use (see 'SetValue' interface above.)\n\t\tpayload: null,\n\t\ttype: ChangeTypeInternal.SetValue,\n\t}),\n\n\tconstraint: (\n\t\ttoConstrain: StableRangeInternal,\n\t\teffect: ConstraintEffect,\n\t\tidentityHash?: UuidString,\n\t\tlength?: number,\n\t\tcontentHash?: UuidString,\n\t\tparentNode?: NodeId,\n\t\tlabel?: TraitLabel\n\t): ConstraintInternal => ({\n\t\ttoConstrain,\n\t\teffect,\n\t\tidentityHash,\n\t\tlength,\n\t\tcontentHash,\n\t\tparentNode,\n\t\tlabel,\n\t\ttype: ChangeTypeInternal.Constraint,\n\t}),\n\n\t/** {@inheritdoc (Change:variable).delete } */\n\tdelete: (stableRange: StableRangeInternal): ChangeInternal => ChangeInternal.detach(stableRange),\n\n\t/** {@inheritdoc (Change:variable).insertTree } */\n\tinsertTree: (nodes: TreeNodeSequence<BuildNodeInternal>, destination: StablePlaceInternal): ChangeInternal[] => {\n\t\tconst build = ChangeInternal.build(nodes, 0 as DetachedSequenceId);\n\t\treturn [build, ChangeInternal.insert(build.destination, destination)];\n\t},\n\n\t/** {@inheritdoc (Change:variable).move } */\n\tmove: (source: StableRangeInternal, destination: StablePlaceInternal): ChangeInternal[] => {\n\t\tconst detach = ChangeInternal.detach(source, 0 as DetachedSequenceId);\n\t\treturn [detach, ChangeInternal.insert(assertNotUndefined(detach.destination), destination)];\n\t},\n};\n\n/**\n * {@inheritdoc (StablePlace:interface) }\n * @public\n */\nexport interface StablePlaceInternal extends Omit<StablePlaceInternal_0_0_2, 'referenceSibling' | 'referenceTrait'> {\n\t/**\n\t * {@inheritdoc (StablePlace:interface).referenceSibling }\n\t */\n\treadonly referenceSibling?: NodeId;\n\n\t/**\n\t * {@inheritdoc (StablePlace:interface).referenceTrait }\n\t */\n\treadonly referenceTrait?: TraitLocationInternal;\n}\n\n/**\n * {@inheritdoc (StableRange:interface) }\n * @public\n */\nexport interface StableRangeInternal {\n\t/** {@inheritdoc (StableRange:interface).start } */\n\treadonly start: StablePlaceInternal;\n\t/** {@inheritdoc (StableRange:interface).end } */\n\treadonly end: StablePlaceInternal;\n}\n\n/**\n * The remainder of this file consists of factory methods duplicated with those for StableRange/StablePlace and are maintained while\n * the new persisted version of SharedTree ops/summaries is rolled out.\n */\n\n/**\n * @public\n */\nexport const StablePlaceInternal = {\n\t/**\n\t * @returns The location directly before `node`.\n\t */\n\tbefore: (node: NodeData<NodeId> | NodeId): StablePlaceInternal => ({\n\t\tside: Side.Before,\n\t\treferenceSibling: getNodeId(node),\n\t}),\n\t/**\n\t * @returns The location directly after `node`.\n\t */\n\tafter: (node: NodeData<NodeId> | NodeId): StablePlaceInternal => ({\n\t\tside: Side.After,\n\t\treferenceSibling: getNodeId(node),\n\t}),\n\t/**\n\t * @returns The location at the start of `trait`.\n\t */\n\tatStartOf: (trait: TraitLocationInternal): StablePlaceInternal => ({\n\t\tside: Side.After,\n\t\treferenceTrait: trait,\n\t}),\n\t/**\n\t * @returns The location at the end of `trait`.\n\t */\n\tatEndOf: (trait: TraitLocationInternal): StablePlaceInternal => ({\n\t\tside: Side.Before,\n\t\treferenceTrait: trait,\n\t}),\n};\n\n/**\n * @public\n */\nexport const StableRangeInternal = {\n\t/**\n\t * Factory for producing a `StableRange` from a start `StablePlace` to an end `StablePlace`.\n\t * @example\n\t * StableRange.from(StablePlace.before(startNode)).to(StablePlace.after(endNode))\n\t */\n\tfrom: (start: StablePlaceInternal): { to: (end: StablePlaceInternal) => StableRangeInternal } => ({\n\t\tto: (end: StablePlaceInternal): StableRangeInternal => {\n\t\t\tif (start.referenceTrait && end.referenceTrait) {\n\t\t\t\tconst message = 'StableRange must be constructed with endpoints from the same trait';\n\t\t\t\tassert(start.referenceTrait.parent === end.referenceTrait.parent, message);\n\t\t\t\tassert(start.referenceTrait.label === end.referenceTrait.label, message);\n\t\t\t}\n\t\t\treturn { start, end };\n\t\t},\n\t}),\n\t/**\n\t * @returns a `StableRange` which contains only the provided `node`.\n\t * Both the start and end `StablePlace` objects used to anchor this `StableRange` are in terms of the passed in node.\n\t */\n\tonly: (node: NodeData<NodeId> | NodeId): StableRangeInternal => ({\n\t\tstart: StablePlaceInternal.before(node),\n\t\tend: StablePlaceInternal.after(node),\n\t}),\n\t/**\n\t * @returns a `StableRange` which contains everything in the trait.\n\t * This is anchored using the provided `trait`, and is independent of the actual contents of the trait:\n\t * it does not use sibling anchoring.\n\t */\n\tall: (trait: TraitLocationInternal): StableRangeInternal => ({\n\t\tstart: StablePlaceInternal.atStartOf(trait),\n\t\tend: StablePlaceInternal.atEndOf(trait),\n\t}),\n};\n\n/**\n * Discriminated union of valid 0.0.1 SharedTree op types.\n */\nexport type SharedTreeOp = SharedTreeEditOp | SharedTreeHandleOp | SharedTreeUpdateOp | SharedTreeNoOp;\n\nexport interface SharedTreeEditOp extends VersionedOp<WriteFormat.v0_1_1> {\n\treadonly type: SharedTreeOpType.Edit;\n\t/** The collection of changes to apply. */\n\treadonly edit: Edit<CompressedChangeInternal<OpSpaceNodeId>>;\n\t/** Contains all the IDs generated by the originating client since the last sent op */\n\treadonly idRange: IdCreationRange;\n}\n\n/**\n * A SharedTree op that includes edit handle information.\n * The handle corresponds to an edit chunk in the edit log.\n */\nexport interface SharedTreeHandleOp extends VersionedOp<WriteFormat.v0_1_1> {\n\treadonly type: SharedTreeOpType.Handle;\n\t/** The serialized handle to an uploaded edit chunk. */\n\treadonly editHandle: string;\n\t/** The index of the first edit in the chunk that corresponds to the handle. */\n\treadonly startRevision: number;\n}\n\n/** The number of IDs that a SharedTree reserves for current or future internal use */\n// This value must never change\nexport const reservedIdCount = 10;\n\n/** The SessionID of the Upgrade Session */\n// This UUID must never change\nexport const ghostSessionId = '79590933-1c70-4fda-817a-adab57c20318' as SessionId;\n\n/** Accepts either a node or a node's identifier, and returns the identifier */\nfunction getNodeId<TId>(node: TId | NodeData<TId>): TId {\n\treturn (node as NodeData<TId>).identifier ?? (node as TId);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppendOnlySortedMap.perf.tests.d.ts","sourceRoot":"","sources":["../../src/test/AppendOnlySortedMap.perf.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { benchmark, BenchmarkType } from '@fluid-tools/benchmark';
|
|
6
|
+
import { makeRandom } from '@fluid-internal/stochastic-test-utils';
|
|
7
|
+
import { compareFiniteNumbers } from '../Common';
|
|
8
|
+
import { AppendOnlySortedMap } from '../id-compressor/AppendOnlySortedMap';
|
|
9
|
+
function runAppendOnlyMapPerfTests(mapBuilder) {
|
|
10
|
+
const type = BenchmarkType.Measurement;
|
|
11
|
+
let map;
|
|
12
|
+
let rand;
|
|
13
|
+
const keyChoices = [];
|
|
14
|
+
let localChoice = 0;
|
|
15
|
+
const before = () => {
|
|
16
|
+
rand = makeRandom(42);
|
|
17
|
+
map = mapBuilder();
|
|
18
|
+
let curKey = 0;
|
|
19
|
+
for (let i = 0; i < 100000; i++) {
|
|
20
|
+
map.append(curKey, rand.integer(0, Number.MAX_SAFE_INTEGER));
|
|
21
|
+
curKey += rand.integer(1, 10);
|
|
22
|
+
}
|
|
23
|
+
const keys = [...map.keys()];
|
|
24
|
+
for (let i = 0; i < map.size; i++) {
|
|
25
|
+
keyChoices.push(keys[rand.integer(0, map.size - 1)]);
|
|
26
|
+
}
|
|
27
|
+
localChoice = 0;
|
|
28
|
+
};
|
|
29
|
+
benchmark({
|
|
30
|
+
type,
|
|
31
|
+
title: `lookup a key`,
|
|
32
|
+
before,
|
|
33
|
+
benchmarkFn: () => {
|
|
34
|
+
map.get(keyChoices[localChoice++ % keyChoices.length]);
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
benchmark({
|
|
38
|
+
type,
|
|
39
|
+
title: `lookup a pair or lower`,
|
|
40
|
+
before,
|
|
41
|
+
benchmarkFn: () => {
|
|
42
|
+
map.getPairOrNextLower(keyChoices[localChoice++ % keyChoices.length]);
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
describe('AppendOnlySortedMap Perf', () => {
|
|
47
|
+
runAppendOnlyMapPerfTests(() => new AppendOnlySortedMap(compareFiniteNumbers));
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=AppendOnlySortedMap.perf.tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppendOnlySortedMap.perf.tests.js","sourceRoot":"","sources":["../../src/test/AppendOnlySortedMap.perf.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAE3E,SAAS,yBAAyB,CAAC,UAAqD;IACvF,MAAM,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC;IACvC,IAAI,GAAwC,CAAC;IAC7C,IAAI,IAAY,CAAC;IACjB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,GAAG,EAAE;QACnB,IAAI,GAAG,UAAU,CAAC,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,SAAS,CAAC;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,SAAS,CAAC;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,mBAAmB,CAAC,oBAAoB,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 { benchmark, BenchmarkType } from '@fluid-tools/benchmark';\nimport { makeRandom } from '@fluid-internal/stochastic-test-utils';\nimport Random from 'random-js';\nimport { compareFiniteNumbers } from '../Common';\nimport { AppendOnlySortedMap } from '../id-compressor/AppendOnlySortedMap';\n\nfunction runAppendOnlyMapPerfTests(mapBuilder: () => AppendOnlySortedMap<number, number>) {\n\tconst type = BenchmarkType.Measurement;\n\tlet map: AppendOnlySortedMap<number, number>;\n\tlet rand: Random;\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"]}
|
|
@@ -14,13 +14,25 @@ function runAppendOnlyMapTests(mapBuilder) {
|
|
|
14
14
|
expect(() => map.append(-1, 1)).to.throw(exception);
|
|
15
15
|
expect(() => map.append(1, 2)).to.not.throw();
|
|
16
16
|
});
|
|
17
|
-
it('can get the max
|
|
17
|
+
it('can get the min and max keys', () => {
|
|
18
18
|
const map = mapBuilder();
|
|
19
19
|
const elementCount = 10;
|
|
20
20
|
expect(map.maxKey()).to.be.undefined;
|
|
21
21
|
for (let i = 0; i < elementCount; i++) {
|
|
22
22
|
map.append(i, i);
|
|
23
23
|
expect(map.maxKey()).to.equal(i);
|
|
24
|
+
expect(map.minKey()).to.equal(0);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
it('can get the first and last pairs', () => {
|
|
28
|
+
const map = mapBuilder();
|
|
29
|
+
const elementCount = 10;
|
|
30
|
+
expect(map.first()).to.be.undefined;
|
|
31
|
+
expect(map.last()).to.be.undefined;
|
|
32
|
+
for (let i = 0; i < elementCount; i++) {
|
|
33
|
+
map.append(i, i);
|
|
34
|
+
expect(map.last()).to.deep.equal([i, i]);
|
|
35
|
+
expect(map.first()).to.deep.equal([0, 0]);
|
|
24
36
|
}
|
|
25
37
|
});
|
|
26
38
|
it('can get values', () => {
|
|
@@ -35,6 +47,18 @@ function runAppendOnlyMapTests(mapBuilder) {
|
|
|
35
47
|
expect(map.get(i)).to.equal(i);
|
|
36
48
|
}
|
|
37
49
|
});
|
|
50
|
+
it('can get pairs by index', () => {
|
|
51
|
+
const map = mapBuilder();
|
|
52
|
+
const elementCount = 10;
|
|
53
|
+
for (let i = 0; i < elementCount; i++) {
|
|
54
|
+
map.append(i * 10, i);
|
|
55
|
+
}
|
|
56
|
+
expect(map.getAtIndex(-1)).to.be.undefined;
|
|
57
|
+
expect(map.getAtIndex(10)).to.be.undefined;
|
|
58
|
+
for (let i = 0; i < elementCount; i++) {
|
|
59
|
+
expect(map.getAtIndex(i)).to.deep.equal([i * 10, i]);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
38
62
|
it('can get an entry or next lower by key', () => {
|
|
39
63
|
[99, 100].forEach((elementCount) => {
|
|
40
64
|
const map = mapBuilder();
|
|
@@ -74,21 +98,32 @@ function runAppendOnlyMapTests(mapBuilder) {
|
|
|
74
98
|
}
|
|
75
99
|
expect(map.size).to.equal(elementCount);
|
|
76
100
|
});
|
|
101
|
+
it('can enumerate its keys and values', () => {
|
|
102
|
+
const map = mapBuilder();
|
|
103
|
+
const elementCount = 10;
|
|
104
|
+
const keys = [];
|
|
105
|
+
const values = [];
|
|
106
|
+
for (let i = 0; i < elementCount; i++) {
|
|
107
|
+
const key = i;
|
|
108
|
+
const value = i * 2;
|
|
109
|
+
map.append(key, value);
|
|
110
|
+
keys.push(key);
|
|
111
|
+
values.push(value);
|
|
112
|
+
}
|
|
113
|
+
expect([...map.keys()]).to.deep.equal(keys);
|
|
114
|
+
expect([...map.values()]).to.deep.equal(values);
|
|
115
|
+
});
|
|
77
116
|
it('can calculate the indexOf a search element', () => {
|
|
78
|
-
const elements = [
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
[3, 0],
|
|
82
|
-
];
|
|
83
|
-
const comparator = (key, element) => {
|
|
84
|
-
return compareFiniteNumbers(key, element[0]);
|
|
117
|
+
const elements = [0, 0, 2, 0, 3, 0];
|
|
118
|
+
const comparator = (search, key, value) => {
|
|
119
|
+
return compareFiniteNumbers(search, key);
|
|
85
120
|
};
|
|
86
|
-
expect(AppendOnlySortedMap.
|
|
87
|
-
expect(AppendOnlySortedMap.
|
|
88
|
-
expect(AppendOnlySortedMap.
|
|
89
|
-
expect(AppendOnlySortedMap.
|
|
90
|
-
expect(AppendOnlySortedMap.
|
|
91
|
-
expect(AppendOnlySortedMap.
|
|
121
|
+
expect(AppendOnlySortedMap.keyIndexOf(elements, 0, comparator)).to.equal(0);
|
|
122
|
+
expect(AppendOnlySortedMap.keyIndexOf(elements, 2, comparator)).to.equal(2);
|
|
123
|
+
expect(AppendOnlySortedMap.keyIndexOf(elements, 3, comparator)).to.equal(4);
|
|
124
|
+
expect(AppendOnlySortedMap.keyIndexOf(elements, -1, comparator)).to.equal(0 ^ AppendOnlySortedMap.failureXor);
|
|
125
|
+
expect(AppendOnlySortedMap.keyIndexOf(elements, 1, comparator)).to.equal(2 ^ AppendOnlySortedMap.failureXor);
|
|
126
|
+
expect(AppendOnlySortedMap.keyIndexOf(elements, 10, comparator)).to.equal(6 ^ AppendOnlySortedMap.failureXor);
|
|
92
127
|
});
|
|
93
128
|
describe('can perform range queries', () => {
|
|
94
129
|
const map = mapBuilder();
|
|
@@ -165,5 +200,12 @@ describe('AppendOnlyDoublySortedMap', () => {
|
|
|
165
200
|
expect(map.getPairOrNextHigherByValue(maxValue + 1)).to.be.undefined;
|
|
166
201
|
});
|
|
167
202
|
});
|
|
203
|
+
it('validity assertion detects out-of-order keys', () => {
|
|
204
|
+
const map = new AppendOnlyDoublySortedMap((a, b) => compareFiniteNumbers(a[0], b[0]), (value) => value[0], compareFiniteNumbers);
|
|
205
|
+
map.append([0], [0]);
|
|
206
|
+
map.append([1], [1]);
|
|
207
|
+
assertNotUndefined(map.get([1]))[0] = -1; // mutate value
|
|
208
|
+
expect(() => map.assertValid()).to.throw('Values in map must be sorted.');
|
|
209
|
+
});
|
|
168
210
|
});
|
|
169
211
|
//# sourceMappingURL=AppendOnlySortedMap.tests.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppendOnlySortedMap.tests.js","sourceRoot":"","sources":["../../src/test/AppendOnlySortedMap.tests.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 { expect } from 'chai';\nimport { assertNotUndefined, compareFiniteNumbers } from '../Common';\nimport { AppendOnlyDoublySortedMap, AppendOnlySortedMap } from '../id-compressor/AppendOnlySortedMap';\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\texpect(() => map.append(-1, 1)).to.throw(exception);\n\t\texpect(() => map.append(1, 2)).to.not.throw();\n\t});\n\n\tit('can get the max key', () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\texpect(map.maxKey()).to.be.undefined;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i, i);\n\t\t\texpect(map.maxKey()).to.equal(i);\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\texpect(map.get(-1)).to.be.undefined;\n\t\texpect(map.get(10)).to.be.undefined;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\texpect(map.get(i)).to.equal(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\texpect(map.getPairOrNextLower(-1)).to.be.undefined;\n\t\t\tfor (let i = 0; i < map.size; i++) {\n\t\t\t\texpect(map.getPairOrNextLower(i * 2)).to.deep.equal([i * 2, i * 2]);\n\t\t\t\texpect(map.getPairOrNextLower(i * 2 + 1)).to.deep.equal([i * 2, i * 2]);\n\t\t\t}\n\t\t\tconst maxKey = assertNotUndefined(map.maxKey());\n\t\t\texpect(map.getPairOrNextLower(maxKey + 1)).to.deep.equal([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\texpect(map.getPairOrNextHigher(minKey - 1)).to.deep.equal([minKey, minKey]);\n\t\t\tfor (let i = 0; i < map.size - 1; i++) {\n\t\t\t\texpect(map.getPairOrNextHigher(i * 2)).to.deep.equal([i * 2, i * 2]);\n\t\t\t\texpect(map.getPairOrNextHigher(i * 2 + 1)).to.deep.equal([i * 2 + 2, i * 2 + 2]);\n\t\t\t}\n\t\t\texpect(map.getPairOrNextHigher(map.size * 2 + 1)).to.be.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\texpect(map.size).to.equal(i);\n\t\t\tmap.append(i, i);\n\t\t}\n\t\texpect(map.size).to.equal(elementCount);\n\t});\n\n\tit('can calculate the indexOf a search element', () => {\n\t\tconst elements: [number, number][] = [\n\t\t\t[0, 0],\n\t\t\t[2, 0],\n\t\t\t[3, 0],\n\t\t];\n\t\tconst comparator = (key: number, element: readonly [number, number]): number => {\n\t\t\treturn compareFiniteNumbers(key, element[0]);\n\t\t};\n\t\texpect(AppendOnlySortedMap.indexOf(elements, 0, comparator)).to.equal(0);\n\t\texpect(AppendOnlySortedMap.indexOf(elements, 2, comparator)).to.equal(1);\n\t\texpect(AppendOnlySortedMap.indexOf(elements, 3, comparator)).to.equal(2);\n\t\texpect(AppendOnlySortedMap.indexOf(elements, -1, comparator)).to.equal(0 ^ AppendOnlySortedMap.failureXor);\n\t\texpect(AppendOnlySortedMap.indexOf(elements, 1, comparator)).to.equal(1 ^ AppendOnlySortedMap.failureXor);\n\t\texpect(AppendOnlySortedMap.indexOf(elements, 10, comparator)).to.equal(3 ^ AppendOnlySortedMap.failureXor);\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\texpect([...map.getRange(1, -1)]).to.deep.equal([]);\n\t\t\texpect([...map.getRange(maxKey + 1, maxKey + 1)]).to.deep.equal([]);\n\t\t});\n\n\t\tit('on ranges of size 1', () => {\n\t\t\texpect([...map.getRange(0, 0)]).to.deep.equal([[0, 0]]);\n\t\t\texpect([...map.getRange(1, 1)]).to.deep.equal([]);\n\t\t\texpect([...map.getRange(-1, -1)]).to.deep.equal([]);\n\t\t});\n\n\t\tit('on non-empty ranges', () => {\n\t\t\texpect([...map.getRange(0, 1)]).to.deep.equal([[0, 0]]);\n\t\t\texpect([...map.getRange(0, 2)]).to.deep.equal([\n\t\t\t\t[0, 0],\n\t\t\t\t[2, 2],\n\t\t\t]);\n\t\t\texpect([...map.getRange(1, 5)]).to.deep.equal([\n\t\t\t\t[2, 2],\n\t\t\t\t[4, 4],\n\t\t\t]);\n\t\t\tconst allEntries = [...map.entries()];\n\t\t\texpect([...map.getRange(0, maxKey)]).to.deep.equal(allEntries);\n\t\t\texpect([...map.getRange(-maxKey, maxKey)]).to.deep.equal(allEntries);\n\t\t\texpect([...map.getRange(0, 2 * maxKey)]).to.deep.equal(allEntries);\n\t\t\texpect([...map.getRange(-maxKey, 2 * maxKey)]).to.deep.equal(allEntries);\n\t\t});\n\t});\n}\n\ndescribe('AppendOnlySortedMap', () => {\n\trunAppendOnlyMapTests(() => new AppendOnlySortedMap(compareFiniteNumbers));\n});\n\ndescribe('AppendOnlyDoublySortedMap', () => {\n\tconst mapBuilder = () =>\n\t\tnew AppendOnlyDoublySortedMap<number, number, number>(\n\t\t\tcompareFiniteNumbers,\n\t\t\t(value) => value,\n\t\t\tcompareFiniteNumbers\n\t\t);\n\trunAppendOnlyMapTests(mapBuilder);\n\n\tit('detects out-of-order values', () => {\n\t\tconst map = mapBuilder();\n\t\tmap.append(0, 0);\n\t\tconst exception = 'Inserted value must be > all others in the map.';\n\t\texpect(() => map.append(1, -1)).to.throw(exception);\n\t\texpect(() => map.append(2, 1)).to.not.throw();\n\t});\n\n\tit('can get an entry or next lower by value', () => {\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 - elementCount, i * 2);\n\t\t\t}\n\t\t\texpect(map.getPairOrNextLowerByValue(-1)).to.be.undefined;\n\t\t\tfor (let i = 1; i < elementCount; i++) {\n\t\t\t\texpect(map.getPairOrNextLowerByValue(i * 2)).to.deep.equal([i - elementCount, i * 2]);\n\t\t\t\texpect(map.getPairOrNextLowerByValue(i * 2 + 1)).to.deep.equal([i - elementCount, i * 2]);\n\t\t\t}\n\t\t});\n\t});\n\n\tit('can get an entry or next higher by value', () => {\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 - elementCount, i * 2);\n\t\t\t}\n\t\t\tfor (let i = 0; i < elementCount - 1; i++) {\n\t\t\t\texpect(map.getPairOrNextHigherByValue(i * 2)).to.deep.equal([i - elementCount, i * 2]);\n\t\t\t\texpect(map.getPairOrNextHigherByValue(i * 2 + 1)).to.deep.equal([i - elementCount + 1, i * 2 + 2]);\n\t\t\t}\n\t\t\tconst maxValue = (elementCount - 1) * 2;\n\t\t\texpect(map.getPairOrNextHigherByValue(maxValue)).to.deep.equal([-1, maxValue]);\n\t\t\texpect(map.getPairOrNextHigherByValue(maxValue + 1)).to.be.undefined;\n\t\t});\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"AppendOnlySortedMap.tests.js","sourceRoot":"","sources":["../../src/test/AppendOnlySortedMap.tests.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 { expect } from 'chai';\nimport { assertNotUndefined, compareFiniteNumbers } from '../Common';\nimport { AppendOnlyDoublySortedMap, AppendOnlySortedMap } from '../id-compressor/AppendOnlySortedMap';\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\texpect(() => map.append(-1, 1)).to.throw(exception);\n\t\texpect(() => map.append(1, 2)).to.not.throw();\n\t});\n\n\tit('can get the min and max keys', () => {\n\t\tconst map = mapBuilder();\n\t\tconst elementCount = 10;\n\t\texpect(map.maxKey()).to.be.undefined;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i, i);\n\t\t\texpect(map.maxKey()).to.equal(i);\n\t\t\texpect(map.minKey()).to.equal(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\texpect(map.first()).to.be.undefined;\n\t\texpect(map.last()).to.be.undefined;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\tmap.append(i, i);\n\t\t\texpect(map.last()).to.deep.equal([i, i]);\n\t\t\texpect(map.first()).to.deep.equal([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\texpect(map.get(-1)).to.be.undefined;\n\t\texpect(map.get(10)).to.be.undefined;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\texpect(map.get(i)).to.equal(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\texpect(map.getAtIndex(-1)).to.be.undefined;\n\t\texpect(map.getAtIndex(10)).to.be.undefined;\n\t\tfor (let i = 0; i < elementCount; i++) {\n\t\t\texpect(map.getAtIndex(i)).to.deep.equal([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\texpect(map.getPairOrNextLower(-1)).to.be.undefined;\n\t\t\tfor (let i = 0; i < map.size; i++) {\n\t\t\t\texpect(map.getPairOrNextLower(i * 2)).to.deep.equal([i * 2, i * 2]);\n\t\t\t\texpect(map.getPairOrNextLower(i * 2 + 1)).to.deep.equal([i * 2, i * 2]);\n\t\t\t}\n\t\t\tconst maxKey = assertNotUndefined(map.maxKey());\n\t\t\texpect(map.getPairOrNextLower(maxKey + 1)).to.deep.equal([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\texpect(map.getPairOrNextHigher(minKey - 1)).to.deep.equal([minKey, minKey]);\n\t\t\tfor (let i = 0; i < map.size - 1; i++) {\n\t\t\t\texpect(map.getPairOrNextHigher(i * 2)).to.deep.equal([i * 2, i * 2]);\n\t\t\t\texpect(map.getPairOrNextHigher(i * 2 + 1)).to.deep.equal([i * 2 + 2, i * 2 + 2]);\n\t\t\t}\n\t\t\texpect(map.getPairOrNextHigher(map.size * 2 + 1)).to.be.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\texpect(map.size).to.equal(i);\n\t\t\tmap.append(i, i);\n\t\t}\n\t\texpect(map.size).to.equal(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\texpect([...map.keys()]).to.deep.equal(keys);\n\t\texpect([...map.values()]).to.deep.equal(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\texpect(AppendOnlySortedMap.keyIndexOf(elements, 0, comparator)).to.equal(0);\n\t\texpect(AppendOnlySortedMap.keyIndexOf(elements, 2, comparator)).to.equal(2);\n\t\texpect(AppendOnlySortedMap.keyIndexOf(elements, 3, comparator)).to.equal(4);\n\t\texpect(AppendOnlySortedMap.keyIndexOf(elements, -1, comparator)).to.equal(0 ^ AppendOnlySortedMap.failureXor);\n\t\texpect(AppendOnlySortedMap.keyIndexOf(elements, 1, comparator)).to.equal(2 ^ AppendOnlySortedMap.failureXor);\n\t\texpect(AppendOnlySortedMap.keyIndexOf(elements, 10, comparator)).to.equal(6 ^ AppendOnlySortedMap.failureXor);\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\texpect([...map.getRange(1, -1)]).to.deep.equal([]);\n\t\t\texpect([...map.getRange(maxKey + 1, maxKey + 1)]).to.deep.equal([]);\n\t\t});\n\n\t\tit('on ranges of size 1', () => {\n\t\t\texpect([...map.getRange(0, 0)]).to.deep.equal([[0, 0]]);\n\t\t\texpect([...map.getRange(1, 1)]).to.deep.equal([]);\n\t\t\texpect([...map.getRange(-1, -1)]).to.deep.equal([]);\n\t\t});\n\n\t\tit('on non-empty ranges', () => {\n\t\t\texpect([...map.getRange(0, 1)]).to.deep.equal([[0, 0]]);\n\t\t\texpect([...map.getRange(0, 2)]).to.deep.equal([\n\t\t\t\t[0, 0],\n\t\t\t\t[2, 2],\n\t\t\t]);\n\t\t\texpect([...map.getRange(1, 5)]).to.deep.equal([\n\t\t\t\t[2, 2],\n\t\t\t\t[4, 4],\n\t\t\t]);\n\t\t\tconst allEntries = [...map.entries()];\n\t\t\texpect([...map.getRange(0, maxKey)]).to.deep.equal(allEntries);\n\t\t\texpect([...map.getRange(-maxKey, maxKey)]).to.deep.equal(allEntries);\n\t\t\texpect([...map.getRange(0, 2 * maxKey)]).to.deep.equal(allEntries);\n\t\t\texpect([...map.getRange(-maxKey, 2 * maxKey)]).to.deep.equal(allEntries);\n\t\t});\n\t});\n}\n\ndescribe('AppendOnlySortedMap', () => {\n\trunAppendOnlyMapTests(() => new AppendOnlySortedMap(compareFiniteNumbers));\n});\n\ndescribe('AppendOnlyDoublySortedMap', () => {\n\tconst mapBuilder = () =>\n\t\tnew AppendOnlyDoublySortedMap<number, number, number>(\n\t\t\tcompareFiniteNumbers,\n\t\t\t(value) => value,\n\t\t\tcompareFiniteNumbers\n\t\t);\n\trunAppendOnlyMapTests(mapBuilder);\n\n\tit('detects out-of-order values', () => {\n\t\tconst map = mapBuilder();\n\t\tmap.append(0, 0);\n\t\tconst exception = 'Inserted value must be > all others in the map.';\n\t\texpect(() => map.append(1, -1)).to.throw(exception);\n\t\texpect(() => map.append(2, 1)).to.not.throw();\n\t});\n\n\tit('can get an entry or next lower by value', () => {\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 - elementCount, i * 2);\n\t\t\t}\n\t\t\texpect(map.getPairOrNextLowerByValue(-1)).to.be.undefined;\n\t\t\tfor (let i = 1; i < elementCount; i++) {\n\t\t\t\texpect(map.getPairOrNextLowerByValue(i * 2)).to.deep.equal([i - elementCount, i * 2]);\n\t\t\t\texpect(map.getPairOrNextLowerByValue(i * 2 + 1)).to.deep.equal([i - elementCount, i * 2]);\n\t\t\t}\n\t\t});\n\t});\n\n\tit('can get an entry or next higher by value', () => {\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 - elementCount, i * 2);\n\t\t\t}\n\t\t\tfor (let i = 0; i < elementCount - 1; i++) {\n\t\t\t\texpect(map.getPairOrNextHigherByValue(i * 2)).to.deep.equal([i - elementCount, i * 2]);\n\t\t\t\texpect(map.getPairOrNextHigherByValue(i * 2 + 1)).to.deep.equal([i - elementCount + 1, i * 2 + 2]);\n\t\t\t}\n\t\t\tconst maxValue = (elementCount - 1) * 2;\n\t\t\texpect(map.getPairOrNextHigherByValue(maxValue)).to.deep.equal([-1, maxValue]);\n\t\t\texpect(map.getPairOrNextHigherByValue(maxValue + 1)).to.be.undefined;\n\t\t});\n\t});\n\n\tit('validity assertion detects out-of-order keys', () => {\n\t\tconst map = new AppendOnlyDoublySortedMap<[number], [number], number>(\n\t\t\t(a, b) => compareFiniteNumbers(a[0], b[0]),\n\t\t\t(value) => value[0],\n\t\t\tcompareFiniteNumbers\n\t\t);\n\t\tmap.append([0], [0]);\n\t\tmap.append([1], [1]);\n\t\tassertNotUndefined(map.get([1]))[0] = -1; // mutate value\n\t\texpect(() => map.assertValid()).to.throw('Values in map must be sorted.');\n\t});\n});\n"]}
|
|
@@ -16,8 +16,8 @@ export function checkoutTests(checkoutName, checkoutFactory, additionalTests) {
|
|
|
16
16
|
/**
|
|
17
17
|
* Counts the number of times ViewChange occurs while performing `action`.
|
|
18
18
|
* Checks arguments to ViewChange are correct as well.
|
|
19
|
-
* @param action Action to perform
|
|
20
|
-
* @param options Options object used to construct the initial SharedTree
|
|
19
|
+
* @param action - Action to perform
|
|
20
|
+
* @param options - Options object used to construct the initial SharedTree
|
|
21
21
|
*/
|
|
22
22
|
async function countViewChange(action, options = { localMode: true }) {
|
|
23
23
|
const { checkout, tree } = await setUpTestCheckout(options);
|