@creative-introvert/tons-of-tests 1.2.0 → 2.1.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 +200 -134
- package/dist/cjs/Classify.js +18 -31
- package/dist/cjs/Classify.js.map +1 -1
- package/dist/cjs/DisplayConfig.js +2 -20
- package/dist/cjs/DisplayConfig.js.map +1 -1
- package/dist/cjs/RepositoryError.js +4 -5
- package/dist/cjs/RepositoryError.js.map +1 -1
- package/dist/cjs/Test.js +7 -21
- package/dist/cjs/Test.js.map +1 -1
- package/dist/cjs/Test.repository.js +3 -21
- package/dist/cjs/Test.repository.js.map +1 -1
- package/dist/cjs/Test.repository.types.js.map +1 -1
- package/dist/cjs/index.js +2 -20
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/Classify.js +2 -2
- package/dist/cjs/internal/Classify.js.map +1 -1
- package/dist/cjs/internal/Test.js +123 -80
- package/dist/cjs/internal/Test.js.map +1 -1
- package/dist/cjs/internal/Test.repository.sqlite.js +118 -79
- package/dist/cjs/internal/Test.repository.sqlite.js.map +1 -1
- package/dist/cjs/internal/common.js +1 -5
- package/dist/cjs/internal/common.js.map +1 -1
- package/dist/cjs/internal/diff.js +1 -5
- package/dist/cjs/internal/diff.js.map +1 -1
- package/dist/cjs/internal/format-diff.js +2 -6
- package/dist/cjs/internal/format-diff.js.map +1 -1
- package/dist/cjs/internal/lib/Schema.js +3 -3
- package/dist/cjs/internal/lib/Schema.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/contexts/diff.js +1 -5
- package/dist/cjs/internal/lib/jsondiffpatch/contexts/diff.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/contexts/patch.js +1 -5
- package/dist/cjs/internal/lib/jsondiffpatch/contexts/patch.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/contexts/reverse.js +1 -5
- package/dist/cjs/internal/lib/jsondiffpatch/contexts/reverse.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/diffpatcher.js +3 -25
- package/dist/cjs/internal/lib/jsondiffpatch/diffpatcher.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/filters/arrays.js +1 -5
- package/dist/cjs/internal/lib/jsondiffpatch/filters/arrays.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/filters/nested.js +1 -5
- package/dist/cjs/internal/lib/jsondiffpatch/filters/nested.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/formatters/annotated.js +1 -5
- package/dist/cjs/internal/lib/jsondiffpatch/formatters/annotated.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/formatters/html.js +1 -5
- package/dist/cjs/internal/lib/jsondiffpatch/formatters/html.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/formatters/jsonpatch.js +1 -5
- package/dist/cjs/internal/lib/jsondiffpatch/formatters/jsonpatch.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/index.js +1 -5
- package/dist/cjs/internal/lib/jsondiffpatch/index.js.map +1 -1
- package/dist/cjs/internal/lib/jsondiffpatch/with-text-diffs.js +1 -5
- package/dist/cjs/internal/lib/jsondiffpatch/with-text-diffs.js.map +1 -1
- package/dist/cjs/internal/pack.js +28 -50
- package/dist/cjs/internal/pack.js.map +1 -1
- package/dist/cjs/internal/stats.js +9 -7
- package/dist/cjs/internal/stats.js.map +1 -1
- package/dist/cjs/internal/summarize.js +19 -18
- package/dist/cjs/internal/summarize.js.map +1 -1
- package/dist/cjs/package.json +1 -0
- package/dist/dts/Classify.d.ts +24 -57
- package/dist/dts/Classify.d.ts.map +1 -1
- package/dist/dts/DisplayConfig.d.ts +2 -1
- package/dist/dts/DisplayConfig.d.ts.map +1 -1
- package/dist/dts/RepositoryError.d.ts +21 -22
- package/dist/dts/RepositoryError.d.ts.map +1 -1
- package/dist/dts/Show.d.ts +3 -3
- package/dist/dts/Show.d.ts.map +1 -1
- package/dist/dts/Test.d.ts +53 -23
- package/dist/dts/Test.d.ts.map +1 -1
- package/dist/dts/Test.repository.d.ts +4 -4
- package/dist/dts/Test.repository.d.ts.map +1 -1
- package/dist/dts/Test.repository.types.d.ts +16 -20
- package/dist/dts/Test.repository.types.d.ts.map +1 -1
- package/dist/dts/internal/Classify.d.ts +1 -1
- package/dist/dts/internal/Classify.d.ts.map +1 -1
- package/dist/dts/internal/Test.d.ts +24 -12
- package/dist/dts/internal/Test.d.ts.map +1 -1
- package/dist/dts/internal/Test.repository.sqlite.d.ts +3 -2
- package/dist/dts/internal/Test.repository.sqlite.d.ts.map +1 -1
- package/dist/dts/internal/lib/Schema.d.ts +2 -2
- package/dist/dts/internal/lib/Schema.d.ts.map +1 -1
- package/dist/dts/internal/lib/jsondiffpatch/filters/lcs.d.ts +2 -1
- package/dist/dts/internal/lib/jsondiffpatch/filters/lcs.d.ts.map +1 -1
- package/dist/dts/internal/pack.d.ts.map +1 -1
- package/dist/dts/internal/stats.d.ts.map +1 -1
- package/dist/dts/internal/summarize.d.ts.map +1 -1
- package/dist/esm/Classify.js +28 -50
- package/dist/esm/Classify.js.map +1 -1
- package/dist/esm/DisplayConfig.js +2 -28
- package/dist/esm/DisplayConfig.js.map +1 -1
- package/dist/esm/RepositoryError.js +13 -24
- package/dist/esm/RepositoryError.js.map +1 -1
- package/dist/esm/Show.js +3 -26
- package/dist/esm/Show.js.map +1 -1
- package/dist/esm/Test.js +9 -12
- package/dist/esm/Test.js.map +1 -1
- package/dist/esm/Test.repository.js +8 -41
- package/dist/esm/Test.repository.js.map +1 -1
- package/dist/esm/Test.repository.types.js +5 -12
- package/dist/esm/Test.repository.types.js.map +1 -1
- package/dist/esm/index.js +7 -45
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/Classify.js +16 -31
- package/dist/esm/internal/Classify.js.map +1 -1
- package/dist/esm/internal/DisplayConfig.js +1 -8
- package/dist/esm/internal/DisplayConfig.js.map +1 -1
- package/dist/esm/internal/Test.js +144 -113
- package/dist/esm/internal/Test.js.map +1 -1
- package/dist/esm/internal/Test.repository.sqlite.js +186 -160
- package/dist/esm/internal/Test.repository.sqlite.js.map +1 -1
- package/dist/esm/internal/common.js +15 -32
- package/dist/esm/internal/common.js.map +1 -1
- package/dist/esm/internal/diff.js +18 -30
- package/dist/esm/internal/diff.js.map +1 -1
- package/dist/esm/internal/format-diff.js +9 -22
- package/dist/esm/internal/format-diff.js.map +1 -1
- package/dist/esm/internal/lib/Schema.js +4 -11
- package/dist/esm/internal/lib/Schema.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/clone.js +1 -7
- package/dist/esm/internal/lib/jsondiffpatch/clone.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/contexts/context.js +1 -8
- package/dist/esm/internal/lib/jsondiffpatch/contexts/context.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/contexts/diff.js +5 -16
- package/dist/esm/internal/lib/jsondiffpatch/contexts/diff.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/contexts/patch.js +3 -14
- package/dist/esm/internal/lib/jsondiffpatch/contexts/patch.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/contexts/reverse.js +3 -14
- package/dist/esm/internal/lib/jsondiffpatch/contexts/reverse.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/date-reviver.js +1 -7
- package/dist/esm/internal/lib/jsondiffpatch/date-reviver.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/diffpatcher.js +20 -51
- package/dist/esm/internal/lib/jsondiffpatch/diffpatcher.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/filters/arrays.js +16 -28
- package/dist/esm/internal/lib/jsondiffpatch/filters/arrays.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/filters/dates.js +1 -7
- package/dist/esm/internal/lib/jsondiffpatch/filters/dates.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/filters/lcs.js +1 -7
- package/dist/esm/internal/lib/jsondiffpatch/filters/lcs.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/filters/nested.js +13 -27
- package/dist/esm/internal/lib/jsondiffpatch/filters/nested.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/filters/texts.js +3 -9
- package/dist/esm/internal/lib/jsondiffpatch/filters/texts.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/filters/trivial.js +3 -9
- package/dist/esm/internal/lib/jsondiffpatch/filters/trivial.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/formatters/annotated.js +4 -16
- package/dist/esm/internal/lib/jsondiffpatch/formatters/annotated.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/formatters/base.js +1 -7
- package/dist/esm/internal/lib/jsondiffpatch/formatters/base.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/formatters/html.js +6 -21
- package/dist/esm/internal/lib/jsondiffpatch/formatters/html.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/formatters/jsonpatch.js +6 -20
- package/dist/esm/internal/lib/jsondiffpatch/formatters/jsonpatch.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/index.js +15 -42
- package/dist/esm/internal/lib/jsondiffpatch/index.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/pipe.js +1 -7
- package/dist/esm/internal/lib/jsondiffpatch/pipe.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/processor.js +1 -7
- package/dist/esm/internal/lib/jsondiffpatch/processor.js.map +1 -1
- package/dist/esm/internal/lib/jsondiffpatch/types.js +1 -6
- package/dist/esm/internal/lib/jsondiffpatch/with-text-diffs.js +22 -49
- package/dist/esm/internal/lib/jsondiffpatch/with-text-diffs.js.map +1 -1
- package/dist/esm/internal/pack.js +26 -55
- package/dist/esm/internal/pack.js.map +1 -1
- package/dist/esm/internal/stats.js +29 -35
- package/dist/esm/internal/stats.js.map +1 -1
- package/dist/esm/internal/summarize.js +45 -52
- package/dist/esm/internal/summarize.js.map +1 -1
- package/package.json +11 -9
- package/dist/cjs/Error.js +0 -10
- package/dist/cjs/Error.js.map +0 -1
- package/dist/cjs/internal/Classify.spec.js +0 -223
- package/dist/cjs/internal/Classify.spec.js.map +0 -1
- package/dist/cjs/internal/Test.repository.sqlite.spec.js +0 -294
- package/dist/cjs/internal/Test.repository.sqlite.spec.js.map +0 -1
- package/dist/cjs/internal/Test.spec.js +0 -260
- package/dist/cjs/internal/Test.spec.js.map +0 -1
- package/dist/cjs/internal/format-diff.spec.js +0 -103
- package/dist/cjs/internal/format-diff.spec.js.map +0 -1
- package/dist/cjs/pack.js +0 -28
- package/dist/cjs/pack.js.map +0 -1
- package/dist/dts/Error.d.ts +0 -10
- package/dist/dts/Error.d.ts.map +0 -1
- package/dist/dts/internal/Classify.spec.d.ts +0 -2
- package/dist/dts/internal/Classify.spec.d.ts.map +0 -1
- package/dist/dts/internal/Test.repository.sqlite.spec.d.ts +0 -2
- package/dist/dts/internal/Test.repository.sqlite.spec.d.ts.map +0 -1
- package/dist/dts/internal/Test.spec.d.ts +0 -2
- package/dist/dts/internal/Test.spec.d.ts.map +0 -1
- package/dist/dts/internal/format-diff.spec.d.ts +0 -2
- package/dist/dts/internal/format-diff.spec.d.ts.map +0 -1
- package/dist/dts/pack.d.ts +0 -2
- package/dist/dts/pack.d.ts.map +0 -1
- package/dist/esm/Error.js +0 -10
- package/dist/esm/Error.js.map +0 -1
- package/dist/esm/internal/Classify.spec.js +0 -223
- package/dist/esm/internal/Classify.spec.js.map +0 -1
- package/dist/esm/internal/Test.repository.sqlite.spec.js +0 -294
- package/dist/esm/internal/Test.repository.sqlite.spec.js.map +0 -1
- package/dist/esm/internal/Test.spec.js +0 -241
- package/dist/esm/internal/Test.spec.js.map +0 -1
- package/dist/esm/internal/format-diff.spec.js +0 -103
- package/dist/esm/internal/format-diff.spec.js.map +0 -1
- package/dist/esm/pack.js +0 -28
- package/dist/esm/pack.js.map +0 -1
|
@@ -1,66 +1,64 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var _nodePerf_hooks = /*#__PURE__*/require("node:perf_hooks");
|
|
9
|
-
var _effect = /*#__PURE__*/require("effect");
|
|
10
|
-
var _Classify = /*#__PURE__*/require("../Classify.js");
|
|
11
|
-
var _Classify2 = /*#__PURE__*/require("./Classify.js");
|
|
12
|
-
const makeSha256 = input => {
|
|
13
|
-
return (0, _nodeCrypto.createHash)('sha256').update(JSON.stringify(input)).digest('hex');
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { Clock, Effect, Option, pipe, Schema, Sink, Stream } from 'effect';
|
|
3
|
+
import { Stats } from '../Classify.js';
|
|
4
|
+
import { defaultIsEqual, LabelSchema, makeClassify, median, precision, recall } from './Classify.js';
|
|
5
|
+
export const makeSha256 = input => {
|
|
6
|
+
// This public synchronous helper keeps result IDs stable across releases.
|
|
7
|
+
return createHash('sha256').update(JSON.stringify(input)).digest('hex');
|
|
14
8
|
};
|
|
15
|
-
exports.makeSha256 = makeSha256;
|
|
16
9
|
const TestResult = {
|
|
17
10
|
make: args => {
|
|
18
11
|
const {
|
|
12
|
+
hashTestCase,
|
|
13
|
+
key,
|
|
19
14
|
label,
|
|
20
15
|
input,
|
|
21
16
|
result,
|
|
22
17
|
expected
|
|
23
18
|
} = args;
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
// Without `tags`, as those are just for filtering.
|
|
19
|
+
// Reordering cases or evaluations must not change a result's identity.
|
|
20
|
+
// Tags and timing also stay out of the ID.
|
|
27
21
|
const id = makeSha256({
|
|
22
|
+
hashTestCase,
|
|
23
|
+
key,
|
|
28
24
|
label,
|
|
29
25
|
input,
|
|
30
26
|
result,
|
|
31
27
|
expected
|
|
32
28
|
});
|
|
33
|
-
const hashTestCase = makeSha256({
|
|
34
|
-
input,
|
|
35
|
-
expected
|
|
36
|
-
});
|
|
37
29
|
return {
|
|
38
30
|
...args,
|
|
39
|
-
id
|
|
40
|
-
hashTestCase
|
|
31
|
+
id
|
|
41
32
|
};
|
|
42
33
|
}
|
|
43
34
|
};
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
expected: _effect.Schema.Unknown,
|
|
51
|
-
label: _Classify2.LabelSchema,
|
|
52
|
-
tags: /*#__PURE__*/_effect.Schema.Array(_effect.Schema.String),
|
|
53
|
-
timeMillis: _effect.Schema.Number
|
|
35
|
+
export const resultKey = ({
|
|
36
|
+
hashTestCase,
|
|
37
|
+
key
|
|
38
|
+
}) => JSON.stringify([hashTestCase, key]);
|
|
39
|
+
const defaultClassify = /*#__PURE__*/makeClassify({
|
|
40
|
+
isEqual: defaultIsEqual
|
|
54
41
|
});
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
+
export const test = /*#__PURE__*/Effect.fnUntraced(function* ({
|
|
64
62
|
testCase: {
|
|
65
63
|
input,
|
|
66
64
|
expected,
|
|
@@ -68,116 +66,150 @@ const test = ({
|
|
|
68
66
|
ordering
|
|
69
67
|
},
|
|
70
68
|
program,
|
|
71
|
-
|
|
72
|
-
})
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
69
|
+
evaluate
|
|
70
|
+
}) {
|
|
71
|
+
const hashTestCase = makeSha256({
|
|
72
|
+
input,
|
|
73
|
+
expected
|
|
74
|
+
});
|
|
75
|
+
const t0 = yield* Clock.currentTimeNanos;
|
|
76
|
+
const result = yield* program(input);
|
|
77
|
+
const t1 = yield* Clock.currentTimeNanos;
|
|
78
|
+
const evaluations = evaluate(result, expected);
|
|
79
|
+
if (evaluations.length === 0) {
|
|
80
|
+
return yield* Effect.die(new Error('evaluate must return at least one result'));
|
|
81
|
+
}
|
|
82
|
+
const keys = new Set();
|
|
83
|
+
for (const {
|
|
84
|
+
key
|
|
85
|
+
} of evaluations) {
|
|
86
|
+
if (key.length === 0 || keys.has(key)) {
|
|
87
|
+
return yield* Effect.die(new Error('evaluate must return non-empty keys that are unique within each test case'));
|
|
88
|
+
}
|
|
89
|
+
keys.add(key);
|
|
90
|
+
}
|
|
91
|
+
return evaluations.map((evaluation, resultOrdering) => TestResult.make({
|
|
92
|
+
...evaluation,
|
|
93
|
+
hashTestCase,
|
|
94
|
+
ordering,
|
|
95
|
+
resultOrdering,
|
|
96
|
+
input,
|
|
97
|
+
tags: tags ?? [],
|
|
98
|
+
timeMillis: Number(t1 - t0) / 1_000_000
|
|
85
99
|
}));
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
const all = ({
|
|
89
|
-
testCases,
|
|
90
|
-
program,
|
|
91
|
-
classify = (0, _Classify2.makeClassify)({
|
|
92
|
-
isEqual: _Classify2.defaultIsEqual
|
|
93
|
-
})
|
|
94
|
-
}, {
|
|
100
|
+
});
|
|
101
|
+
export const all = (suite, {
|
|
95
102
|
concurrency
|
|
96
103
|
} = {
|
|
97
104
|
concurrency: 1
|
|
98
105
|
}) => {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
if (suite.evaluate === undefined) {
|
|
107
|
+
return all({
|
|
108
|
+
...suite,
|
|
109
|
+
evaluate: defaultEvaluate
|
|
110
|
+
}, {
|
|
111
|
+
concurrency
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
const {
|
|
115
|
+
testCases,
|
|
116
|
+
program,
|
|
117
|
+
evaluate
|
|
118
|
+
} = suite;
|
|
119
|
+
const total = Stream.isStream(testCases) ? undefined : testCases.length;
|
|
120
|
+
const testCases$ = Stream.isStream(testCases) ? testCases : Stream.fromIterable(testCases);
|
|
121
|
+
return pipe(testCases$, Stream.zipWithIndex, Stream.map(([testCase, ordering]) => ({
|
|
102
122
|
...testCase,
|
|
103
123
|
ordering
|
|
104
|
-
})),
|
|
124
|
+
})), Stream.mapEffect(testCase => test({
|
|
105
125
|
testCase,
|
|
106
126
|
program,
|
|
107
|
-
|
|
127
|
+
evaluate
|
|
108
128
|
}), {
|
|
109
129
|
concurrency,
|
|
110
130
|
unordered: false
|
|
111
|
-
}),
|
|
112
|
-
const i =
|
|
131
|
+
}), Stream.tap(testResults => {
|
|
132
|
+
const i = testResults[0].ordering + 1;
|
|
113
133
|
const stride = total === undefined ? 10 : Math.max(Math.floor(total * 0.05), 10);
|
|
114
134
|
const isMilestone = i === 1 || i % stride === 0 || total !== undefined && i === total;
|
|
115
|
-
if (!isMilestone) return
|
|
116
|
-
return
|
|
117
|
-
}));
|
|
135
|
+
if (!isMilestone) return Effect.void;
|
|
136
|
+
return Effect.logDebug(total === undefined ? `progress ${i}` : `progress ${i}/${total}`);
|
|
137
|
+
}), Stream.flattenIterable);
|
|
118
138
|
};
|
|
119
|
-
exports.all = all;
|
|
120
139
|
const emptyAcc = () => ({
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
140
|
+
testResultsByKey: {},
|
|
141
|
+
testResultKeys: [],
|
|
142
|
+
timesByTestCaseHash: new Map(),
|
|
124
143
|
TP: 0,
|
|
125
144
|
TN: 0,
|
|
126
145
|
FP: 0,
|
|
127
|
-
FN: 0
|
|
128
|
-
timeSum: 0,
|
|
129
|
-
timeMin: Number.POSITIVE_INFINITY,
|
|
130
|
-
timeMax: Number.NEGATIVE_INFINITY
|
|
146
|
+
FN: 0
|
|
131
147
|
});
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
acc.times.push(r.timeMillis);
|
|
140
|
-
acc.timeSum += r.timeMillis;
|
|
141
|
-
if (r.timeMillis < acc.timeMin) acc.timeMin = r.timeMillis;
|
|
142
|
-
if (r.timeMillis > acc.timeMax) acc.timeMax = r.timeMillis;
|
|
148
|
+
const appendResult = (acc, r) => {
|
|
149
|
+
const key = resultKey(r);
|
|
150
|
+
acc.testResultsByKey[key] = r;
|
|
151
|
+
acc.testResultKeys.push(key);
|
|
152
|
+
if (!acc.timesByTestCaseHash.has(r.hashTestCase)) {
|
|
153
|
+
acc.timesByTestCaseHash.set(r.hashTestCase, r.timeMillis);
|
|
154
|
+
}
|
|
143
155
|
if (r.label === 'TP') acc.TP++;else if (r.label === 'TN') acc.TN++;else if (r.label === 'FP') acc.FP++;else acc.FN++;
|
|
144
156
|
return acc;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
const
|
|
148
|
-
|
|
157
|
+
};
|
|
158
|
+
const finish = (testRun, acc) => {
|
|
159
|
+
const times = [...acc.timesByTestCaseHash.values()];
|
|
160
|
+
let timeSum = 0;
|
|
161
|
+
let timeMin = Number.POSITIVE_INFINITY;
|
|
162
|
+
let timeMax = Number.NEGATIVE_INFINITY;
|
|
163
|
+
for (const time of times) {
|
|
164
|
+
timeSum += time;
|
|
165
|
+
if (time < timeMin) timeMin = time;
|
|
166
|
+
if (time > timeMax) timeMax = time;
|
|
167
|
+
}
|
|
168
|
+
const stats = new Stats({
|
|
149
169
|
TP: acc.TP,
|
|
150
170
|
TN: acc.TN,
|
|
151
171
|
FP: acc.FP,
|
|
152
172
|
FN: acc.FN,
|
|
153
|
-
total,
|
|
154
|
-
|
|
173
|
+
total: acc.testResultKeys.length,
|
|
174
|
+
testCases: acc.timesByTestCaseHash.size,
|
|
175
|
+
precision: precision({
|
|
155
176
|
TP: acc.TP,
|
|
156
177
|
FP: acc.FP
|
|
157
178
|
}),
|
|
158
|
-
recall:
|
|
179
|
+
recall: recall({
|
|
159
180
|
TP: acc.TP,
|
|
160
181
|
FN: acc.FN
|
|
161
182
|
}),
|
|
162
|
-
timeMean:
|
|
163
|
-
timeMin:
|
|
164
|
-
timeMax:
|
|
165
|
-
timeMedian:
|
|
183
|
+
timeMean: times.length > 0 ? Option.some(timeSum / times.length) : Option.none(),
|
|
184
|
+
timeMin: times.length > 0 ? Option.some(timeMin) : Option.none(),
|
|
185
|
+
timeMax: times.length > 0 ? Option.some(timeMax) : Option.none(),
|
|
186
|
+
timeMedian: median(times)
|
|
166
187
|
});
|
|
167
188
|
return {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
189
|
+
id: testRun.id,
|
|
190
|
+
name: testRun.name,
|
|
191
|
+
hash: testRun.hash,
|
|
192
|
+
testResultsByKey: acc.testResultsByKey,
|
|
193
|
+
testResultKeys: acc.testResultKeys,
|
|
194
|
+
testCaseHashes: [...acc.timesByTestCaseHash.keys()],
|
|
171
195
|
stats
|
|
172
196
|
};
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const
|
|
197
|
+
};
|
|
198
|
+
export const runCollectRecord = testRun => testResults$ => testResults$.pipe(Stream.run(Sink.reduce(emptyAcc, appendResult)), Effect.map(acc => finish(testRun, acc)));
|
|
199
|
+
export const filterResults = (testRun, predicate) => {
|
|
200
|
+
const acc = emptyAcc();
|
|
201
|
+
for (const key of testRun.testResultKeys) {
|
|
202
|
+
const result = testRun.testResultsByKey[key];
|
|
203
|
+
if (predicate(result)) appendResult(acc, result);
|
|
204
|
+
}
|
|
205
|
+
return finish(testRun, acc);
|
|
206
|
+
};
|
|
207
|
+
export const diff = ({
|
|
176
208
|
testRun: {
|
|
177
209
|
stats
|
|
178
210
|
},
|
|
179
211
|
previousTestRun
|
|
180
|
-
}) => previousTestRun.pipe(
|
|
212
|
+
}) => previousTestRun.pipe(Option.match({
|
|
181
213
|
onNone: () => stats,
|
|
182
214
|
onSome: ({
|
|
183
215
|
stats: previousStats
|
|
@@ -190,5 +222,4 @@ const diff = ({
|
|
|
190
222
|
recall: stats.recall - previousStats.recall
|
|
191
223
|
})
|
|
192
224
|
}));
|
|
193
|
-
exports.diff = diff;
|
|
194
225
|
//# sourceMappingURL=Test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Test.js","names":["
|
|
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":[]}
|