@creative-introvert/tons-of-tests 2.0.0 → 3.0.0-rc.0
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/README.md +263 -134
- package/dist/cjs/Classify.js +6 -2
- package/dist/cjs/Classify.js.map +1 -1
- package/dist/cjs/RepositoryError.js +24 -33
- package/dist/cjs/RepositoryError.js.map +1 -1
- package/dist/cjs/Show.js +18 -0
- package/dist/cjs/Show.js.map +1 -1
- package/dist/cjs/Test.js +41 -2
- package/dist/cjs/Test.js.map +1 -1
- package/dist/cjs/Test.repository.js +8 -17
- package/dist/cjs/Test.repository.js.map +1 -1
- package/dist/cjs/TestRun.js +20 -0
- package/dist/cjs/TestRun.js.map +1 -0
- package/dist/cjs/TestValueError.js +23 -0
- package/dist/cjs/TestValueError.js.map +1 -0
- package/dist/cjs/index.js +0 -7
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/Classify.js +1 -9
- package/dist/cjs/internal/Classify.js.map +1 -1
- package/dist/cjs/internal/Test.js +305 -109
- package/dist/cjs/internal/Test.js.map +1 -1
- package/dist/cjs/internal/Test.repository.sqlite.js +266 -304
- package/dist/cjs/internal/Test.repository.sqlite.js.map +1 -1
- package/dist/cjs/internal/Test.serialization.js +128 -0
- package/dist/cjs/internal/Test.serialization.js.map +1 -0
- package/dist/cjs/internal/common.js.map +1 -1
- package/dist/cjs/internal/stats.js +37 -3
- package/dist/cjs/internal/stats.js.map +1 -1
- package/dist/cjs/internal/summarize.js +155 -36
- package/dist/cjs/internal/summarize.js.map +1 -1
- package/dist/cjs/internal/test-repository-fixtures.js +31 -0
- package/dist/cjs/internal/test-repository-fixtures.js.map +1 -0
- package/dist/cjs/internal/test-repository-migrations.js +68 -0
- package/dist/cjs/internal/test-repository-migrations.js.map +1 -0
- package/dist/cjs/internal/test-result-stats.js +89 -0
- package/dist/cjs/internal/test-result-stats.js.map +1 -0
- package/dist/dts/Classify.d.ts +4 -1
- package/dist/dts/Classify.d.ts.map +1 -1
- package/dist/dts/RepositoryError.d.ts +19 -20
- package/dist/dts/RepositoryError.d.ts.map +1 -1
- package/dist/dts/Show.d.ts +8 -8
- package/dist/dts/Show.d.ts.map +1 -1
- package/dist/dts/Test.d.ts +155 -11
- package/dist/dts/Test.d.ts.map +1 -1
- package/dist/dts/Test.repository.d.ts +94 -8
- package/dist/dts/Test.repository.d.ts.map +1 -1
- package/dist/dts/TestRun.d.ts +18 -0
- package/dist/dts/TestRun.d.ts.map +1 -0
- package/dist/dts/TestValueError.d.ts +17 -0
- package/dist/dts/TestValueError.d.ts.map +1 -0
- package/dist/dts/index.d.ts +0 -1
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/Classify.d.ts +0 -1
- package/dist/dts/internal/Classify.d.ts.map +1 -1
- package/dist/dts/internal/Test.d.ts +58 -31
- package/dist/dts/internal/Test.d.ts.map +1 -1
- package/dist/dts/internal/Test.repository.sqlite.d.ts +66 -11
- package/dist/dts/internal/Test.repository.sqlite.d.ts.map +1 -1
- package/dist/dts/internal/Test.serialization.d.ts +34 -0
- package/dist/dts/internal/Test.serialization.d.ts.map +1 -0
- package/dist/dts/internal/common.d.ts +1 -1
- package/dist/dts/internal/common.d.ts.map +1 -1
- package/dist/dts/internal/stats.d.ts +15 -1
- package/dist/dts/internal/stats.d.ts.map +1 -1
- package/dist/dts/internal/summarize.d.ts +39 -7
- package/dist/dts/internal/summarize.d.ts.map +1 -1
- package/dist/dts/internal/test-repository-fixtures.d.ts +22 -0
- package/dist/dts/internal/test-repository-fixtures.d.ts.map +1 -0
- package/dist/dts/internal/test-repository-migrations.d.ts +11 -0
- package/dist/dts/internal/test-repository-migrations.d.ts.map +1 -0
- package/dist/dts/internal/test-result-stats.d.ts +7 -0
- package/dist/dts/internal/test-result-stats.d.ts.map +1 -0
- package/dist/esm/Classify.js +5 -1
- package/dist/esm/Classify.js.map +1 -1
- package/dist/esm/RepositoryError.js +14 -29
- package/dist/esm/RepositoryError.js.map +1 -1
- package/dist/esm/Show.js +2 -2
- package/dist/esm/Show.js.map +1 -1
- package/dist/esm/Test.js +38 -1
- package/dist/esm/Test.js.map +1 -1
- package/dist/esm/Test.repository.js +7 -16
- package/dist/esm/Test.repository.js.map +1 -1
- package/dist/esm/TestRun.js +13 -0
- package/dist/esm/TestRun.js.map +1 -0
- package/dist/esm/TestValueError.js +16 -0
- package/dist/esm/TestValueError.js.map +1 -0
- package/dist/esm/index.js +0 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/Classify.js +0 -7
- package/dist/esm/internal/Classify.js.map +1 -1
- package/dist/esm/internal/Test.js +299 -108
- package/dist/esm/internal/Test.js.map +1 -1
- package/dist/esm/internal/Test.repository.sqlite.js +265 -301
- package/dist/esm/internal/Test.repository.sqlite.js.map +1 -1
- package/dist/esm/internal/Test.serialization.js +119 -0
- package/dist/esm/internal/Test.serialization.js.map +1 -0
- package/dist/esm/internal/common.js.map +1 -1
- package/dist/esm/internal/stats.js +35 -2
- package/dist/esm/internal/stats.js.map +1 -1
- package/dist/esm/internal/summarize.js +155 -35
- package/dist/esm/internal/summarize.js.map +1 -1
- package/dist/esm/internal/test-repository-fixtures.js +25 -0
- package/dist/esm/internal/test-repository-fixtures.js.map +1 -0
- package/dist/esm/internal/test-repository-migrations.js +62 -0
- package/dist/esm/internal/test-repository-migrations.js.map +1 -0
- package/dist/esm/internal/test-result-stats.js +83 -0
- package/dist/esm/internal/test-result-stats.js.map +1 -0
- package/package.json +1 -1
- package/dist/cjs/Test.repository.types.js +0 -14
- package/dist/cjs/Test.repository.types.js.map +0 -1
- package/dist/cjs/internal/lib/Schema.js +0 -14
- package/dist/cjs/internal/lib/Schema.js.map +0 -1
- package/dist/dts/Test.repository.types.d.ts +0 -56
- package/dist/dts/Test.repository.types.d.ts.map +0 -1
- package/dist/dts/internal/lib/Schema.d.ts +0 -4
- package/dist/dts/internal/lib/Schema.d.ts.map +0 -1
- package/dist/esm/Test.repository.types.js +0 -7
- package/dist/esm/Test.repository.types.js.map +0 -1
- package/dist/esm/internal/lib/Schema.js +0 -7
- package/dist/esm/internal/lib/Schema.js.map +0 -1
package/dist/dts/Test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Test.d.ts","sourceRoot":"","sources":["../../src/Test.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Test.d.ts","sourceRoot":"","sources":["../../src/Test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,98 @@
|
|
|
1
1
|
import * as Sqlite from '@effect/sql-sqlite-node';
|
|
2
|
-
import { Context, Layer } from 'effect';
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import { Context, type Effect, Layer, type Option, type Schema, type Stream } from 'effect';
|
|
3
|
+
import type { Stats } from './Classify.js';
|
|
4
|
+
import type { RepositoryError } from './RepositoryError.js';
|
|
5
|
+
import type { TestResult } from './Test.js';
|
|
6
|
+
import type { TestRun } from './TestRun.js';
|
|
7
|
+
export { TestRun } from './TestRun.js';
|
|
8
|
+
type StatsCollector = {
|
|
9
|
+
add: (results: ReadonlyArray<Pick<TestResult, 'hashTestCase' | 'label' | 'timeMillis'>>) => Effect.Effect<void, RepositoryError>;
|
|
10
|
+
stats: Effect.Effect<Stats, RepositoryError>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Encode and decode saved input and evaluated values. Pass a suite's schemas
|
|
14
|
+
* directly; its whole-case expectation is only needed by the runner.
|
|
15
|
+
* Codecs must be deterministic, preserve equivalent values through JSON, and
|
|
16
|
+
* require no Effect services.
|
|
17
|
+
*/
|
|
18
|
+
export type TestResultSchemas<I = unknown, O = unknown, T = unknown> = {
|
|
19
|
+
testCase: {
|
|
20
|
+
input: Schema.Codec<I, unknown>;
|
|
21
|
+
};
|
|
22
|
+
evaluation: {
|
|
23
|
+
result: Schema.Codec<O, unknown>;
|
|
24
|
+
expected: Schema.Codec<T, unknown>;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Saves attempts and a baseline for each variant in one database. This storage
|
|
29
|
+
* format requires a fresh database; older formats are not migrated. Reads never
|
|
30
|
+
* create runs. Saved history is not pruned automatically.
|
|
31
|
+
*/
|
|
32
|
+
export type TestRepositoryShape = {
|
|
33
|
+
getTestResultsStream: <I = unknown, O = unknown, T = unknown>(testRun: TestRun, schemas: TestResultSchemas<I, O, T>,
|
|
34
|
+
/** Match at most 50 case/key pairs per call. Results retain their saved order. */
|
|
35
|
+
matching?: ReadonlyArray<Pick<TestResult, 'hashTestCase' | 'key'>>) => Stream.Stream<TestResult<I, O, T>, RepositoryError>;
|
|
36
|
+
/** Calculate exact statistics using temporary SQLite storage, released after use. */
|
|
37
|
+
withStats: <A, E, R>(use: (collector: StatsCollector) => Effect.Effect<A, E, R>) => Effect.Effect<A, E | RepositoryError, R>;
|
|
38
|
+
/**
|
|
39
|
+
* Create a new `Running` attempt and call `execute` once. The callback can be
|
|
40
|
+
* interrupted. Save `Complete` after callback success, including empty runs.
|
|
41
|
+
* Save `Failed` after a callback failure, synchronous throw, defect, or
|
|
42
|
+
* interruption. Return success only after saving `Complete`.
|
|
43
|
+
*
|
|
44
|
+
* Database errors propagate. If execution and finalization both fail, preserve
|
|
45
|
+
* both causes. A failed final write or abrupt process exit can leave the attempt
|
|
46
|
+
* `Running`; it cannot be committed.
|
|
47
|
+
*/
|
|
48
|
+
withTestRun: <A, E = never, R = never>(input: {
|
|
49
|
+
name: string;
|
|
50
|
+
variant: string;
|
|
51
|
+
}, execute: (testRun: TestRun) => Effect.Effect<A, E, R>) => Effect.Effect<{
|
|
52
|
+
run: TestRun;
|
|
53
|
+
value: A;
|
|
54
|
+
}, E | RepositoryError, R>;
|
|
55
|
+
/** Find one saved attempt, including `Running` and `Failed` attempts. */
|
|
56
|
+
getTestRun: (id: number) => Effect.Effect<Option.Option<TestRun>, RepositoryError>;
|
|
57
|
+
/** Find the run with the greatest saved ID for this suite and variant, in any state. */
|
|
58
|
+
getLatestTestRun: (input: {
|
|
59
|
+
name: string;
|
|
60
|
+
variant: string;
|
|
61
|
+
}) => Effect.Effect<Option.Option<TestRun>, RepositoryError>;
|
|
62
|
+
/** A missing baseline is `None`; it differs from a completed empty run. */
|
|
63
|
+
getBaselineTestRun: (input: {
|
|
64
|
+
name: string;
|
|
65
|
+
variant: string;
|
|
66
|
+
}) => Effect.Effect<Option.Option<TestRun>, RepositoryError>;
|
|
67
|
+
/**
|
|
68
|
+
* Set the baseline for this run's suite and variant to its exact run ID.
|
|
69
|
+
* The run must be `Complete`; empty runs are allowed. Repeating a commit or
|
|
70
|
+
* choosing an older run is allowed. Past runs and their results stay unchanged.
|
|
71
|
+
*/
|
|
72
|
+
commitTestRun: (id: number) => Effect.Effect<void, RepositoryError>;
|
|
73
|
+
/** List runs by descending ID. `limit` must be 1–100; the next page has `id < before`. */
|
|
74
|
+
listTestRuns: (input: {
|
|
75
|
+
name: string;
|
|
76
|
+
variant?: string;
|
|
77
|
+
before?: number;
|
|
78
|
+
limit: number;
|
|
79
|
+
}) => Effect.Effect<ReadonlyArray<TestRun & {
|
|
80
|
+
readonly isBaseline: boolean;
|
|
81
|
+
}>, RepositoryError>;
|
|
82
|
+
/** List every stored variant by name, with its saved baseline when one exists. */
|
|
83
|
+
listVariantBaselines: (name: string) => Effect.Effect<ReadonlyArray<{
|
|
84
|
+
variant: string;
|
|
85
|
+
baseline: Option.Option<TestRun>;
|
|
86
|
+
}>, RepositoryError>;
|
|
87
|
+
/** Only `Running` attempts accept writes; completed and failed runs cannot change. */
|
|
88
|
+
insertTestResult: <I, O, T>(input: TestResult<I, O, T>, testRun: TestRun, schemas: TestResultSchemas<I, O, T>) => Effect.Effect<void, RepositoryError>;
|
|
89
|
+
/** Check the saved state inside each batch transaction before writing. */
|
|
90
|
+
insertTestResults: <I, O, T>(inputs: ReadonlyArray<TestResult<I, O, T>>, testRun: TestRun, schemas: TestResultSchemas<I, O, T>) => Effect.Effect<void, RepositoryError>;
|
|
91
|
+
};
|
|
92
|
+
declare const TestRepository_base: Context.ServiceClass<TestRepository, "@creative-introvert/tons-of-tests/TestRepository", TestRepositoryShape>;
|
|
7
93
|
export declare class TestRepository extends TestRepository_base {
|
|
8
|
-
static
|
|
9
|
-
static layer(dbPath: string): Layer.Layer<TestRepository, import("effect/sql/SqlError").SqlError, never>;
|
|
10
|
-
static
|
|
94
|
+
static readonly layerNoDeps: Layer.Layer<TestRepository, Sqlite.SqliteMigrator.MigrationError | import("effect/sql/SqlError").SqlError, import("effect/sql/SqlClient").SqlClient>;
|
|
95
|
+
static layer(dbPath: string): Layer.Layer<TestRepository, Sqlite.SqliteMigrator.MigrationError | import("effect/sql/SqlError").SqlError, never>;
|
|
96
|
+
static readonly TestLayer: Layer.Layer<import("effect/sql/SqlClient").SqlClient | Sqlite.SqliteClient.SqliteClient | TestRepository, Sqlite.SqliteMigrator.MigrationError | import("effect/sql/SqlError").SqlError, never>;
|
|
11
97
|
}
|
|
12
98
|
//# sourceMappingURL=Test.repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Test.repository.d.ts","sourceRoot":"","sources":["../../src/Test.repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"Test.repository.d.ts","sourceRoot":"","sources":["../../src/Test.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
declare const TestRun_base: Schema.Class<TestRun, Schema.Struct<{
|
|
3
|
+
readonly id: Schema.Int;
|
|
4
|
+
readonly name: Schema.String;
|
|
5
|
+
readonly variant: Schema.String;
|
|
6
|
+
readonly state: Schema.Literals<readonly ["Running", "Complete", "Failed"]>;
|
|
7
|
+
}>, {
|
|
8
|
+
readonly brand: unique symbol;
|
|
9
|
+
}>;
|
|
10
|
+
/**
|
|
11
|
+
* One saved execution of a suite variant. Results remain available after its
|
|
12
|
+
* program changes or is removed. `Complete` and `Failed` runs cannot be changed.
|
|
13
|
+
* Committing a complete run changes only its variant's baseline pointer.
|
|
14
|
+
*/
|
|
15
|
+
export declare class TestRun extends TestRun_base {
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=TestRun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRun.d.ts","sourceRoot":"","sources":["../../src/TestRun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;;;;;;;oBAST,OAAO,MAAM;;AAPlC;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,YAQ3B;CAAG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
declare const TestValueError_base: Schema.Class<TestValueError, Schema.TaggedStruct<"TestValueError", {
|
|
3
|
+
readonly suite: Schema.String;
|
|
4
|
+
readonly caseNumber: Schema.Int;
|
|
5
|
+
readonly key: Schema.optionalKey<Schema.String>;
|
|
6
|
+
readonly field: Schema.Literals<readonly ["testCase.input", "testCase.expected", "evaluation.result", "evaluation.expected"]>;
|
|
7
|
+
readonly operation: Schema.Literals<readonly ["encode", "decode", "roundTrip"]>;
|
|
8
|
+
readonly cause: Schema.instanceOf<Schema.SchemaError, unknown>;
|
|
9
|
+
}>, import("effect/Cause").YieldableError & {
|
|
10
|
+
readonly brand: unique symbol;
|
|
11
|
+
}>;
|
|
12
|
+
/** A suite value could not be converted without losing information. */
|
|
13
|
+
export declare class TestValueError extends TestValueError_base {
|
|
14
|
+
get message(): string;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=TestValueError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestValueError.d.ts","sourceRoot":"","sources":["../../src/TestValueError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;;;;;;;;;oBAKT,OAAO,MAAM;;AAHlC,uEAAuE;AACvE,qBAAa,cAAe,SAAQ,mBAelC;IACE,IAAa,OAAO,WAGnB;CACJ"}
|
package/dist/dts/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export * as Classify from './Classify.js';
|
|
2
2
|
export * as DisplayConfig from './DisplayConfig.js';
|
|
3
3
|
export * as Error from './RepositoryError.js';
|
|
4
|
-
export { pack } from './internal/pack.js';
|
|
5
4
|
export * as Show from './Show.js';
|
|
6
5
|
export * as Test from './Test.js';
|
|
7
6
|
export * as TestRepository from './Test.repository.js';
|
package/dist/dts/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC"}
|
|
@@ -7,7 +7,6 @@ export declare const values: {
|
|
|
7
7
|
readonly FN: 'FN';
|
|
8
8
|
};
|
|
9
9
|
export declare const LabelSchema: Schema.Literals<readonly ["TP", "TN", "FP", "FN"]>;
|
|
10
|
-
export declare const defaultIsEqual: <A, B>(a: A, b: B) => boolean;
|
|
11
10
|
export declare const defaultIsNil: <I>(x: I) => boolean;
|
|
12
11
|
export declare const makeClassify: <O, T>({ isEqual, isOutputNil, isExpectedNil, }: {
|
|
13
12
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Classify.d.ts","sourceRoot":"","sources":["../../../src/internal/Classify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Classify.d.ts","sourceRoot":"","sources":["../../../src/internal/Classify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAC,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAC,QAAQ,IAAI,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAE1D,eAAO,MAAM,MAAM;aACf,EAAE,EAAE,IAAI;aACR,EAAE,EAAE,IAAI;aACR,EAAE,EAAE,IAAI;aACR,EAAE,EAAE,IAAI;CACF,CAAC;AAEX,eAAO,MAAM,WAAW,oDAA4C,CAAC;AAErE,eAAO,MAAM,YAAY,GAAI,CAAC,KAAK,CAAC,KAAG,OAAwC,CAAC;AAEhF,eAAO,MAAM,YAAY,GACpB,CAAC,EAAE,CAAC,4CAIF;IACC;;;;OAIG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,OAAO,CAAC;IAC7C,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IACrC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,OAAO,CAAC;CAC5C,KAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAkBjB,CAAC;AAEN,eAAO,MAAM,SAAS,MAAO;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,KAAG,MAGvD,CAAC;AAEF,eAAO,MAAM,MAAM,MAAO;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,KAAG,MAGpD,CAAC;AAEF,eAAO,MAAM,GAAG,OAAQ,MAAM,EAAE,KAAG,MACqC,CAAC;AAEzE,eAAO,MAAM,GAAG,OAAQ,MAAM,EAAE,KAAG,MACqC,CAAC;AAEzE,eAAO,MAAM,IAAI,OAAQ,MAAM,EAAE,KAAG,MAAM,GAAG,SAM5C,CAAC;AAEF,eAAO,MAAM,MAAM,OAAQ,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAczD,CAAC"}
|
|
@@ -1,46 +1,73 @@
|
|
|
1
1
|
import { Effect, Option, Schema, Stream } from 'effect';
|
|
2
|
-
import
|
|
3
|
-
import type { Diff, Program, TestCase, TestResult, TestRunResults, TestSuite } from '../Test.js';
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
input: I;
|
|
13
|
-
result: O;
|
|
14
|
-
expected: T;
|
|
15
|
-
tags: readonly string[];
|
|
16
|
-
timeMillis: number;
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
export declare const TestResultSchema: Schema.Codec<TestResult>;
|
|
20
|
-
export declare const test: <I, O, T, E, R>(args_0: {
|
|
2
|
+
import { Stats } from '../Classify.js';
|
|
3
|
+
import type { Diff, Evaluate, InferTestSuite, Program, SelectedProgram, TestCase, TestResult, TestResultComparison, TestRunResults, TestSuite, TestSuiteError, TestSuitePrograms, TestSuiteServices } from '../Test.js';
|
|
4
|
+
import { TestVariantNotFound, TestVariantRequired } from '../Test.js';
|
|
5
|
+
import { TestRepository, type TestResultSchemas, type TestRun } from '../Test.repository.js';
|
|
6
|
+
import type { TestValueError } from '../TestValueError.js';
|
|
7
|
+
import { makeResultCodec } from './Test.serialization.js';
|
|
8
|
+
/** Hash already encoded JSON. Object key order does not affect identity. */
|
|
9
|
+
export declare const makeSha256: (input: Schema.Json) => string;
|
|
10
|
+
export declare const resultKey: ({ hashTestCase, key, }: Pick<TestResult, 'hashTestCase' | 'key'>) => string;
|
|
11
|
+
export declare const test: <I, O, T, E, R, A, B>(args_0: {
|
|
21
12
|
testCase: TestCase<I, T> & {
|
|
22
13
|
ordering: number;
|
|
23
14
|
};
|
|
15
|
+
hashTestCase: string;
|
|
24
16
|
program: Program<I, O, E, R>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
evaluate: Evaluate<O, T, A, B>;
|
|
18
|
+
encodeResult: ReturnType<typeof makeResultCodec<I, A, B>>['encode'];
|
|
19
|
+
}) => Effect.Effect<[{
|
|
28
20
|
hashTestCase: string;
|
|
29
21
|
ordering: number;
|
|
22
|
+
resultOrdering: number;
|
|
23
|
+
input: I;
|
|
24
|
+
tags: string[];
|
|
25
|
+
timeMillis: number;
|
|
26
|
+
id: string;
|
|
27
|
+
key: string;
|
|
28
|
+
result: A;
|
|
29
|
+
expected: B;
|
|
30
30
|
label: import("../Classify.js").Label;
|
|
31
|
+
}, ...{
|
|
32
|
+
hashTestCase: string;
|
|
33
|
+
ordering: number;
|
|
34
|
+
resultOrdering: number;
|
|
31
35
|
input: I;
|
|
32
|
-
|
|
33
|
-
expected: T;
|
|
34
|
-
tags: readonly string[];
|
|
36
|
+
tags: string[];
|
|
35
37
|
timeMillis: number;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
id: string;
|
|
39
|
+
key: string;
|
|
40
|
+
result: A;
|
|
41
|
+
expected: B;
|
|
42
|
+
label: import("../Classify.js").Label;
|
|
43
|
+
}[]], E | TestValueError, R>;
|
|
44
|
+
export declare function selectVariant<S extends {
|
|
45
|
+
name: string;
|
|
46
|
+
} & TestSuitePrograms<never, unknown, unknown, unknown>>(suite: S, variant?: string): Effect.Effect<{
|
|
47
|
+
name: string;
|
|
48
|
+
program: SelectedProgram<S>;
|
|
49
|
+
}, TestVariantRequired | TestVariantNotFound>;
|
|
50
|
+
export declare function all<I, O, T, A = O, B = T, S = never>(suite: TestSuite<I, O, T, unknown, unknown, A, B> & InferTestSuite<S>, options?: {
|
|
51
|
+
variant?: string | undefined;
|
|
38
52
|
concurrency?: number | undefined;
|
|
39
|
-
})
|
|
53
|
+
}): Stream.Stream<TestResult<I, A, B>, TestSuiteError<S> | TestValueError | TestVariantRequired | TestVariantNotFound, TestSuiteServices<S>>;
|
|
40
54
|
export declare const runCollectRecord: (testRun: TestRun) => <I, O, T, E, R>(testResults$: Stream.Stream<TestResult<I, O, T>, E, R>) => Effect.Effect<TestRunResults<I, O, T>, E, R>;
|
|
55
|
+
export declare const filterResults: <I, O, T>(testRun: TestRunResults<I, O, T>, predicate: (result: TestResult<I, O, T>) => boolean) => TestRunResults<I, O, T>;
|
|
41
56
|
export declare const diff: ({ testRun: { stats }, previousTestRun, }: {
|
|
42
|
-
testRun: TestRunResults
|
|
43
|
-
previousTestRun: Option.Option<TestRunResults
|
|
57
|
+
testRun: Pick<TestRunResults, 'stats'>;
|
|
58
|
+
previousTestRun: Option.Option<Pick<TestRunResults, 'stats'>>;
|
|
44
59
|
}) => Diff;
|
|
45
|
-
export {}
|
|
60
|
+
export declare const compareRuns: <I, A, B>({ from, to, schemas, }: {
|
|
61
|
+
from: TestRun;
|
|
62
|
+
to: TestRun;
|
|
63
|
+
schemas: TestResultSchemas<I, A, B>;
|
|
64
|
+
}) => Stream.Stream<TestResultComparison<I, A, B>, import("../RepositoryError.js").RepositoryError, TestRepository>;
|
|
65
|
+
export declare const summarizeRun: <I, A, B>(args_0: {
|
|
66
|
+
run: TestRun;
|
|
67
|
+
schemas: TestResultSchemas<I, A, B>;
|
|
68
|
+
predicate?: (result: TestResult<I, A, B>) => boolean;
|
|
69
|
+
}) => Effect.Effect<{
|
|
70
|
+
run: TestRun;
|
|
71
|
+
stats: Stats;
|
|
72
|
+
}, import("../RepositoryError.js").RepositoryError, TestRepository>;
|
|
46
73
|
//# sourceMappingURL=Test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Test.d.ts","sourceRoot":"","sources":["../../../src/internal/Test.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,MAAM,EAAE,MAAM,EAAQ,MAAM,EAAQ,MAAM,EAAC,MAAM,QAAQ,CAAC;AAEzE,OAAO,
|
|
1
|
+
{"version":3,"file":"Test.d.ts","sourceRoot":"","sources":["../../../src/internal/Test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,67 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
readonly
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { Effect, Option, Schema, Stream } from 'effect';
|
|
2
|
+
import { SqlClient } from 'effect/sql';
|
|
3
|
+
import type { TestResult } from '../Test.js';
|
|
4
|
+
import type { TestResultSchemas } from '../Test.repository.js';
|
|
5
|
+
import { TestRun } from '../TestRun.js';
|
|
6
|
+
import { TestRunNotCreated, TestRunIncomplete, TestRunNotFound } from '../RepositoryError.js';
|
|
7
|
+
export { tables } from './test-repository-migrations.js';
|
|
8
|
+
export declare const TestResultStorage: Schema.Struct<{
|
|
9
|
+
readonly id: Schema.String;
|
|
10
|
+
readonly hashTestCase: Schema.String;
|
|
11
|
+
readonly key: Schema.String;
|
|
12
|
+
readonly input: Schema.fromJsonString<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
|
|
13
|
+
readonly result: Schema.fromJsonString<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
|
|
14
|
+
readonly expected: Schema.fromJsonString<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
|
|
15
|
+
readonly label: Schema.Literals<readonly ["TP", "TN", "FP", "FN"]>;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const makeTestRepository: Effect.Effect<{
|
|
18
|
+
commitTestRun: (id: number) => Effect.Effect<undefined, Schema.SchemaError | import("effect/sql/SqlError").SqlError | TestRunIncomplete | TestRunNotFound, never>;
|
|
19
|
+
getTestRun: (id: number) => Effect.Effect<Option.Option<TestRun>, Schema.SchemaError | import("effect/sql/SqlError").SqlError, never>;
|
|
20
|
+
getLatestTestRun: (args_0: {
|
|
21
|
+
name: string;
|
|
22
|
+
variant: string;
|
|
23
|
+
}) => Effect.Effect<Option.Option<TestRun>, Schema.SchemaError | import("effect/sql/SqlError").SqlError, never>;
|
|
24
|
+
getBaselineTestRun: (args_0: {
|
|
25
|
+
name: string;
|
|
26
|
+
variant: string;
|
|
27
|
+
}) => Effect.Effect<Option.Option<TestRun>, Schema.SchemaError | import("effect/sql/SqlError").SqlError, never>;
|
|
28
|
+
listTestRuns: (args_0: {
|
|
29
|
+
name: string;
|
|
30
|
+
variant?: string;
|
|
31
|
+
before?: number;
|
|
32
|
+
limit: number;
|
|
33
|
+
}) => Effect.Effect<(TestRun & {
|
|
34
|
+
isBaseline: boolean;
|
|
35
|
+
})[], Schema.SchemaError | import("effect/sql/SqlError").SqlError, never>;
|
|
36
|
+
listVariantBaselines: (name: string) => Effect.Effect<{
|
|
37
|
+
variant: string;
|
|
38
|
+
baseline: Option.Option<TestRun>;
|
|
39
|
+
}[], Schema.SchemaError | import("effect/sql/SqlError").SqlError, never>;
|
|
40
|
+
getTestResultsStream: <I = unknown, O = unknown, T = unknown>(run: TestRun, schemas: TestResultSchemas<I, O, T>, matching?: ReadonlyArray<Pick<TestResult, 'hashTestCase' | 'key'>>) => Stream.Stream<{
|
|
41
|
+
input: I;
|
|
42
|
+
result: O;
|
|
43
|
+
expected: T;
|
|
44
|
+
id: string;
|
|
45
|
+
hashTestCase: string;
|
|
46
|
+
key: string;
|
|
47
|
+
ordering: number;
|
|
48
|
+
resultOrdering: number;
|
|
49
|
+
label: import("../Classify.ts").Label;
|
|
50
|
+
tags: readonly string[];
|
|
51
|
+
timeMillis: number;
|
|
52
|
+
}, Schema.SchemaError | import("effect/sql/SqlError").SqlError | import("../TestValueError.ts").TestValueError, never>;
|
|
53
|
+
withTestRun: <A, E = never, R = never>(input: {
|
|
54
|
+
name: string;
|
|
55
|
+
variant: string;
|
|
56
|
+
}, execute: (run: TestRun) => Effect.Effect<A, E, R>) => Effect.Effect<{
|
|
57
|
+
run: TestRun;
|
|
58
|
+
value: A;
|
|
59
|
+
}, E | Schema.SchemaError | import("effect/sql/SqlError").SqlError | TestRunNotCreated | TestRunNotFound, R>;
|
|
60
|
+
withStats: <A, E, R>(use: (collector: {
|
|
61
|
+
add: (results: ReadonlyArray<Pick<TestResult, 'hashTestCase' | 'label' | 'timeMillis'>>) => Effect.Effect<void, import("../RepositoryError.js").RepositoryError>;
|
|
62
|
+
stats: Effect.Effect<import("../Classify.ts").Stats, import("../RepositoryError.js").RepositoryError>;
|
|
63
|
+
}) => Effect.Effect<A, E, R>) => Effect.Effect<A, E | Schema.SchemaError | import("effect/sql/SqlError").SqlError, Exclude<R, SqlClient.SqlClient>>;
|
|
64
|
+
insertTestResult: <I, O, T>(result: TestResult<I, O, T>, run: TestRun, schemas: TestResultSchemas<I, O, T>) => Effect.Effect<void, Schema.SchemaError | import("effect/sql/SqlError").SqlError | TestRunNotFound | import("../TestValueError.ts").TestValueError, never>;
|
|
65
|
+
insertTestResults: <I, O, T>(results: readonly TestResult<I, O, T>[], run: TestRun, schemas: TestResultSchemas<I, O, T>) => Effect.Effect<void, Schema.SchemaError | import("effect/sql/SqlError").SqlError | TestRunNotFound | import("../TestValueError.ts").TestValueError, never>;
|
|
66
|
+
}, import("effect/sql/Migrator").MigrationError | import("effect/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
12
67
|
//# sourceMappingURL=Test.repository.sqlite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Test.repository.sqlite.d.ts","sourceRoot":"","sources":["../../../src/internal/Test.repository.sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Test.repository.sqlite.d.ts","sourceRoot":"","sources":["../../../src/internal/Test.repository.sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAQ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,QAAQ,CAAC;AACxE,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AAErC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAER,iBAAiB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EACH,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAClB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAC,MAAM,EAAC,MAAM,iCAAiC,CAAC;AAEvD,eAAO,MAAM,iBAAiB;;;;;;;;EAQ5B,CAAC;AAoCH,eAAO,MAAM,kBAAkB;;;;cAmKjB,MAAM;iBACH,MAAM;;;cAiBT,MAAM;iBACH,MAAM;;;cAoGT,MAAM;kBACF,MAAM;iBACP,MAAM;eACR,MAAM;;;;;;;;2BAxMa,CAAC,YAAY,CAAC,YAAY,CAAC,iBAChD,OAAO,WACH,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,aACxB,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,GAAG,KAAK,CAAC,CAAC;;;;;;;;;;;;;kBA6IjD,CAAC,EAAE,CAAC,UAAU,CAAC,iBACzB;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,WAC7B,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;;;;;;;;wBA1NE,CAAC,EAAE,CAAC,EAAE,CAAC;8GA8UhE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Effect, Schema } from 'effect';
|
|
2
|
+
import type { TestResult } from '../Test.js';
|
|
3
|
+
import type { TestResultSchemas } from '../Test.repository.js';
|
|
4
|
+
import { TestValueError } from '../TestValueError.js';
|
|
5
|
+
/** Stable JSON object order, including records; array order remains significant. */
|
|
6
|
+
export declare const stringifyJson: (value: Schema.Json) => string;
|
|
7
|
+
type ValueContext = Pick<TestValueError, 'suite' | 'caseNumber' | 'key' | 'field'>;
|
|
8
|
+
export declare const makeValueCodec: <T>(schema: Schema.Codec<T, unknown>) => {
|
|
9
|
+
encode: (value: T, context: ValueContext) => Effect.Effect<Schema.Json, TestValueError, never>;
|
|
10
|
+
decode: (text: unknown, context: ValueContext) => Effect.Effect<T, TestValueError, never>;
|
|
11
|
+
};
|
|
12
|
+
/** Reuse the same conversions for result IDs, storage, and reports. */
|
|
13
|
+
export declare const makeResultCodec: <I, O, T>(schemas: TestResultSchemas<I, O, T>, suite: string) => {
|
|
14
|
+
encode: <A extends Pick<TestResult<I, O, T>, 'input' | 'result' | 'expected' | 'key' | 'ordering'>>(value: A) => Effect.Effect<Omit<A, "expected" | "input" | "result"> & {
|
|
15
|
+
input: Schema.Json;
|
|
16
|
+
result: Schema.Json;
|
|
17
|
+
expected: Schema.Json;
|
|
18
|
+
}, TestValueError, never>;
|
|
19
|
+
decode: (value: TestResult<string, string, string>) => Effect.Effect<{
|
|
20
|
+
input: I;
|
|
21
|
+
result: O;
|
|
22
|
+
expected: T;
|
|
23
|
+
id: string;
|
|
24
|
+
hashTestCase: string;
|
|
25
|
+
key: string;
|
|
26
|
+
ordering: number;
|
|
27
|
+
resultOrdering: number;
|
|
28
|
+
label: import("../Classify.ts").Label;
|
|
29
|
+
tags: readonly string[];
|
|
30
|
+
timeMillis: number;
|
|
31
|
+
}, TestValueError, never>;
|
|
32
|
+
};
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=Test.serialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Test.serialization.d.ts","sourceRoot":"","sources":["../../../src/internal/Test.serialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAc,MAAM,QAAQ,CAAC;AAEnD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAEpD,oFAAoF;AACpF,eAAO,MAAM,aAAa,UAAW,MAAM,CAAC,IAAI,KAAG,MAYlD,CAAC;AAEF,KAAK,YAAY,GAAG,IAAI,CACpB,cAAc,EACd,OAAO,GAAG,YAAY,GAAG,KAAK,GAAG,OAAO,CAC3C,CAAC;AAMF,eAAO,MAAM,cAAc,GAAI,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;;mBA0DxC,OAAO,WAAW,YAAY;CAYvD,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,WAC1B,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAC5B,MAAM;aAMT,CAAC,SAAS,IAAI,CACV,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACnB,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,CACvD;;;;;;;;;;;;;;;;;;CAsDR,CAAC"}
|
|
@@ -5,7 +5,7 @@ export declare const showHeader: (cfg: DisplayConfig, columnWidths: number[], co
|
|
|
5
5
|
label: string;
|
|
6
6
|
}[]) => string;
|
|
7
7
|
export declare const showTitle: (cfg: DisplayConfig, columnWidths: number[], title: string) => string;
|
|
8
|
-
export declare const showRow: (cfg: DisplayConfig, row: [string, string
|
|
8
|
+
export declare const showRow: (cfg: DisplayConfig, row: ReadonlyArray<readonly [string, ReadonlyArray<string>]>, columnWidths: number[], height: number) => string;
|
|
9
9
|
export declare const colorPositive: (n: number) => colors.StyleFunction;
|
|
10
10
|
export declare const colorNegative: (n: number) => colors.StyleFunction;
|
|
11
11
|
//# sourceMappingURL=common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/internal/common.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,UAAU,QACd,aAAa,gBACJ,MAAM,EAAE,YACZ,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,QAAQ,KACrE,MAsCF,CAAC;AAEF,eAAO,MAAM,UAAU,QACd,aAAa,gBACJ,MAAM,EAAE,WACb;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,EAAE,KAC3B,MASF,CAAC;AAEF,eAAO,MAAM,SAAS,QACb,aAAa,gBACJ,MAAM,EAAE,SACf,MAAM,KACd,MAYF,CAAC;AAEF,eAAO,MAAM,OAAO,QACX,aAAa,OACb,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/internal/common.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,UAAU,QACd,aAAa,gBACJ,MAAM,EAAE,YACZ,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,cAAc,GAAG,QAAQ,KACrE,MAsCF,CAAC;AAEF,eAAO,MAAM,UAAU,QACd,aAAa,gBACJ,MAAM,EAAE,WACb;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,EAAE,KAC3B,MASF,CAAC;AAEF,eAAO,MAAM,SAAS,QACb,aAAa,gBACJ,MAAM,EAAE,SACf,MAAM,KACd,MAYF,CAAC;AAEF,eAAO,MAAM,OAAO,QACX,aAAa,OACb,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,gBAC9C,MAAM,EAAE,UACd,MAAM,WAejB,CAAC;AAEF,eAAO,MAAM,aAAa,MAAO,MAAM,yBACqB,CAAC;AAE7D,eAAO,MAAM,aAAa,MAAO,MAAM,yBACqB,CAAC"}
|
|
@@ -1,9 +1,23 @@
|
|
|
1
|
+
import { Option } from 'effect';
|
|
2
|
+
import type { Stats } from '../Classify.js';
|
|
1
3
|
import type { DisplayConfig } from '../DisplayConfig.js';
|
|
2
4
|
import type { StatsColumnNames } from '../Show.js';
|
|
3
5
|
import type { TestRunResults } from '../Test.js';
|
|
6
|
+
import type { TestRun } from '../Test.repository.js';
|
|
4
7
|
export declare const showStats: <I, O, T>({ testRun, displayConfig, selectColumns, }: {
|
|
5
|
-
testRun: Pick<TestRunResults<I, O, T>, 'stats'
|
|
8
|
+
testRun: Pick<TestRunResults<I, O, T>, 'stats'>;
|
|
6
9
|
displayConfig?: Partial<DisplayConfig>;
|
|
7
10
|
selectColumns?: StatsColumnNames[];
|
|
8
11
|
}) => string;
|
|
12
|
+
/** Missing baselines have no metrics; completed empty runs have zero counts. */
|
|
13
|
+
export declare const showRunSummaries: ({ summaries, displayConfig, }: {
|
|
14
|
+
summaries: ReadonlyArray<{
|
|
15
|
+
name: string;
|
|
16
|
+
variant: string;
|
|
17
|
+
run: Option.Option<TestRun>;
|
|
18
|
+
stats: Option.Option<Stats>;
|
|
19
|
+
retired: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
displayConfig?: Partial<DisplayConfig> | undefined;
|
|
22
|
+
}) => string;
|
|
9
23
|
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/internal/stats.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/internal/stats.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAE9B,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAc,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAC;AA8GnD,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,8CAe9B;IACC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACtC,KAAG,MAgCH,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,kCAG1B;IACC,SAAS,EAAE,aAAa,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;CACtD,KAAG,MA6DH,CAAC"}
|
|
@@ -1,11 +1,43 @@
|
|
|
1
|
-
import { Array as A, Option } from 'effect';
|
|
1
|
+
import { Array as A, Effect, FileSystem, Option, Schema, Stream } from 'effect';
|
|
2
2
|
import type { DisplayConfig } from '../DisplayConfig.js';
|
|
3
|
-
import type { SummarizeColumnNames } from '../Show.js';
|
|
4
|
-
import type { TestRunResults } from '../Test.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
import type { SummarizeColumnNames, SummarizeContext } from '../Show.js';
|
|
4
|
+
import type { TestResultComparison, TestRunResults } from '../Test.js';
|
|
5
|
+
import type { TestResultSchemas, TestRun } from '../Test.repository.js';
|
|
6
|
+
/** Format schema-encoded values; conversion failures stay in the error channel. */
|
|
7
|
+
export declare const showSummary: <I, O, T>(args_0: {
|
|
8
|
+
testRun: TestRunResults<I, O, T>;
|
|
9
|
+
schemas: TestResultSchemas<I, O, T>;
|
|
10
|
+
previousTestRun?: Option.Option<TestRunResults<I, O, T>>;
|
|
8
11
|
displayConfig?: Partial<DisplayConfig> | undefined;
|
|
9
12
|
selectColumns?: A.NonEmptyArray<SummarizeColumnNames>;
|
|
10
|
-
}) => string
|
|
13
|
+
}) => Effect.Effect<string, import("../TestValueError.ts").TestValueError, never>;
|
|
14
|
+
/**
|
|
15
|
+
* Format rows once into a temporary file, then read them back with final column widths.
|
|
16
|
+
* Use inside Effect.scoped; the returned chunks remain readable until that scope closes.
|
|
17
|
+
* Each chunk ends in a newline. Conversion failures fail report preparation.
|
|
18
|
+
*/
|
|
19
|
+
export declare const prepareSummary: <I, O, T, E, R>(results: Stream.Stream<Pick<SummarizeContext<I, O, T>, "previousTestResult" | "testResult">, E, R>, args_1: {
|
|
20
|
+
schemas: TestResultSchemas<I, O, T>;
|
|
21
|
+
suite: string;
|
|
22
|
+
displayConfig?: Partial<DisplayConfig> | undefined;
|
|
23
|
+
hasPrevious?: boolean;
|
|
24
|
+
selectColumns?: A.NonEmptyArray<SummarizeColumnNames>;
|
|
25
|
+
}) => Effect.Effect<{
|
|
26
|
+
count: number;
|
|
27
|
+
chunks: Stream.Stream<string, import("effect/PlatformError").PlatformError | Schema.SchemaError, never>;
|
|
28
|
+
}, E | import("effect/PlatformError").PlatformError | import("../TestValueError.ts").TestValueError, R | FileSystem.FileSystem | import("effect/Scope").Scope>;
|
|
29
|
+
/**
|
|
30
|
+
* Show added and removed results with `-` where the other side is missing.
|
|
31
|
+
* Each side uses its own suite name when reporting a codec failure.
|
|
32
|
+
* Prepare and consume the chunks inside `Effect.scoped` so temporary files stay available.
|
|
33
|
+
*/
|
|
34
|
+
export declare const prepareComparison: <I, A, B, E, R>(comparisons: Stream.Stream<TestResultComparison<I, A, B>, E, R>, args_1: {
|
|
35
|
+
from: Option.Option<TestRun>;
|
|
36
|
+
to: TestRun;
|
|
37
|
+
schemas: TestResultSchemas<I, A, B>;
|
|
38
|
+
displayConfig?: Partial<DisplayConfig> | undefined;
|
|
39
|
+
}) => Effect.Effect<{
|
|
40
|
+
chunks: Stream.Stream<string, import("effect/PlatformError").PlatformError | Schema.SchemaError, never>;
|
|
41
|
+
count: number;
|
|
42
|
+
}, E | import("effect/PlatformError").PlatformError | import("../TestValueError.ts").TestValueError, R | FileSystem.FileSystem | import("effect/Scope").Scope>;
|
|
11
43
|
//# sourceMappingURL=summarize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../../src/internal/summarize.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../../src/internal/summarize.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,IAAI,CAAC,EACV,MAAM,EACN,UAAU,EACV,MAAM,EAEN,MAAM,EACN,MAAM,EACT,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAER,oBAAoB,EACpB,gBAAgB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAC,oBAAoB,EAAE,cAAc,EAAC,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAC,iBAAiB,EAAE,OAAO,EAAC,MAAM,uBAAuB,CAAC;AAmLtE,mFAAmF;AACnF,eAAO,MAAM,WAAW,GAAgC,CAAC,EAAE,CAAC,EAAE,CAAC;aAOlD,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACvB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;sBACjB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxC,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS;oBAClC,CAAC,CAAC,aAAa,CAAC,oBAAoB,CAAC;iFAwDvD,CAAC;AAUH;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAgC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aAavD,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;WAC5B,MAAM;oBACG,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS;kBACpC,OAAO;oBACL,CAAC,CAAC,aAAa,CAAC,oBAAoB,CAAC;;;;8JAkC3D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAgC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;UAQ7D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QACxB,OAAO;aACF,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACnB,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS;;;;8JA2FxD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Effect, Schema } from 'effect';
|
|
2
|
+
import { SqlClient } from 'effect/sql';
|
|
3
|
+
import { TestRun } from '../TestRun.js';
|
|
4
|
+
export declare const getAllTestRuns: Effect.Effect<readonly TestRun[], Schema.SchemaError | import("effect/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
5
|
+
export declare const getAllTestResults: Effect.Effect<readonly {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly hashTestCase: string;
|
|
8
|
+
readonly key: string;
|
|
9
|
+
readonly input: Schema.Json;
|
|
10
|
+
readonly result: Schema.Json;
|
|
11
|
+
readonly expected: Schema.Json;
|
|
12
|
+
readonly label: "FN" | "FP" | "TN" | "TP";
|
|
13
|
+
}[], Schema.SchemaError | import("effect/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
14
|
+
export declare const getAllTestRunResults: Effect.Effect<readonly {
|
|
15
|
+
readonly testRun: number;
|
|
16
|
+
readonly testResult: string;
|
|
17
|
+
readonly ordering: number;
|
|
18
|
+
readonly resultOrdering: number;
|
|
19
|
+
readonly timeMillis: number;
|
|
20
|
+
readonly tags: readonly string[];
|
|
21
|
+
}[], Schema.SchemaError | import("effect/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
22
|
+
//# sourceMappingURL=test-repository-fixtures.d.ts.map
|