ppef 1.1.0 → 1.2.1

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.
Files changed (171) hide show
  1. package/README.md +76 -125
  2. package/dist/__tests__/cli/evaluate-command.integration.test.d.ts +8 -0
  3. package/dist/__tests__/cli/evaluate-command.integration.test.d.ts.map +1 -0
  4. package/dist/__tests__/cli/evaluate-command.integration.test.js +308 -0
  5. package/dist/__tests__/cli/evaluate-command.integration.test.js.map +1 -0
  6. package/dist/__tests__/evaluators/claims-evaluator.unit.test.d.ts +8 -0
  7. package/dist/__tests__/evaluators/claims-evaluator.unit.test.d.ts.map +1 -0
  8. package/dist/__tests__/evaluators/claims-evaluator.unit.test.js +405 -0
  9. package/dist/__tests__/evaluators/claims-evaluator.unit.test.js.map +1 -0
  10. package/dist/__tests__/evaluators/metrics-evaluator.unit.test.d.ts +8 -0
  11. package/dist/__tests__/evaluators/metrics-evaluator.unit.test.d.ts.map +1 -0
  12. package/dist/__tests__/evaluators/metrics-evaluator.unit.test.js +424 -0
  13. package/dist/__tests__/evaluators/metrics-evaluator.unit.test.js.map +1 -0
  14. package/dist/__tests__/evaluators/registry.unit.test.d.ts +7 -0
  15. package/dist/__tests__/evaluators/registry.unit.test.d.ts.map +1 -0
  16. package/dist/__tests__/evaluators/registry.unit.test.js +173 -0
  17. package/dist/__tests__/evaluators/registry.unit.test.js.map +1 -0
  18. package/dist/__tests__/evaluators/robustness-evaluator.unit.test.d.ts +8 -0
  19. package/dist/__tests__/evaluators/robustness-evaluator.unit.test.d.ts.map +1 -0
  20. package/dist/__tests__/evaluators/robustness-evaluator.unit.test.js +260 -0
  21. package/dist/__tests__/evaluators/robustness-evaluator.unit.test.js.map +1 -0
  22. package/dist/__tests__/framework-pipeline.integration.test.js +36 -9
  23. package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -1
  24. package/dist/__tests__/index-exports.unit.test.js +9 -12
  25. package/dist/__tests__/index-exports.unit.test.js.map +1 -1
  26. package/dist/aggregation/pipeline.d.ts.map +1 -1
  27. package/dist/aggregation/pipeline.js +40 -3
  28. package/dist/aggregation/pipeline.js.map +1 -1
  29. package/dist/claims/index.d.ts +6 -3
  30. package/dist/claims/index.d.ts.map +1 -1
  31. package/dist/claims/index.js +6 -3
  32. package/dist/claims/index.js.map +1 -1
  33. package/dist/cli/__tests__/aggregate.command.unit.test.js +3 -0
  34. package/dist/cli/__tests__/aggregate.command.unit.test.js.map +1 -1
  35. package/dist/cli/__tests__/binary-sut.integration.test.d.ts +8 -0
  36. package/dist/cli/__tests__/binary-sut.integration.test.d.ts.map +1 -0
  37. package/dist/cli/__tests__/binary-sut.integration.test.js +165 -0
  38. package/dist/cli/__tests__/binary-sut.integration.test.js.map +1 -0
  39. package/dist/cli/__tests__/config-loader.unit.test.d.ts +7 -0
  40. package/dist/cli/__tests__/config-loader.unit.test.d.ts.map +1 -0
  41. package/dist/cli/__tests__/config-loader.unit.test.js +611 -0
  42. package/dist/cli/__tests__/config-loader.unit.test.js.map +1 -0
  43. package/dist/cli/command-deps.d.ts +13 -1
  44. package/dist/cli/command-deps.d.ts.map +1 -1
  45. package/dist/cli/commands/aggregate.d.ts.map +1 -1
  46. package/dist/cli/commands/aggregate.js +3 -0
  47. package/dist/cli/commands/aggregate.js.map +1 -1
  48. package/dist/cli/commands/evaluate.d.ts +41 -0
  49. package/dist/cli/commands/evaluate.d.ts.map +1 -0
  50. package/dist/cli/commands/evaluate.js +287 -0
  51. package/dist/cli/commands/evaluate.js.map +1 -0
  52. package/dist/cli/commands/run.d.ts.map +1 -1
  53. package/dist/cli/commands/run.js +93 -1
  54. package/dist/cli/commands/run.js.map +1 -1
  55. package/dist/cli/index.d.ts +2 -1
  56. package/dist/cli/index.d.ts.map +1 -1
  57. package/dist/cli/index.js +3 -1
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/cli/module-loader.d.ts +23 -1
  60. package/dist/cli/module-loader.d.ts.map +1 -1
  61. package/dist/cli/module-loader.js +19 -1
  62. package/dist/cli/module-loader.js.map +1 -1
  63. package/dist/cli/types.d.ts +19 -0
  64. package/dist/cli/types.d.ts.map +1 -1
  65. package/dist/evaluators/claims-evaluator.d.ts +87 -0
  66. package/dist/evaluators/claims-evaluator.d.ts.map +1 -0
  67. package/dist/evaluators/claims-evaluator.js +289 -0
  68. package/dist/evaluators/claims-evaluator.js.map +1 -0
  69. package/dist/evaluators/exploratory-evaluator.d.ts +136 -0
  70. package/dist/evaluators/exploratory-evaluator.d.ts.map +1 -0
  71. package/dist/evaluators/exploratory-evaluator.js +545 -0
  72. package/dist/evaluators/exploratory-evaluator.js.map +1 -0
  73. package/dist/evaluators/index.d.ts +13 -0
  74. package/dist/evaluators/index.d.ts.map +1 -0
  75. package/dist/evaluators/index.js +14 -0
  76. package/dist/evaluators/index.js.map +1 -0
  77. package/dist/evaluators/metrics-evaluator.d.ts +114 -0
  78. package/dist/evaluators/metrics-evaluator.d.ts.map +1 -0
  79. package/dist/evaluators/metrics-evaluator.js +433 -0
  80. package/dist/evaluators/metrics-evaluator.js.map +1 -0
  81. package/dist/evaluators/registry.d.ts +106 -0
  82. package/dist/evaluators/registry.d.ts.map +1 -0
  83. package/dist/evaluators/registry.js +148 -0
  84. package/dist/evaluators/registry.js.map +1 -0
  85. package/dist/evaluators/robustness-evaluator.d.ts +57 -0
  86. package/dist/evaluators/robustness-evaluator.d.ts.map +1 -0
  87. package/dist/evaluators/robustness-evaluator.js +186 -0
  88. package/dist/evaluators/robustness-evaluator.js.map +1 -0
  89. package/dist/executor/__tests__/binary-sut.unit.test.d.ts +8 -0
  90. package/dist/executor/__tests__/binary-sut.unit.test.d.ts.map +1 -0
  91. package/dist/executor/__tests__/binary-sut.unit.test.js +313 -0
  92. package/dist/executor/__tests__/binary-sut.unit.test.js.map +1 -0
  93. package/dist/executor/__tests__/checkpoint-storage.unit.test.js +43 -0
  94. package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -1
  95. package/dist/executor/__tests__/executor.unit.test.js +56 -9
  96. package/dist/executor/__tests__/executor.unit.test.js.map +1 -1
  97. package/dist/executor/__tests__/resource-calculator.unit.test.d.ts +10 -0
  98. package/dist/executor/__tests__/resource-calculator.unit.test.d.ts.map +1 -0
  99. package/dist/executor/__tests__/resource-calculator.unit.test.js +104 -0
  100. package/dist/executor/__tests__/resource-calculator.unit.test.js.map +1 -0
  101. package/dist/executor/__tests__/worker-threads-executor.unit.test.d.ts +8 -0
  102. package/dist/executor/__tests__/worker-threads-executor.unit.test.d.ts.map +1 -0
  103. package/dist/executor/__tests__/worker-threads-executor.unit.test.js +276 -0
  104. package/dist/executor/__tests__/worker-threads-executor.unit.test.js.map +1 -0
  105. package/dist/executor/binary-sut.d.ts +105 -0
  106. package/dist/executor/binary-sut.d.ts.map +1 -0
  107. package/dist/executor/binary-sut.js +174 -0
  108. package/dist/executor/binary-sut.js.map +1 -0
  109. package/dist/executor/checkpoint-storage.d.ts.map +1 -1
  110. package/dist/executor/checkpoint-storage.js +6 -4
  111. package/dist/executor/checkpoint-storage.js.map +1 -1
  112. package/dist/executor/executor.d.ts +28 -0
  113. package/dist/executor/executor.d.ts.map +1 -1
  114. package/dist/executor/executor.js +85 -24
  115. package/dist/executor/executor.js.map +1 -1
  116. package/dist/executor/index.d.ts +4 -0
  117. package/dist/executor/index.d.ts.map +1 -1
  118. package/dist/executor/index.js +4 -0
  119. package/dist/executor/index.js.map +1 -1
  120. package/dist/executor/resource-calculator.d.ts +49 -0
  121. package/dist/executor/resource-calculator.d.ts.map +1 -0
  122. package/dist/executor/resource-calculator.js +129 -0
  123. package/dist/executor/resource-calculator.js.map +1 -0
  124. package/dist/executor/worker-entry.js +26 -10
  125. package/dist/executor/worker-entry.js.map +1 -1
  126. package/dist/executor/worker-executor.d.ts +104 -3
  127. package/dist/executor/worker-executor.d.ts.map +1 -1
  128. package/dist/executor/worker-executor.js +224 -4
  129. package/dist/executor/worker-executor.js.map +1 -1
  130. package/dist/executor/worker-threads-executor.d.ts +245 -0
  131. package/dist/executor/worker-threads-executor.d.ts.map +1 -0
  132. package/dist/executor/worker-threads-executor.js +332 -0
  133. package/dist/executor/worker-threads-executor.js.map +1 -0
  134. package/dist/index.d.ts +1 -0
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +4 -2
  137. package/dist/index.js.map +1 -1
  138. package/dist/renderers/latex-renderer.d.ts +60 -0
  139. package/dist/renderers/latex-renderer.d.ts.map +1 -1
  140. package/dist/renderers/latex-renderer.js +299 -0
  141. package/dist/renderers/latex-renderer.js.map +1 -1
  142. package/dist/renderers/types.d.ts +9 -0
  143. package/dist/renderers/types.d.ts.map +1 -1
  144. package/dist/renderers/types.js.map +1 -1
  145. package/dist/robustness/index.d.ts +5 -2
  146. package/dist/robustness/index.d.ts.map +1 -1
  147. package/dist/robustness/index.js +4 -2
  148. package/dist/robustness/index.js.map +1 -1
  149. package/dist/types/evaluator.d.ts +449 -0
  150. package/dist/types/evaluator.d.ts.map +1 -0
  151. package/dist/types/evaluator.js +9 -0
  152. package/dist/types/evaluator.js.map +1 -0
  153. package/dist/types/result.d.ts +2 -0
  154. package/dist/types/result.d.ts.map +1 -1
  155. package/package.json +2 -2
  156. package/dist/claims/__tests__/evaluator.unit.test.d.ts +0 -12
  157. package/dist/claims/__tests__/evaluator.unit.test.d.ts.map +0 -1
  158. package/dist/claims/__tests__/evaluator.unit.test.js +0 -801
  159. package/dist/claims/__tests__/evaluator.unit.test.js.map +0 -1
  160. package/dist/claims/evaluator.d.ts +0 -33
  161. package/dist/claims/evaluator.d.ts.map +0 -1
  162. package/dist/claims/evaluator.js +0 -174
  163. package/dist/claims/evaluator.js.map +0 -1
  164. package/dist/robustness/__tests__/analyzer.unit.test.d.ts +0 -11
  165. package/dist/robustness/__tests__/analyzer.unit.test.d.ts.map +0 -1
  166. package/dist/robustness/__tests__/analyzer.unit.test.js +0 -455
  167. package/dist/robustness/__tests__/analyzer.unit.test.js.map +0 -1
  168. package/dist/robustness/analyzer.d.ts +0 -61
  169. package/dist/robustness/analyzer.d.ts.map +0 -1
  170. package/dist/robustness/analyzer.js +0 -191
  171. package/dist/robustness/analyzer.js.map +0 -1
@@ -0,0 +1,424 @@
1
+ /**
2
+ * Unit tests for Metrics Evaluator
3
+ *
4
+ * Tests the metrics evaluator functionality including threshold,
5
+ * baseline, and target-range criteria.
6
+ */
7
+ import { describe, it } from "node:test";
8
+ import { strict as assert } from "node:assert";
9
+ import { MetricsEvaluator } from "../../evaluators/metrics-evaluator.js";
10
+ import { createMockAggregate, createMockSummaryStats } from "../test-helpers.js";
11
+ /**
12
+ * Test helpers
13
+ */
14
+ function createTestCriterion(overrides) {
15
+ return {
16
+ criterionId: "C001",
17
+ description: "Test criterion",
18
+ type: "threshold",
19
+ metric: "accuracy",
20
+ sut: "primary-sut",
21
+ threshold: { operator: "gte", value: 0.8 },
22
+ ...overrides,
23
+ };
24
+ }
25
+ function createTestContext(aggregates) {
26
+ return {
27
+ aggregates,
28
+ metadata: { source: "test" },
29
+ };
30
+ }
31
+ describe("MetricsEvaluator", () => {
32
+ describe("validateConfig", () => {
33
+ const evaluator = new MetricsEvaluator();
34
+ it("should validate empty criteria array with warning", () => {
35
+ const config = { criteria: [] };
36
+ const result = evaluator.validateConfig(config);
37
+ assert.equal(result.valid, true);
38
+ assert.ok(result.warnings?.some((w) => w.includes("No criteria")));
39
+ });
40
+ it("should invalidate when criteria is not an array", () => {
41
+ const config = { criteria: "not-an-array" };
42
+ const result = evaluator.validateConfig(config);
43
+ assert.equal(result.valid, false);
44
+ assert.ok(result.errors?.includes("criteria must be an array"));
45
+ });
46
+ it("should invalidate when criteria is missing", () => {
47
+ const config = {};
48
+ const result = evaluator.validateConfig(config);
49
+ assert.equal(result.valid, false);
50
+ assert.ok(result.errors?.includes("criteria must be an array"));
51
+ });
52
+ it("should validate threshold criterion", () => {
53
+ const config = {
54
+ criteria: [
55
+ createTestCriterion({
56
+ type: "threshold",
57
+ threshold: { operator: "gt", value: 100 },
58
+ }),
59
+ ],
60
+ };
61
+ const result = evaluator.validateConfig(config);
62
+ assert.equal(result.valid, true);
63
+ });
64
+ it("should validate baseline criterion", () => {
65
+ const config = {
66
+ criteria: [
67
+ createTestCriterion({
68
+ type: "baseline",
69
+ baseline: { sut: "baseline-sut", operator: "gt" },
70
+ }),
71
+ ],
72
+ };
73
+ const result = evaluator.validateConfig(config);
74
+ assert.equal(result.valid, true);
75
+ });
76
+ it("should validate target-range criterion", () => {
77
+ const config = {
78
+ criteria: [
79
+ createTestCriterion({
80
+ type: "target-range",
81
+ targetRange: { min: 50, max: 100 },
82
+ }),
83
+ ],
84
+ };
85
+ const result = evaluator.validateConfig(config);
86
+ assert.equal(result.valid, true);
87
+ });
88
+ it("should invalidate threshold criterion with missing threshold", () => {
89
+ const criterion = createTestCriterion({ type: "threshold" });
90
+ delete criterion.threshold;
91
+ const config = { criteria: [criterion] };
92
+ const result = evaluator.validateConfig(config);
93
+ assert.equal(result.valid, false);
94
+ });
95
+ it("should invalidate baseline criterion with missing baseline", () => {
96
+ const criterion = createTestCriterion({ type: "baseline" });
97
+ delete criterion.baseline;
98
+ const config = { criteria: [criterion] };
99
+ const result = evaluator.validateConfig(config);
100
+ assert.equal(result.valid, false);
101
+ });
102
+ it("should invalidate target-range criterion with missing targetRange", () => {
103
+ const criterion = createTestCriterion({ type: "target-range" });
104
+ delete criterion.targetRange;
105
+ const config = { criteria: [criterion] };
106
+ const result = evaluator.validateConfig(config);
107
+ assert.equal(result.valid, false);
108
+ });
109
+ it("should invalidate criterion with missing required fields", () => {
110
+ const config = {
111
+ criteria: [
112
+ {
113
+ criterionId: "",
114
+ description: "",
115
+ type: "threshold",
116
+ metric: "",
117
+ sut: "",
118
+ threshold: { operator: "gt", value: 0 },
119
+ },
120
+ ],
121
+ };
122
+ const result = evaluator.validateConfig(config);
123
+ assert.equal(result.valid, false);
124
+ assert.ok(result.errors !== undefined && result.errors.length > 0);
125
+ });
126
+ });
127
+ describe("evaluate - threshold criteria", () => {
128
+ const evaluator = new MetricsEvaluator();
129
+ it("should pass gt threshold when value exceeds threshold", () => {
130
+ const config = {
131
+ criteria: [
132
+ createTestCriterion({
133
+ type: "threshold",
134
+ metric: "accuracy",
135
+ threshold: { operator: "gt", value: 0.8 },
136
+ }),
137
+ ],
138
+ };
139
+ const aggregates = [
140
+ createMockAggregate("primary-sut", "primary", undefined, {
141
+ accuracy: createMockSummaryStats([0.85]),
142
+ }),
143
+ ];
144
+ const context = createTestContext(aggregates);
145
+ const result = evaluator.evaluate(config, context);
146
+ assert.equal(result.type, "metrics");
147
+ assert.equal(result.data.summary.total, 1);
148
+ assert.equal(result.data.summary.passed, 1);
149
+ assert.equal(result.data.summary.failed, 0);
150
+ });
151
+ it("should fail gte threshold when value equals threshold", () => {
152
+ const config = {
153
+ criteria: [
154
+ createTestCriterion({
155
+ type: "threshold",
156
+ metric: "accuracy",
157
+ threshold: { operator: "gt", value: 0.8 },
158
+ }),
159
+ ],
160
+ };
161
+ const aggregates = [
162
+ createMockAggregate("primary-sut", "primary", undefined, {
163
+ accuracy: createMockSummaryStats([0.8]),
164
+ }),
165
+ ];
166
+ const context = createTestContext(aggregates);
167
+ const result = evaluator.evaluate(config, context);
168
+ assert.equal(result.data.summary.failed, 1);
169
+ assert.equal(result.data.summary.passed, 0);
170
+ });
171
+ it("should pass gte threshold when value equals threshold", () => {
172
+ const config = {
173
+ criteria: [
174
+ createTestCriterion({
175
+ type: "threshold",
176
+ metric: "accuracy",
177
+ threshold: { operator: "gte", value: 0.8 },
178
+ }),
179
+ ],
180
+ };
181
+ const aggregates = [
182
+ createMockAggregate("primary-sut", "primary", undefined, {
183
+ accuracy: createMockSummaryStats([0.8]),
184
+ }),
185
+ ];
186
+ const context = createTestContext(aggregates);
187
+ const result = evaluator.evaluate(config, context);
188
+ assert.equal(result.data.summary.passed, 1);
189
+ });
190
+ it("should be inconclusive when metric not found", () => {
191
+ const config = {
192
+ criteria: [
193
+ createTestCriterion({
194
+ type: "threshold",
195
+ metric: "missing-metric",
196
+ threshold: { operator: "gt", value: 0.8 },
197
+ }),
198
+ ],
199
+ };
200
+ const aggregates = [
201
+ createMockAggregate("primary-sut", "primary", undefined, {
202
+ accuracy: createMockSummaryStats([0.85]),
203
+ }),
204
+ ];
205
+ const context = createTestContext(aggregates);
206
+ const result = evaluator.evaluate(config, context);
207
+ assert.equal(result.data.summary.inconclusive, 1);
208
+ });
209
+ it("should handle multiple SUTs with wildcard", () => {
210
+ const config = {
211
+ criteria: [
212
+ createTestCriterion({
213
+ criterionId: "C001",
214
+ sut: "*",
215
+ type: "threshold",
216
+ metric: "accuracy",
217
+ threshold: { operator: "gte", value: 0.8 },
218
+ }),
219
+ ],
220
+ };
221
+ const aggregates = [
222
+ createMockAggregate("sut-1", "primary", undefined, {
223
+ accuracy: createMockSummaryStats([0.85]),
224
+ }),
225
+ createMockAggregate("sut-2", "primary", undefined, {
226
+ accuracy: createMockSummaryStats([0.75]),
227
+ }),
228
+ ];
229
+ const context = createTestContext(aggregates);
230
+ const result = evaluator.evaluate(config, context);
231
+ assert.equal(result.data.summary.total, 1); // 1 criterion
232
+ assert.equal(result.data.summary.failed, 1); // sut-2 fails
233
+ });
234
+ });
235
+ describe("evaluate - baseline criteria", () => {
236
+ const evaluator = new MetricsEvaluator();
237
+ it("should pass baseline comparison", () => {
238
+ const config = {
239
+ criteria: [
240
+ createTestCriterion({
241
+ type: "baseline",
242
+ baseline: { sut: "baseline-sut", operator: "gt" },
243
+ }),
244
+ ],
245
+ };
246
+ const aggregates = [
247
+ createMockAggregate("primary-sut", "primary", undefined, {
248
+ accuracy: createMockSummaryStats([0.85]),
249
+ }),
250
+ createMockAggregate("baseline-sut", "baseline", undefined, {
251
+ accuracy: createMockSummaryStats([0.75]),
252
+ }),
253
+ ];
254
+ const context = createTestContext(aggregates);
255
+ const result = evaluator.evaluate(config, context);
256
+ assert.equal(result.data.summary.passed, 1);
257
+ });
258
+ it("should fail when below baseline", () => {
259
+ const config = {
260
+ criteria: [
261
+ createTestCriterion({
262
+ type: "baseline",
263
+ baseline: { sut: "baseline-sut", operator: "gt" },
264
+ }),
265
+ ],
266
+ };
267
+ const aggregates = [
268
+ createMockAggregate("primary-sut", "primary", undefined, {
269
+ accuracy: createMockSummaryStats([0.7]),
270
+ }),
271
+ createMockAggregate("baseline-sut", "baseline", undefined, {
272
+ accuracy: createMockSummaryStats([0.8]),
273
+ }),
274
+ ];
275
+ const context = createTestContext(aggregates);
276
+ const result = evaluator.evaluate(config, context);
277
+ assert.equal(result.data.summary.failed, 1);
278
+ });
279
+ it("should be inconclusive when baseline SUT not found", () => {
280
+ const config = {
281
+ criteria: [
282
+ createTestCriterion({
283
+ type: "baseline",
284
+ baseline: { sut: "missing-baseline", operator: "gt" },
285
+ }),
286
+ ],
287
+ };
288
+ const aggregates = [
289
+ createMockAggregate("primary-sut", "primary", undefined, {
290
+ accuracy: createMockSummaryStats([0.85]),
291
+ }),
292
+ ];
293
+ const context = createTestContext(aggregates);
294
+ const result = evaluator.evaluate(config, context);
295
+ assert.equal(result.data.summary.inconclusive, 1);
296
+ });
297
+ });
298
+ describe("evaluate - target-range criteria", () => {
299
+ const evaluator = new MetricsEvaluator();
300
+ it("should pass when value in range", () => {
301
+ const config = {
302
+ criteria: [
303
+ createTestCriterion({
304
+ type: "target-range",
305
+ targetRange: { min: 50, max: 100 },
306
+ }),
307
+ ],
308
+ };
309
+ const aggregates = [
310
+ createMockAggregate("primary-sut", "primary", undefined, {
311
+ accuracy: createMockSummaryStats([75]),
312
+ }),
313
+ ];
314
+ const context = createTestContext(aggregates);
315
+ const result = evaluator.evaluate(config, context);
316
+ assert.equal(result.data.summary.passed, 1);
317
+ });
318
+ it("should fail when value below min", () => {
319
+ const config = {
320
+ criteria: [
321
+ createTestCriterion({
322
+ type: "target-range",
323
+ targetRange: { min: 50, max: 100 },
324
+ }),
325
+ ],
326
+ };
327
+ const aggregates = [
328
+ createMockAggregate("primary-sut", "primary", undefined, {
329
+ accuracy: createMockSummaryStats([40]),
330
+ }),
331
+ ];
332
+ const context = createTestContext(aggregates);
333
+ const result = evaluator.evaluate(config, context);
334
+ assert.equal(result.data.summary.failed, 1);
335
+ });
336
+ it("should fail when value above max", () => {
337
+ const config = {
338
+ criteria: [
339
+ createTestCriterion({
340
+ type: "target-range",
341
+ targetRange: { min: 50, max: 100 },
342
+ }),
343
+ ],
344
+ };
345
+ const aggregates = [
346
+ createMockAggregate("primary-sut", "primary", undefined, {
347
+ accuracy: createMockSummaryStats([120]),
348
+ }),
349
+ ];
350
+ const context = createTestContext(aggregates);
351
+ const result = evaluator.evaluate(config, context);
352
+ assert.equal(result.data.summary.failed, 1);
353
+ });
354
+ it("should handle open-ended range (max only)", () => {
355
+ const config = {
356
+ criteria: [
357
+ createTestCriterion({
358
+ type: "target-range",
359
+ targetRange: { max: 100 },
360
+ }),
361
+ ],
362
+ };
363
+ const aggregates = [
364
+ createMockAggregate("primary-sut", "primary", undefined, {
365
+ accuracy: createMockSummaryStats([50]),
366
+ }),
367
+ ];
368
+ const context = createTestContext(aggregates);
369
+ const result = evaluator.evaluate(config, context);
370
+ assert.equal(result.data.summary.passed, 1);
371
+ });
372
+ });
373
+ describe("evaluate - scope constraints", () => {
374
+ const evaluator = new MetricsEvaluator();
375
+ it("should filter by caseClass", () => {
376
+ const config = {
377
+ criteria: [
378
+ createTestCriterion({
379
+ type: "threshold",
380
+ scopeConstraints: { caseClass: "scale-free" },
381
+ }),
382
+ ],
383
+ };
384
+ const aggregates = [
385
+ createMockAggregate("primary-sut", "primary", "scale-free", {
386
+ accuracy: createMockSummaryStats([0.85]),
387
+ }),
388
+ createMockAggregate("primary-sut", "primary", "small-world", {
389
+ accuracy: createMockSummaryStats([0.65]),
390
+ }),
391
+ ];
392
+ const context = createTestContext(aggregates);
393
+ const result = evaluator.evaluate(config, context);
394
+ // Should only evaluate scale-free aggregate
395
+ assert.equal(result.data.results[0].observed[0].value, 0.85);
396
+ });
397
+ });
398
+ describe("summarize", () => {
399
+ const evaluator = new MetricsEvaluator();
400
+ it("should create summary from output", () => {
401
+ const config = {
402
+ criteria: [
403
+ createTestCriterion({
404
+ type: "threshold",
405
+ threshold: { operator: "gte", value: 0.8 },
406
+ }),
407
+ ],
408
+ };
409
+ const aggregates = [
410
+ createMockAggregate("primary-sut", "primary", undefined, {
411
+ accuracy: createMockSummaryStats([0.85]),
412
+ }),
413
+ ];
414
+ const context = createTestContext(aggregates);
415
+ const output = evaluator.evaluate(config, context);
416
+ const summary = evaluator.summarize(output);
417
+ assert.equal(summary.total, 1);
418
+ assert.equal(summary.passed, 1);
419
+ assert.equal(summary.failed, 0);
420
+ assert.equal(summary.passRate, 1);
421
+ });
422
+ });
423
+ });
424
+ //# sourceMappingURL=metrics-evaluator.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-evaluator.unit.test.js","sourceRoot":"","sources":["../../../src/__tests__/evaluators/metrics-evaluator.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for Evaluator Registry
3
+ *
4
+ * Tests the registry functionality including getAs() type-safe retrieval.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=registry.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.unit.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/evaluators/registry.unit.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Unit tests for Evaluator Registry
3
+ *
4
+ * Tests the registry functionality including getAs() type-safe retrieval.
5
+ */
6
+ import { describe, it, afterEach } from "node:test";
7
+ import { strict as assert } from "node:assert";
8
+ import { EvaluatorRegistry, registerBuiltInEvaluators } from "../../evaluators/registry.js";
9
+ /**
10
+ * Mock evaluator implementing IEvaluator for testing.
11
+ * Uses parameterless constructor for getAs() compatibility.
12
+ */
13
+ class MockCustomEvaluator {
14
+ type = "custom";
15
+ validateConfig(_config) {
16
+ return { valid: true };
17
+ }
18
+ evaluate(_config, _input) {
19
+ return {
20
+ type: this.type,
21
+ version: "1.0.0",
22
+ timestamp: new Date().toISOString(),
23
+ data: { mock: true },
24
+ };
25
+ }
26
+ summarize(_output) {
27
+ return { total: 1 };
28
+ }
29
+ }
30
+ describe("EvaluatorRegistry", () => {
31
+ afterEach(() => {
32
+ EvaluatorRegistry.clear();
33
+ registerBuiltInEvaluators();
34
+ });
35
+ describe("register", () => {
36
+ it("should register an evaluator", () => {
37
+ const evaluator = new MockCustomEvaluator();
38
+ EvaluatorRegistry.register(evaluator);
39
+ assert.ok(EvaluatorRegistry.has("custom"));
40
+ });
41
+ it("should replace existing evaluator when registering same type", () => {
42
+ const evaluator1 = new MockCustomEvaluator();
43
+ const evaluator2 = new MockCustomEvaluator();
44
+ EvaluatorRegistry.register(evaluator1);
45
+ EvaluatorRegistry.register(evaluator2);
46
+ const retrieved = EvaluatorRegistry.get("custom");
47
+ assert.equal(retrieved, evaluator2);
48
+ });
49
+ });
50
+ describe("get", () => {
51
+ it("should return registered evaluator", () => {
52
+ const evaluator = new MockCustomEvaluator();
53
+ EvaluatorRegistry.register(evaluator);
54
+ const retrieved = EvaluatorRegistry.get("custom");
55
+ assert.equal(retrieved, evaluator);
56
+ });
57
+ it("should return undefined for unknown type", () => {
58
+ const retrieved = EvaluatorRegistry.get("claims"); // Use valid type
59
+ assert.ok(retrieved !== undefined); // Built-in evaluators exist
60
+ });
61
+ });
62
+ describe("getAs", () => {
63
+ it("should return evaluator when instanceof matches", () => {
64
+ const evaluator = new MockCustomEvaluator();
65
+ EvaluatorRegistry.register(evaluator);
66
+ const retrieved = EvaluatorRegistry.getAs("custom", MockCustomEvaluator);
67
+ assert.equal(retrieved, evaluator);
68
+ });
69
+ it("should return undefined when instanceof does not match", () => {
70
+ class OtherMockEvaluator {
71
+ type = "metrics"; // Use valid type
72
+ validateConfig() {
73
+ return { valid: true };
74
+ }
75
+ evaluate() {
76
+ return {
77
+ type: "metrics",
78
+ version: "1.0.0",
79
+ timestamp: new Date().toISOString(),
80
+ data: {},
81
+ };
82
+ }
83
+ summarize() {
84
+ return { total: 0 };
85
+ }
86
+ }
87
+ const other = new OtherMockEvaluator();
88
+ EvaluatorRegistry.register(other);
89
+ const retrieved = EvaluatorRegistry.getAs("metrics", MockCustomEvaluator);
90
+ assert.equal(retrieved, undefined);
91
+ });
92
+ it("should return undefined for unknown type", () => {
93
+ const retrieved = EvaluatorRegistry.getAs("claims", MockCustomEvaluator);
94
+ assert.equal(retrieved, undefined);
95
+ });
96
+ });
97
+ describe("getOrThrow", () => {
98
+ it("should return evaluator when found", () => {
99
+ const evaluator = new MockCustomEvaluator();
100
+ EvaluatorRegistry.register(evaluator);
101
+ const retrieved = EvaluatorRegistry.getOrThrow("custom", MockCustomEvaluator);
102
+ assert.equal(retrieved, evaluator);
103
+ });
104
+ it("should throw when evaluator not found", () => {
105
+ assert.throws(() => EvaluatorRegistry.getOrThrow("claims", MockCustomEvaluator), {
106
+ message: "Evaluator not found for type: claims",
107
+ });
108
+ });
109
+ });
110
+ describe("types", () => {
111
+ it("should return all registered evaluator types", () => {
112
+ EvaluatorRegistry.register(new MockCustomEvaluator());
113
+ const types = EvaluatorRegistry.types();
114
+ assert.ok(types.includes("custom"));
115
+ });
116
+ it("should return empty array when no evaluators registered", () => {
117
+ EvaluatorRegistry.clear();
118
+ const types = EvaluatorRegistry.types();
119
+ assert.equal(types.length, 0);
120
+ });
121
+ });
122
+ describe("has", () => {
123
+ it("should return true for registered type", () => {
124
+ EvaluatorRegistry.register(new MockCustomEvaluator());
125
+ assert.ok(EvaluatorRegistry.has("custom"));
126
+ });
127
+ it("should return false for unknown type", () => {
128
+ // "custom" won't be registered after clear in afterEach
129
+ assert.ok(!EvaluatorRegistry.has("custom"));
130
+ });
131
+ });
132
+ describe("unregister", () => {
133
+ it("should remove registered evaluator", () => {
134
+ const evaluator = new MockCustomEvaluator();
135
+ EvaluatorRegistry.register(evaluator);
136
+ assert.ok(EvaluatorRegistry.has("custom"));
137
+ const result = EvaluatorRegistry.unregister("custom");
138
+ assert.ok(result);
139
+ assert.ok(!EvaluatorRegistry.has("custom"));
140
+ });
141
+ it("should return false when evaluator not found", () => {
142
+ const result = EvaluatorRegistry.unregister("unknown-type");
143
+ assert.strictEqual(result, false);
144
+ });
145
+ });
146
+ describe("clear", () => {
147
+ it("should remove all evaluators", () => {
148
+ EvaluatorRegistry.register(new MockCustomEvaluator());
149
+ EvaluatorRegistry.clear();
150
+ assert.equal(EvaluatorRegistry.size, 0);
151
+ assert.ok(!EvaluatorRegistry.has("custom"));
152
+ });
153
+ });
154
+ describe("size", () => {
155
+ it("should return count of registered evaluators", () => {
156
+ const initialSize = EvaluatorRegistry.size;
157
+ EvaluatorRegistry.register(new MockCustomEvaluator());
158
+ assert.equal(EvaluatorRegistry.size, initialSize + 1);
159
+ });
160
+ });
161
+ describe("built-in evaluators", () => {
162
+ it("should have claims evaluator registered", () => {
163
+ assert.ok(EvaluatorRegistry.has("claims"));
164
+ });
165
+ it("should have robustness evaluator registered", () => {
166
+ assert.ok(EvaluatorRegistry.has("robustness"));
167
+ });
168
+ it("should have metrics evaluator registered", () => {
169
+ assert.ok(EvaluatorRegistry.has("metrics"));
170
+ });
171
+ });
172
+ });
173
+ //# sourceMappingURL=registry.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.unit.test.js","sourceRoot":"","sources":["../../../src/__tests__/evaluators/registry.unit.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAS5F;;;GAGG;AACH,MAAM,mBAAmB;IACf,IAAI,GAAG,QAAiB,CAAC;IAElC,cAAc,CAAC,OAAgB;QAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,OAAgB,EAAE,MAAe;QACzC,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SACpB,CAAC;IACH,CAAC;IAED,SAAS,CAAC,OAAkC;QAC3C,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACrB,CAAC;CACD;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,SAAS,CAAC,GAAG,EAAE;QACd,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,yBAAyB,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACvC,MAAM,SAAS,GAAG,IAAI,mBAAmB,EAAE,CAAC;YAC5C,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEtC,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACvE,MAAM,UAAU,GAAG,IAAI,mBAAmB,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,IAAI,mBAAmB,EAAE,CAAC;YAE7C,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEvC,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC7C,MAAM,SAAS,GAAG,IAAI,mBAAmB,EAAE,CAAC;YAC5C,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEtC,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YACnD,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAiB,CAAC,CAAC,CAAC,iBAAiB;YAC7E,MAAM,CAAC,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,4BAA4B;QACjE,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YAC1D,MAAM,SAAS,GAAG,IAAI,mBAAmB,EAAE,CAAC;YAC5C,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEtC,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YACzE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YACjE,MAAM,kBAAkB;gBACd,IAAI,GAAG,SAAkB,CAAC,CAAC,iBAAiB;gBACrD,cAAc;oBACb,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBACxB,CAAC;gBACD,QAAQ;oBACP,OAAO;wBACN,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,OAAO;wBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACnC,IAAI,EAAE,EAAE;qBACR,CAAC;gBACH,CAAC;gBACD,SAAS;oBACR,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACrB,CAAC;aACD;YAED,MAAM,KAAK,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACvC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAElC,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;YAC1E,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YACnD,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAiB,EAAE,mBAAmB,CAAC,CAAC;YAClF,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC7C,MAAM,SAAS,GAAG,IAAI,mBAAmB,EAAE,CAAC;YAC5C,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEtC,MAAM,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YAC9E,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAiB,EAAE,mBAAmB,CAAC,EAAE;gBACzF,OAAO,EAAE,sCAAsC;aAC/C,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACvD,iBAAiB,CAAC,QAAQ,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;YAEtD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YAClE,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAE1B,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YACjD,iBAAiB,CAAC,QAAQ,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;YACtD,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC/C,wDAAwD;YACxD,MAAM,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC7C,MAAM,SAAS,GAAG,IAAI,mBAAmB,EAAE,CAAC;YAC5C,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAE3C,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACtD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YAClB,MAAM,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,cAAgC,CAAC,CAAC;YAC9E,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACvC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;YAEtD,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAE1B,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACvD,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC;YAE3C,iBAAiB,CAAC,QAAQ,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YAClD,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACtD,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Unit tests for Robustness Evaluator
3
+ *
4
+ * Tests the robustness evaluator functionality including variance analysis
5
+ * under perturbations.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=robustness-evaluator.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robustness-evaluator.unit.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/evaluators/robustness-evaluator.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}