@zeix/cause-effect
Version:
Cause & Effect - reactive state management primitives library for TypeScript.
54 lines (43 loc) • 1.75 kB
text/typescript
import type { TestResult } from './perf-tests'
import type { ReactiveFramework } from './reactive-framework'
/** Parameters for a running a performance benchmark test
*
* The benchmarks create a rectangular grid of reactive elements, with
* mutable signals in the first level, computed elements in the middle levels,
* and read effect elements in the last level.
*
* Each test iteration modifies one signal, and then reads specified
* fraction of the effect elements.
*
* Each non-signal node sums values from a specified number of elements
* in the preceding layer. Some nodes are dynamic, and read vary
* the number of sources the read for the sum.
*
* Tests may optionally provide result values to verify the sum
* of all read effect elements in all iterations, and the total
* number of non-signal updated.
*/
export interface TestConfig {
/** friendly name for the test, should be unique */
name?: string
/** width of dependency graph to construct */
width: number
/** depth of dependency graph to construct */
totalLayers: number
/** fraction of nodes that are static */ // TODO change to dynamicFraction
staticFraction: number
/** construct a graph with number of sources in each node */
nSources: number
/** fraction of [0, 1] elements in the last layer from which to read values in each test iteration */
readFraction: number
/** number of test iterations */
iterations: number
/** sum and count of all iterations, for verification */
expected: Partial<TestResult>
}
export interface FrameworkInfo {
/** wrapper/adapter for a benchmarking a reactive framework */
framework: ReactiveFramework
/** verify the number of nodes executed matches the expected number */
testPullCounts?: boolean
}