@creative-introvert/tons-of-tests 2.1.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 +143 -37
- package/dist/cjs/Classify.js +1 -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 +37 -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 +236 -93
- package/dist/cjs/internal/Test.js.map +1 -1
- package/dist/cjs/internal/Test.repository.sqlite.js +262 -357
- 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 +29 -1
- package/dist/cjs/internal/stats.js.map +1 -1
- package/dist/cjs/internal/summarize.js +143 -29
- 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 +0 -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 +5 -5
- package/dist/dts/Show.d.ts.map +1 -1
- package/dist/dts/Test.d.ts +120 -14
- 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 +52 -30
- package/dist/dts/internal/Test.d.ts.map +1 -1
- package/dist/dts/internal/Test.repository.sqlite.d.ts +66 -12
- 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 +0 -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 +34 -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 +232 -92
- package/dist/esm/internal/Test.js.map +1 -1
- package/dist/esm/internal/Test.repository.sqlite.js +261 -354
- 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 +27 -0
- package/dist/esm/internal/stats.js.map +1 -1
- package/dist/esm/internal/summarize.js +143 -28
- 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 -62
- 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/esm/Test.js
CHANGED
|
@@ -1,7 +1,40 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
1
2
|
import * as internal from './internal/Test.js';
|
|
3
|
+
export class TestVariantRequired extends /*#__PURE__*/Schema.TaggedError()('TestVariantRequired', {
|
|
4
|
+
testSuiteName: Schema.String
|
|
5
|
+
}) {}
|
|
6
|
+
export class TestVariantNotFound extends /*#__PURE__*/Schema.TaggedError()('TestVariantNotFound', {
|
|
7
|
+
testSuiteName: Schema.String,
|
|
8
|
+
variant: Schema.String
|
|
9
|
+
}) {}
|
|
10
|
+
/** Selects a program without running it or requiring its services. */
|
|
11
|
+
export const selectVariant = internal.selectVariant;
|
|
12
|
+
/**
|
|
13
|
+
* Runs only the selected program. Its error and service types include every
|
|
14
|
+
* configured program and the case stream, even when the variant ID is a literal.
|
|
15
|
+
*/
|
|
2
16
|
export const all = internal.all;
|
|
17
|
+
/**
|
|
18
|
+
* Compares complete saved runs without evaluating again. The shared codecs must
|
|
19
|
+
* decode both runs and require no Effect services. Callers decide whether comparing
|
|
20
|
+
* different suites or program versions is meaningful.
|
|
21
|
+
*
|
|
22
|
+
* Results match by case hash and evaluation key. A match changes when its label
|
|
23
|
+
* or evaluated values change. Rows follow `to` order, followed by rows found only
|
|
24
|
+
* in `from`, in `from` order. Empty complete runs are valid comparison endpoints.
|
|
25
|
+
* Resolve missing baselines before calling; both endpoints must be saved runs.
|
|
26
|
+
* Incompatible codecs fail with `TestValueError`, which names the saved suite.
|
|
27
|
+
*/
|
|
28
|
+
export const compareRuns = internal.compareRuns;
|
|
29
|
+
/**
|
|
30
|
+
* Summarizes all matching results in a complete saved run. Each case contributes
|
|
31
|
+
* its timing once. Empty complete runs have zero counts and no timing values.
|
|
32
|
+
* The shared codecs must still read that run. The caller decides whether the
|
|
33
|
+
* stored values still have the same meaning. Resolve a missing baseline before
|
|
34
|
+
* calling; it differs from an empty run.
|
|
35
|
+
*/
|
|
36
|
+
export const summarizeRun = internal.summarizeRun;
|
|
3
37
|
export const diff = internal.diff;
|
|
4
|
-
export const makeSha256 = internal.makeSha256;
|
|
5
38
|
/** Builds the lookup key for one evaluation within its original test case. */
|
|
6
39
|
export const resultKey = internal.resultKey;
|
|
7
40
|
export const runCollectRecord = internal.runCollectRecord;
|
package/dist/esm/Test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Test.js","names":["internal","all","
|
|
1
|
+
{"version":3,"file":"Test.js","names":["Schema","internal","TestVariantRequired","TaggedError","testSuiteName","String","TestVariantNotFound","variant","selectVariant","all","compareRuns","summarizeRun","diff","resultKey","runCollectRecord","filterResults"],"sources":["../../src/Test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAIIA,MAAM,QAEH,QAAQ;AAGf,OAAO,KAAKC,QAAQ,MAAM,oBAAoB;AA2E9C,OAAM,MAAOC,mBAAoB,sBAAQF,MAAM,CAACG,WAAW,EAGxD,CAAC,qBAAqB,EAAE;EAACC,aAAa,EAAEJ,MAAM,CAACK;AAAM,CAAC,CAAC;AAE1D,OAAM,MAAOC,mBAAoB,sBAAQN,MAAM,CAACG,WAAW,EAGxD,CAAC,qBAAqB,EAAE;EACvBC,aAAa,EAAEJ,MAAM,CAACK,MAAM;EAC5BE,OAAO,EAAEP,MAAM,CAACK;CACnB,CAAC;AAqGF;AACA,OAAO,MAAMG,aAAa,GAAGP,QAAQ,CAACO,aAAa;AAEnD;;;;AAIA,OAAO,MAAMC,GAAG,GAAGR,QAAQ,CAACQ,GAAG;AAC/B;;;;;;;;;;;AAWA,OAAO,MAAMC,WAAW,GAAGT,QAAQ,CAACS,WAAW;AAC/C;;;;;;;AAOA,OAAO,MAAMC,YAAY,GAAGV,QAAQ,CAACU,YAAY;AACjD,OAAO,MAAMC,IAAI,GAAGX,QAAQ,CAACW,IAAI;AACjC;AACA,OAAO,MAAMC,SAAS,GAAGZ,QAAQ,CAACY,SAAS;AAC3C,OAAO,MAAMC,gBAAgB,GAAGb,QAAQ,CAACa,gBAAgB;AACzD;AACA,OAAO,MAAMC,aAAa,GAAGd,QAAQ,CAACc,aAAa","ignoreList":[]}
|
|
@@ -1,25 +1,16 @@
|
|
|
1
1
|
import * as Sqlite from '@effect/sql-sqlite-node';
|
|
2
2
|
import { Context, Layer } from 'effect';
|
|
3
3
|
import { makeTestRepository } from './internal/Test.repository.sqlite.js';
|
|
4
|
-
export { TestRun } from './
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}));
|
|
8
|
-
let testLayerCache;
|
|
9
|
-
export class TestRepository extends /*#__PURE__*/Context.Service()('TestRepository') {
|
|
10
|
-
// Lazy getters: makeTestRepository lives in an internal module that has
|
|
11
|
-
// its own import edge back here, so we evaluate these at access time
|
|
12
|
-
// rather than at class definition time to avoid the circular init order.
|
|
13
|
-
static get Live() {
|
|
14
|
-
return Layer.effect(this, makeTestRepository);
|
|
15
|
-
}
|
|
4
|
+
export { TestRun } from './TestRun.js';
|
|
5
|
+
export class TestRepository extends /*#__PURE__*/Context.Service()('@creative-introvert/tons-of-tests/TestRepository') {
|
|
6
|
+
static layerNoDeps = /*#__PURE__*/Layer.effect(this, makeTestRepository);
|
|
16
7
|
static layer(dbPath) {
|
|
17
|
-
return Layer.provide(this.
|
|
8
|
+
return Layer.provide(this.layerNoDeps, Sqlite.SqliteClient.layer({
|
|
18
9
|
filename: dbPath
|
|
19
10
|
}));
|
|
20
11
|
}
|
|
21
|
-
static
|
|
22
|
-
|
|
23
|
-
}
|
|
12
|
+
static TestLayer = /*#__PURE__*/Layer.provideMerge(this.layerNoDeps, /*#__PURE__*/Sqlite.SqliteClient.layer({
|
|
13
|
+
filename: ':memory:'
|
|
14
|
+
}));
|
|
24
15
|
}
|
|
25
16
|
//# sourceMappingURL=Test.repository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Test.repository.js","names":["Sqlite","Context","Layer","makeTestRepository","TestRun","
|
|
1
|
+
{"version":3,"file":"Test.repository.js","names":["Sqlite","Context","Layer","makeTestRepository","TestRun","TestRepository","Service","layerNoDeps","effect","layer","dbPath","provide","SqliteClient","filename","TestLayer","provideMerge"],"sources":["../../src/Test.repository.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,yBAAyB;AACjD,SACIC,OAAO,EAEPC,KAAK,QAIF,QAAQ;AAGf,SAAQC,kBAAkB,QAAO,sCAAsC;AAKvE,SAAQC,OAAO,QAAO,cAAc;AA0GpC,OAAM,MAAOC,cAAe,sBAAQJ,OAAO,CAACK,OAAO,EAGhD,CAAC,kDAAkD,CAAC;EACnD,OAAgBC,WAAW,gBAAGL,KAAK,CAACM,MAAM,CAAC,IAAI,EAAEL,kBAAkB,CAAC;EAEpE,OAAOM,KAAKA,CAACC,MAAc;IACvB,OAAOR,KAAK,CAACS,OAAO,CAChB,IAAI,CAACJ,WAAW,EAChBP,MAAM,CAACY,YAAY,CAACH,KAAK,CAAC;MAACI,QAAQ,EAAEH;IAAM,CAAC,CAAC,CAChD;EACL;EAEA,OAAgBI,SAAS,gBAAGZ,KAAK,CAACa,YAAY,CAC1C,IAAI,CAACR,WAAW,eAChBP,MAAM,CAACY,YAAY,CAACH,KAAK,CAAC;IAACI,QAAQ,EAAE;EAAU,CAAC,CAAC,CACpD","ignoreList":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
/**
|
|
3
|
+
* One saved execution of a suite variant. Results remain available after its
|
|
4
|
+
* program changes or is removed. `Complete` and `Failed` runs cannot be changed.
|
|
5
|
+
* Committing a complete run changes only its variant's baseline pointer.
|
|
6
|
+
*/
|
|
7
|
+
export class TestRun extends /*#__PURE__*/Schema.Class('TestRun')({
|
|
8
|
+
id: Schema.Int,
|
|
9
|
+
name: Schema.String,
|
|
10
|
+
variant: Schema.String,
|
|
11
|
+
state: /*#__PURE__*/Schema.Literals(['Running', 'Complete', 'Failed'])
|
|
12
|
+
}) {}
|
|
13
|
+
//# sourceMappingURL=TestRun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRun.js","names":["Schema","TestRun","Class","id","Int","name","String","variant","state","Literals"],"sources":["../../src/TestRun.ts"],"sourcesContent":[null],"mappings":"AAAA,SAAQA,MAAM,QAAO,QAAQ;AAE7B;;;;;AAKA,OAAM,MAAOC,OAAQ,sBAAQD,MAAM,CAACE,KAAK,CAGvC,SAAS,CAAC,CAAC;EACTC,EAAE,EAAEH,MAAM,CAACI,GAAG;EACdC,IAAI,EAAEL,MAAM,CAACM,MAAM;EACnBC,OAAO,EAAEP,MAAM,CAACM,MAAM;EACtBE,KAAK,eAAER,MAAM,CAACS,QAAQ,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;CAC3D,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
/** A suite value could not be converted without losing information. */
|
|
3
|
+
export class TestValueError extends /*#__PURE__*/Schema.TaggedError()('TestValueError', {
|
|
4
|
+
suite: Schema.String,
|
|
5
|
+
caseNumber: Schema.Int,
|
|
6
|
+
key: /*#__PURE__*/Schema.optionalKey(Schema.String),
|
|
7
|
+
field: /*#__PURE__*/Schema.Literals(['testCase.input', 'testCase.expected', 'evaluation.result', 'evaluation.expected']),
|
|
8
|
+
operation: /*#__PURE__*/Schema.Literals(['encode', 'decode', 'roundTrip']),
|
|
9
|
+
cause: /*#__PURE__*/Schema.instanceOf(Schema.SchemaError)
|
|
10
|
+
}) {
|
|
11
|
+
get message() {
|
|
12
|
+
const key = this.key === undefined ? '' : `, result ${this.key}`;
|
|
13
|
+
return `${this.suite}, case ${this.caseNumber}${key}, ${this.field} (${this.operation}): ${this.cause.message}`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=TestValueError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestValueError.js","names":["Schema","TestValueError","TaggedError","suite","String","caseNumber","Int","key","optionalKey","field","Literals","operation","cause","instanceOf","SchemaError","message","undefined"],"sources":["../../src/TestValueError.ts"],"sourcesContent":[null],"mappings":"AAAA,SAAQA,MAAM,QAAO,QAAQ;AAE7B;AACA,OAAM,MAAOC,cAAe,sBAAQD,MAAM,CAACE,WAAW,EAGnD,CAAC,gBAAgB,EAAE;EAClBC,KAAK,EAAEH,MAAM,CAACI,MAAM;EACpBC,UAAU,EAAEL,MAAM,CAACM,GAAG;EACtBC,GAAG,eAAEP,MAAM,CAACQ,WAAW,CAACR,MAAM,CAACI,MAAM,CAAC;EACtCK,KAAK,eAAET,MAAM,CAACU,QAAQ,CAAC,CACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,CACxB,CAAC;EACFC,SAAS,eAAEX,MAAM,CAACU,QAAQ,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;EAC7DE,KAAK,eAAEZ,MAAM,CAACa,UAAU,CAACb,MAAM,CAACc,WAAW;CAC9C,CAAC;EACE,IAAaC,OAAOA,CAAA;IAChB,MAAMR,GAAG,GAAG,IAAI,CAACA,GAAG,KAAKS,SAAS,GAAG,EAAE,GAAG,YAAY,IAAI,CAACT,GAAG,EAAE;IAChE,OAAO,GAAG,IAAI,CAACJ,KAAK,UAAU,IAAI,CAACE,UAAU,GAAGE,GAAG,KAAK,IAAI,CAACE,KAAK,KAAK,IAAI,CAACE,SAAS,MAAM,IAAI,CAACC,KAAK,CAACG,OAAO,EAAE;EACnH","ignoreList":[]}
|
package/dist/esm/index.js
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/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Classify","DisplayConfig","Error","
|
|
1
|
+
{"version":3,"file":"index.js","names":["Classify","DisplayConfig","Error","Show","Test","TestRepository"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,QAAQ,MAAM,eAAe;AACzC,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AACnD,OAAO,KAAKC,KAAK,MAAM,sBAAsB;AAC7C,OAAO,KAAKC,IAAI,MAAM,WAAW;AACjC,OAAO,KAAKC,IAAI,MAAM,WAAW;AACjC,OAAO,KAAKC,cAAc,MAAM,sBAAsB","ignoreList":[]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { isDeepStrictEqual } from 'node:util';
|
|
2
1
|
import { Option, Schema } from 'effect';
|
|
3
2
|
export const values = {
|
|
4
3
|
TN: 'TN',
|
|
@@ -7,12 +6,6 @@ export const values = {
|
|
|
7
6
|
FN: 'FN'
|
|
8
7
|
};
|
|
9
8
|
export const LabelSchema = /*#__PURE__*/Schema.Literals(['TP', 'TN', 'FP', 'FN']);
|
|
10
|
-
export const defaultIsEqual = (a, b) =>
|
|
11
|
-
// FIXME: Expensive, but don't know how else to cheaply remove
|
|
12
|
-
// `undefined`, which is a common source of false results.
|
|
13
|
-
// Parsing the output w/ a schema would be better, or
|
|
14
|
-
// forbidding `undefined`.
|
|
15
|
-
isDeepStrictEqual(JSON.parse(JSON.stringify(a)), JSON.parse(JSON.stringify(b)));
|
|
16
9
|
export const defaultIsNil = x => x === null || x === undefined;
|
|
17
10
|
export const makeClassify = ({
|
|
18
11
|
isEqual,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Classify.js","names":["
|
|
1
|
+
{"version":3,"file":"Classify.js","names":["Option","Schema","values","TN","TP","FP","FN","LabelSchema","Literals","defaultIsNil","x","undefined","makeClassify","isEqual","isOutputNil","isExpectedNil","output","expected","oNil","eNil","precision","m","r","Number","isNaN","recall","min","xs","reduce","POSITIVE_INFINITY","max","NEGATIVE_INFINITY","mean","length","a","b","median","none","sorted","slice","sort","index","Math","floor","fromNullishOr"],"sources":["../../../src/internal/Classify.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,63 +1,17 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { Clock, Effect, Option, pipe, Schema, Sink, Stream } from 'effect';
|
|
3
3
|
import { Stats } from '../Classify.js';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const {
|
|
12
|
-
hashTestCase,
|
|
13
|
-
key,
|
|
14
|
-
label,
|
|
15
|
-
input,
|
|
16
|
-
result,
|
|
17
|
-
expected
|
|
18
|
-
} = args;
|
|
19
|
-
// Reordering cases or evaluations must not change a result's identity.
|
|
20
|
-
// Tags and timing also stay out of the ID.
|
|
21
|
-
const id = makeSha256({
|
|
22
|
-
hashTestCase,
|
|
23
|
-
key,
|
|
24
|
-
label,
|
|
25
|
-
input,
|
|
26
|
-
result,
|
|
27
|
-
expected
|
|
28
|
-
});
|
|
29
|
-
return {
|
|
30
|
-
...args,
|
|
31
|
-
id
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
};
|
|
4
|
+
import { TestVariantNotFound, TestVariantRequired } from '../Test.js';
|
|
5
|
+
import { TestRepository } from '../Test.repository.js';
|
|
6
|
+
import { TestRunIncomplete, TestRunNotFound } from '../RepositoryError.js';
|
|
7
|
+
import { makeResultCodec, makeValueCodec, stringifyJson } from './Test.serialization.js';
|
|
8
|
+
import { makeClassify, median, precision, recall } from './Classify.js';
|
|
9
|
+
/** Hash already encoded JSON. Object key order does not affect identity. */
|
|
10
|
+
export const makeSha256 = input => createHash('sha256').update(stringifyJson(input)).digest('hex');
|
|
35
11
|
export const resultKey = ({
|
|
36
12
|
hashTestCase,
|
|
37
13
|
key
|
|
38
14
|
}) => JSON.stringify([hashTestCase, key]);
|
|
39
|
-
const defaultClassify = /*#__PURE__*/makeClassify({
|
|
40
|
-
isEqual: defaultIsEqual
|
|
41
|
-
});
|
|
42
|
-
const defaultEvaluate = (result, expected) => [{
|
|
43
|
-
key: 'result',
|
|
44
|
-
result,
|
|
45
|
-
expected,
|
|
46
|
-
label: defaultClassify(result, expected)
|
|
47
|
-
}];
|
|
48
|
-
export const TestResultSchema = /*#__PURE__*/Schema.Struct({
|
|
49
|
-
id: Schema.String,
|
|
50
|
-
hashTestCase: Schema.String,
|
|
51
|
-
key: Schema.String,
|
|
52
|
-
ordering: Schema.Int,
|
|
53
|
-
resultOrdering: Schema.Int,
|
|
54
|
-
input: Schema.Unknown,
|
|
55
|
-
result: Schema.Unknown,
|
|
56
|
-
expected: Schema.Unknown,
|
|
57
|
-
label: LabelSchema,
|
|
58
|
-
tags: /*#__PURE__*/Schema.Array(Schema.String),
|
|
59
|
-
timeMillis: Schema.Finite
|
|
60
|
-
});
|
|
61
15
|
export const test = /*#__PURE__*/Effect.fnUntraced(function* ({
|
|
62
16
|
testCase: {
|
|
63
17
|
input,
|
|
@@ -65,13 +19,11 @@ export const test = /*#__PURE__*/Effect.fnUntraced(function* ({
|
|
|
65
19
|
tags,
|
|
66
20
|
ordering
|
|
67
21
|
},
|
|
22
|
+
hashTestCase,
|
|
68
23
|
program,
|
|
69
|
-
evaluate
|
|
24
|
+
evaluate,
|
|
25
|
+
encodeResult
|
|
70
26
|
}) {
|
|
71
|
-
const hashTestCase = makeSha256({
|
|
72
|
-
input,
|
|
73
|
-
expected
|
|
74
|
-
});
|
|
75
27
|
const t0 = yield* Clock.currentTimeNanos;
|
|
76
28
|
const result = yield* program(input);
|
|
77
29
|
const t1 = yield* Clock.currentTimeNanos;
|
|
@@ -88,53 +40,173 @@ export const test = /*#__PURE__*/Effect.fnUntraced(function* ({
|
|
|
88
40
|
}
|
|
89
41
|
keys.add(key);
|
|
90
42
|
}
|
|
91
|
-
return
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
43
|
+
return yield* Effect.forEach(evaluations, (evaluation, resultOrdering) => Effect.gen(function* () {
|
|
44
|
+
const args = {
|
|
45
|
+
...evaluation,
|
|
46
|
+
hashTestCase,
|
|
47
|
+
ordering,
|
|
48
|
+
resultOrdering,
|
|
49
|
+
input,
|
|
50
|
+
tags: tags ?? [],
|
|
51
|
+
timeMillis: Number(t1 - t0) / 1_000_000
|
|
52
|
+
};
|
|
53
|
+
const encoded = yield* encodeResult(args);
|
|
54
|
+
// Ordering, tags, and timing do not change result identity.
|
|
55
|
+
return {
|
|
56
|
+
...args,
|
|
57
|
+
id: makeSha256({
|
|
58
|
+
hashTestCase,
|
|
59
|
+
key: evaluation.key,
|
|
60
|
+
label: evaluation.label,
|
|
61
|
+
input: encoded.input,
|
|
62
|
+
result: encoded.result,
|
|
63
|
+
expected: encoded.expected
|
|
64
|
+
})
|
|
65
|
+
};
|
|
99
66
|
}));
|
|
100
67
|
});
|
|
101
|
-
export
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
68
|
+
export function selectVariant(suite, variant) {
|
|
69
|
+
const suiteName = suite.name;
|
|
70
|
+
return Effect.suspend(() => {
|
|
71
|
+
if (Object.hasOwn(suite, 'program') === Object.hasOwn(suite, 'variants')) {
|
|
72
|
+
return Effect.die(new Error(`${suite.name}: define exactly one of program and variants`));
|
|
73
|
+
}
|
|
74
|
+
if (suite.program !== undefined) {
|
|
75
|
+
if (typeof suite.program !== 'function') {
|
|
76
|
+
return Effect.die(new Error(`${suiteName}: program must be a function`));
|
|
77
|
+
}
|
|
78
|
+
return variant === undefined || variant === 'default' ? Effect.succeed({
|
|
79
|
+
name: 'default',
|
|
80
|
+
program: suite.program
|
|
81
|
+
}) : Effect.fail(new TestVariantNotFound({
|
|
82
|
+
testSuiteName: suite.name,
|
|
83
|
+
variant
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
if (suite.variants === undefined || suite.variants === null || typeof suite.variants !== 'object' || Array.isArray(suite.variants)) {
|
|
87
|
+
return Effect.die(new Error(`${suite.name}: variants must be a map of programs`));
|
|
88
|
+
}
|
|
89
|
+
for (const [name, definition] of Object.entries(suite.variants)) {
|
|
90
|
+
if (name.length === 0 || name.includes(',') || name.startsWith('run:')) {
|
|
91
|
+
return Effect.die(new Error(`${suite.name}: invalid variant ID ${JSON.stringify(name)}`));
|
|
92
|
+
}
|
|
93
|
+
if (definition === null || typeof definition !== 'object' || typeof definition.program !== 'function') {
|
|
94
|
+
return Effect.die(new Error(`${suite.name}: variant ${JSON.stringify(name)} must define a program`));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (variant === undefined) {
|
|
98
|
+
return Effect.fail(new TestVariantRequired({
|
|
99
|
+
testSuiteName: suite.name
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
return Object.hasOwn(suite.variants, variant) ? Effect.succeed({
|
|
103
|
+
name: variant,
|
|
104
|
+
program: suite.variants[variant].program
|
|
105
|
+
}) : Effect.fail(new TestVariantNotFound({
|
|
106
|
+
testSuiteName: suite.name,
|
|
107
|
+
variant
|
|
108
|
+
}));
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
export function all(suite, options = {}) {
|
|
112
|
+
return executeAll(suite, options);
|
|
113
|
+
}
|
|
114
|
+
const executeAll = (suite, {
|
|
115
|
+
variant,
|
|
116
|
+
concurrency = 1
|
|
105
117
|
}) => {
|
|
106
118
|
if (suite.evaluate === undefined) {
|
|
107
|
-
|
|
119
|
+
if (!Object.is(suite.schemas.evaluation.result, suite.schemas.evaluation.expected)) {
|
|
120
|
+
return Stream.die(new Error(`${suite.name}: without evaluate, evaluation.result and evaluation.expected must reuse the same schema`));
|
|
121
|
+
}
|
|
122
|
+
const classify = makeClassify({
|
|
123
|
+
isEqual: Schema.toEquivalence(Schema.Union([suite.schemas.evaluation.result, suite.schemas.evaluation.expected]))
|
|
124
|
+
});
|
|
125
|
+
return executeAll({
|
|
108
126
|
...suite,
|
|
109
|
-
evaluate:
|
|
127
|
+
evaluate: (result, expected) => [{
|
|
128
|
+
key: 'result',
|
|
129
|
+
result,
|
|
130
|
+
expected,
|
|
131
|
+
label: classify(result, expected)
|
|
132
|
+
}]
|
|
110
133
|
}, {
|
|
134
|
+
variant,
|
|
111
135
|
concurrency
|
|
112
136
|
});
|
|
113
137
|
}
|
|
114
138
|
const {
|
|
115
139
|
testCases,
|
|
116
|
-
|
|
117
|
-
|
|
140
|
+
evaluate,
|
|
141
|
+
schemas
|
|
118
142
|
} = suite;
|
|
143
|
+
const inputCodec = makeValueCodec(schemas.testCase.input);
|
|
144
|
+
const expectedCodec = makeValueCodec(schemas.testCase.expected);
|
|
145
|
+
const {
|
|
146
|
+
encode: encodeResult
|
|
147
|
+
} = makeResultCodec(schemas, suite.name);
|
|
119
148
|
const total = Stream.isStream(testCases) ? undefined : testCases.length;
|
|
120
149
|
const testCases$ = Stream.isStream(testCases) ? testCases : Stream.fromIterable(testCases);
|
|
121
|
-
return
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
testCase,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
150
|
+
return Stream.unwrap(Effect.map(selectVariant(suite, variant), ({
|
|
151
|
+
program
|
|
152
|
+
}) => {
|
|
153
|
+
const seen = new Set();
|
|
154
|
+
return pipe(testCases$, Stream.zipWithIndex, Stream.mapEffect(Effect.fnUntraced(function* ([testCase, ordering]) {
|
|
155
|
+
const context = {
|
|
156
|
+
suite: suite.name,
|
|
157
|
+
caseNumber: ordering + 1
|
|
158
|
+
};
|
|
159
|
+
const input = yield* inputCodec.encode(testCase.input, {
|
|
160
|
+
...context,
|
|
161
|
+
field: 'testCase.input'
|
|
162
|
+
});
|
|
163
|
+
const expected = yield* expectedCodec.encode(testCase.expected, {
|
|
164
|
+
...context,
|
|
165
|
+
field: 'testCase.expected'
|
|
166
|
+
});
|
|
167
|
+
return {
|
|
168
|
+
testCase: {
|
|
169
|
+
...testCase,
|
|
170
|
+
ordering
|
|
171
|
+
},
|
|
172
|
+
hashTestCase: makeSha256({
|
|
173
|
+
input,
|
|
174
|
+
expected
|
|
175
|
+
})
|
|
176
|
+
};
|
|
177
|
+
})), Stream.filterEffect(({
|
|
178
|
+
testCase,
|
|
179
|
+
hashTestCase
|
|
180
|
+
}) => {
|
|
181
|
+
if (seen.has(hashTestCase)) {
|
|
182
|
+
return Effect.logWarning('Skipping duplicate test case.', {
|
|
183
|
+
suite: suite.name,
|
|
184
|
+
hashTestCase,
|
|
185
|
+
caseNumber: testCase.ordering + 1
|
|
186
|
+
}).pipe(Effect.as(false));
|
|
187
|
+
}
|
|
188
|
+
seen.add(hashTestCase);
|
|
189
|
+
return Effect.succeed(true);
|
|
190
|
+
}), Stream.mapEffect(({
|
|
191
|
+
testCase,
|
|
192
|
+
hashTestCase
|
|
193
|
+
}) => test({
|
|
194
|
+
testCase,
|
|
195
|
+
hashTestCase,
|
|
196
|
+
program,
|
|
197
|
+
evaluate,
|
|
198
|
+
encodeResult
|
|
199
|
+
}), {
|
|
200
|
+
concurrency,
|
|
201
|
+
unordered: false
|
|
202
|
+
}), Stream.tap(testResults => {
|
|
203
|
+
const i = testResults[0].ordering + 1;
|
|
204
|
+
const stride = total === undefined ? 10 : Math.max(Math.floor(total * 0.05), 10);
|
|
205
|
+
const isMilestone = i === 1 || i % stride === 0 || total !== undefined && i === total;
|
|
206
|
+
if (!isMilestone) return Effect.void;
|
|
207
|
+
return Effect.logDebug(total === undefined ? `progress ${i}` : `progress ${i}/${total}`);
|
|
208
|
+
}), Stream.flattenIterable);
|
|
209
|
+
}));
|
|
138
210
|
};
|
|
139
211
|
const emptyAcc = () => ({
|
|
140
212
|
testResultsByKey: {},
|
|
@@ -188,7 +260,8 @@ const finish = (testRun, acc) => {
|
|
|
188
260
|
return {
|
|
189
261
|
id: testRun.id,
|
|
190
262
|
name: testRun.name,
|
|
191
|
-
|
|
263
|
+
variant: testRun.variant,
|
|
264
|
+
state: testRun.state,
|
|
192
265
|
testResultsByKey: acc.testResultsByKey,
|
|
193
266
|
testResultKeys: acc.testResultKeys,
|
|
194
267
|
testCaseHashes: [...acc.timesByTestCaseHash.keys()],
|
|
@@ -222,4 +295,71 @@ export const diff = ({
|
|
|
222
295
|
recall: stats.recall - previousStats.recall
|
|
223
296
|
})
|
|
224
297
|
}));
|
|
298
|
+
const requireComplete = /*#__PURE__*/Effect.fnUntraced(function* (repository, run) {
|
|
299
|
+
const saved = yield* repository.getTestRun(run.id);
|
|
300
|
+
if (Option.isNone(saved)) {
|
|
301
|
+
return yield* new TestRunNotFound({
|
|
302
|
+
testRunId: run.id
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
if (saved.value.state !== 'Complete') {
|
|
306
|
+
return yield* new TestRunIncomplete({
|
|
307
|
+
testSuiteName: saved.value.name,
|
|
308
|
+
testRunId: saved.value.id,
|
|
309
|
+
variant: saved.value.variant
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
return saved.value;
|
|
313
|
+
});
|
|
314
|
+
export const compareRuns = ({
|
|
315
|
+
from,
|
|
316
|
+
to,
|
|
317
|
+
schemas
|
|
318
|
+
}) => Stream.unwrap(Effect.gen(function* () {
|
|
319
|
+
const repository = yield* TestRepository;
|
|
320
|
+
const savedFrom = yield* requireComplete(repository, from);
|
|
321
|
+
const savedTo = yield* requireComplete(repository, to);
|
|
322
|
+
const resultEquals = Schema.toEquivalence(schemas.evaluation.result);
|
|
323
|
+
const expectedEquals = Schema.toEquivalence(schemas.evaluation.expected);
|
|
324
|
+
const matchingTo = repository.getTestResultsStream(savedTo, schemas).pipe(Stream.grouped(50), Stream.mapEffect(Effect.fnUntraced(function* (batch) {
|
|
325
|
+
const matches = yield* repository.getTestResultsStream(savedFrom, schemas, batch).pipe(Stream.runCollect);
|
|
326
|
+
const byKey = new Map(matches.map(result => [resultKey(result), result]));
|
|
327
|
+
return batch.map(to => {
|
|
328
|
+
const from = byKey.get(resultKey(to));
|
|
329
|
+
return from === undefined ? {
|
|
330
|
+
_tag: 'OnlyTo',
|
|
331
|
+
to
|
|
332
|
+
} : {
|
|
333
|
+
_tag: 'Matched',
|
|
334
|
+
from,
|
|
335
|
+
to,
|
|
336
|
+
changed: from.label !== to.label || !resultEquals(from.result, to.result) || !expectedEquals(from.expected, to.expected)
|
|
337
|
+
};
|
|
338
|
+
});
|
|
339
|
+
})), Stream.flattenIterable);
|
|
340
|
+
const onlyFrom = repository.getTestResultsStream(savedFrom, schemas).pipe(Stream.grouped(50), Stream.mapEffect(Effect.fnUntraced(function* (batch) {
|
|
341
|
+
const matches = yield* repository.getTestResultsStream(savedTo, schemas, batch).pipe(Stream.runCollect);
|
|
342
|
+
const keys = new Set(matches.map(resultKey));
|
|
343
|
+
return batch.filter(from => !keys.has(resultKey(from))).map(from => ({
|
|
344
|
+
_tag: 'OnlyFrom',
|
|
345
|
+
from
|
|
346
|
+
}));
|
|
347
|
+
})), Stream.flattenIterable);
|
|
348
|
+
return matchingTo.pipe(Stream.concat(onlyFrom));
|
|
349
|
+
}));
|
|
350
|
+
export const summarizeRun = /*#__PURE__*/Effect.fnUntraced(function* ({
|
|
351
|
+
run,
|
|
352
|
+
schemas,
|
|
353
|
+
predicate
|
|
354
|
+
}) {
|
|
355
|
+
const repository = yield* TestRepository;
|
|
356
|
+
const saved = yield* requireComplete(repository, run);
|
|
357
|
+
return yield* repository.withStats(collector => Effect.gen(function* () {
|
|
358
|
+
yield* repository.getTestResultsStream(saved, schemas).pipe(Stream.filter(predicate ?? (() => true)), Stream.grouped(50), Stream.runForEach(collector.add));
|
|
359
|
+
return {
|
|
360
|
+
run: saved,
|
|
361
|
+
stats: yield* collector.stats
|
|
362
|
+
};
|
|
363
|
+
}));
|
|
364
|
+
});
|
|
225
365
|
//# sourceMappingURL=Test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Test.js","names":["createHash","Clock","Effect","Option","pipe","Schema","Sink","Stream","Stats","defaultIsEqual","LabelSchema","makeClassify","median","precision","recall","makeSha256","input","update","JSON","stringify","digest","TestResult","make","args","hashTestCase","key","label","result","expected","id","resultKey","defaultClassify","isEqual","defaultEvaluate","TestResultSchema","Struct","String","ordering","Int","resultOrdering","Unknown","tags","Array","timeMillis","Finite","test","fnUntraced","testCase","program","evaluate","t0","currentTimeNanos","t1","evaluations","length","die","Error","keys","Set","has","add","map","evaluation","Number","all","suite","concurrency","undefined","testCases","total","isStream","testCases$","fromIterable","zipWithIndex","mapEffect","unordered","tap","testResults","i","stride","Math","max","floor","isMilestone","void","logDebug","flattenIterable","emptyAcc","testResultsByKey","testResultKeys","timesByTestCaseHash","Map","TP","TN","FP","FN","appendResult","acc","r","push","set","finish","testRun","times","values","timeSum","timeMin","POSITIVE_INFINITY","timeMax","NEGATIVE_INFINITY","time","stats","size","timeMean","some","none","timeMedian","name","hash","testCaseHashes","runCollectRecord","testResults$","run","reduce","filterResults","predicate","diff","previousTestRun","match","onNone","onSome","previousStats"],"sources":["../../../src/internal/Test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Test.js","names":["createHash","Clock","Effect","Option","pipe","Schema","Sink","Stream","Stats","TestVariantNotFound","TestVariantRequired","TestRepository","TestRunIncomplete","TestRunNotFound","makeResultCodec","makeValueCodec","stringifyJson","makeClassify","median","precision","recall","makeSha256","input","update","digest","resultKey","hashTestCase","key","JSON","stringify","test","fnUntraced","testCase","expected","tags","ordering","program","evaluate","encodeResult","t0","currentTimeNanos","result","t1","evaluations","length","die","Error","keys","Set","has","add","forEach","evaluation","resultOrdering","gen","args","timeMillis","Number","encoded","id","label","selectVariant","suite","variant","suiteName","name","suspend","Object","hasOwn","undefined","succeed","fail","testSuiteName","variants","Array","isArray","definition","entries","includes","startsWith","all","options","executeAll","concurrency","is","schemas","classify","isEqual","toEquivalence","Union","testCases","inputCodec","expectedCodec","encode","total","isStream","testCases$","fromIterable","unwrap","map","seen","zipWithIndex","mapEffect","context","caseNumber","field","filterEffect","logWarning","as","unordered","tap","testResults","i","stride","Math","max","floor","isMilestone","void","logDebug","flattenIterable","emptyAcc","testResultsByKey","testResultKeys","timesByTestCaseHash","Map","TP","TN","FP","FN","appendResult","acc","r","push","set","finish","testRun","times","values","timeSum","timeMin","POSITIVE_INFINITY","timeMax","NEGATIVE_INFINITY","time","stats","size","timeMean","some","none","timeMedian","state","testCaseHashes","runCollectRecord","testResults$","run","reduce","filterResults","predicate","diff","previousTestRun","match","onNone","onSome","previousStats","requireComplete","repository","saved","getTestRun","isNone","testRunId","value","compareRuns","from","to","savedFrom","savedTo","resultEquals","expectedEquals","matchingTo","getTestResultsStream","grouped","batch","matches","runCollect","byKey","get","_tag","changed","onlyFrom","filter","concat","summarizeRun","withStats","collector","runForEach"],"sources":["../../../src/internal/Test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|