ppef 1.0.1 → 1.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/bin/ppef.mjs +20 -0
- package/dist/__tests__/framework-pipeline.integration.test.js +13 -11
- package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -1
- package/dist/__tests__/index-exports.unit.test.d.ts +8 -0
- package/dist/__tests__/index-exports.unit.test.d.ts.map +1 -0
- package/dist/__tests__/index-exports.unit.test.js +127 -0
- package/dist/__tests__/index-exports.unit.test.js.map +1 -0
- package/dist/__tests__/registry-executor.integration.test.js +12 -9
- package/dist/__tests__/registry-executor.integration.test.js.map +1 -1
- package/dist/aggregation/__tests__/aggregators.unit.test.d.ts +7 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.d.ts.map +1 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.js +350 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.js.map +1 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.d.ts +7 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.d.ts.map +1 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.js +213 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.js.map +1 -0
- package/dist/aggregation/aggregators.d.ts +9 -0
- package/dist/aggregation/aggregators.d.ts.map +1 -1
- package/dist/aggregation/aggregators.js +1 -1
- package/dist/aggregation/aggregators.js.map +1 -1
- package/dist/aggregation/index.d.ts +1 -1
- package/dist/aggregation/index.d.ts.map +1 -1
- package/dist/aggregation/index.js +1 -1
- package/dist/aggregation/index.js.map +1 -1
- package/dist/claims/__tests__/evaluator.unit.test.d.ts +12 -0
- package/dist/claims/__tests__/evaluator.unit.test.d.ts.map +1 -0
- package/dist/claims/__tests__/evaluator.unit.test.js +801 -0
- package/dist/claims/__tests__/evaluator.unit.test.js.map +1 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.js +396 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.js.map +1 -0
- package/dist/cli/__tests__/commands.unit.test.d.ts +10 -0
- package/dist/cli/__tests__/commands.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/commands.unit.test.js +217 -0
- package/dist/cli/__tests__/commands.unit.test.js.map +1 -0
- package/dist/cli/__tests__/index.unit.test.d.ts +10 -0
- package/dist/cli/__tests__/index.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/index.unit.test.js +65 -0
- package/dist/cli/__tests__/index.unit.test.js.map +1 -0
- package/dist/cli/__tests__/logger.unit.test.d.ts +11 -0
- package/dist/cli/__tests__/logger.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/logger.unit.test.js +180 -0
- package/dist/cli/__tests__/logger.unit.test.js.map +1 -0
- package/dist/cli/__tests__/module-loader.unit.test.d.ts +11 -0
- package/dist/cli/__tests__/module-loader.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/module-loader.unit.test.js +262 -0
- package/dist/cli/__tests__/module-loader.unit.test.js.map +1 -0
- package/dist/cli/__tests__/output-writer.unit.test.d.ts +10 -0
- package/dist/cli/__tests__/output-writer.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/output-writer.unit.test.js +216 -0
- package/dist/cli/__tests__/output-writer.unit.test.js.map +1 -0
- package/dist/cli/__tests__/plan.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/plan.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/plan.command.unit.test.js +289 -0
- package/dist/cli/__tests__/plan.command.unit.test.js.map +1 -0
- package/dist/cli/__tests__/run.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/run.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/run.command.unit.test.js +422 -0
- package/dist/cli/__tests__/run.command.unit.test.js.map +1 -0
- package/dist/cli/__tests__/validate.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/validate.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/validate.command.unit.test.js +226 -0
- package/dist/cli/__tests__/validate.command.unit.test.js.map +1 -0
- package/dist/cli/command-deps.d.ts +125 -0
- package/dist/cli/command-deps.d.ts.map +1 -0
- package/dist/cli/command-deps.js +7 -0
- package/dist/cli/command-deps.js.map +1 -0
- package/dist/cli/commands/aggregate.d.ts +35 -0
- package/dist/cli/commands/aggregate.d.ts.map +1 -0
- package/dist/cli/commands/aggregate.js +121 -0
- package/dist/cli/commands/aggregate.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +36 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +109 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/run.d.ts +33 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +185 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +27 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +88 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/config-loader.d.ts +30 -0
- package/dist/cli/config-loader.d.ts.map +1 -0
- package/dist/cli/config-loader.js +181 -0
- package/dist/cli/config-loader.js.map +1 -0
- package/dist/cli/index.d.ts +26 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +58 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/logger.d.ts +75 -0
- package/dist/cli/logger.d.ts.map +1 -0
- package/dist/cli/logger.js +131 -0
- package/dist/cli/logger.js.map +1 -0
- package/dist/cli/module-loader.d.ts +46 -0
- package/dist/cli/module-loader.d.ts.map +1 -0
- package/dist/cli/module-loader.js +116 -0
- package/dist/cli/module-loader.js.map +1 -0
- package/dist/cli/output-writer.d.ts +51 -0
- package/dist/cli/output-writer.d.ts.map +1 -0
- package/dist/cli/output-writer.js +65 -0
- package/dist/cli/output-writer.js.map +1 -0
- package/dist/cli/types.d.ts +174 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +7 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/collector/__tests__/result-collector.unit.test.d.ts +7 -0
- package/dist/collector/__tests__/result-collector.unit.test.d.ts.map +1 -0
- package/dist/collector/__tests__/result-collector.unit.test.js +1021 -0
- package/dist/collector/__tests__/result-collector.unit.test.js.map +1 -0
- package/dist/collector/__tests__/schema.unit.test.d.ts +7 -0
- package/dist/collector/__tests__/schema.unit.test.d.ts.map +1 -0
- package/dist/collector/__tests__/schema.unit.test.js +360 -0
- package/dist/collector/__tests__/schema.unit.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.js +83 -1
- package/dist/executor/__tests__/checkpoint-manager.unit.test.js.map +1 -1
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts +3 -6
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts.map +1 -1
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js +428 -159
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js.map +1 -1
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js +105 -1
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -1
- package/dist/executor/__tests__/executor.unit.test.js +69 -1
- package/dist/executor/__tests__/executor.unit.test.js.map +1 -1
- package/dist/executor/__tests__/memory-monitor.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.js +285 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.js.map +1 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.d.ts +2 -1
- package/dist/executor/__tests__/parallel-executor.unit.test.d.ts.map +1 -1
- package/dist/executor/__tests__/parallel-executor.unit.test.js +426 -156
- package/dist/executor/__tests__/parallel-executor.unit.test.js.map +1 -1
- package/dist/executor/__tests__/run-id.unit.test.d.ts +8 -0
- package/dist/executor/__tests__/run-id.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/run-id.unit.test.js +156 -0
- package/dist/executor/__tests__/run-id.unit.test.js.map +1 -0
- package/dist/executor/__tests__/worker-entry.integration.test.d.ts +24 -0
- package/dist/executor/__tests__/worker-entry.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/worker-entry.integration.test.js +82 -0
- package/dist/executor/__tests__/worker-entry.integration.test.js.map +1 -0
- package/dist/executor/__tests__/worker-entry.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/worker-entry.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/worker-entry.unit.test.js +364 -0
- package/dist/executor/__tests__/worker-entry.unit.test.js.map +1 -0
- package/dist/executor/parallel-executor.d.ts +186 -0
- package/dist/executor/parallel-executor.d.ts.map +1 -1
- package/dist/executor/parallel-executor.js +218 -83
- package/dist/executor/parallel-executor.js.map +1 -1
- package/dist/executor/run-id.d.ts.map +1 -1
- package/dist/executor/run-id.js +8 -1
- package/dist/executor/run-id.js.map +1 -1
- package/dist/executor/worker-entry.d.ts +2 -0
- package/dist/executor/worker-entry.d.ts.map +1 -1
- package/dist/executor/worker-entry.js +29 -54
- package/dist/executor/worker-entry.js.map +1 -1
- package/dist/executor/worker-executor.d.ts +156 -0
- package/dist/executor/worker-executor.d.ts.map +1 -0
- package/dist/executor/worker-executor.js +88 -0
- package/dist/executor/worker-executor.js.map +1 -0
- package/dist/robustness/__tests__/analyzer.unit.test.d.ts +11 -0
- package/dist/robustness/__tests__/analyzer.unit.test.d.ts.map +1 -0
- package/dist/robustness/__tests__/analyzer.unit.test.js +455 -0
- package/dist/robustness/__tests__/analyzer.unit.test.js.map +1 -0
- package/dist/robustness/__tests__/perturbations.unit.test.d.ts +11 -0
- package/dist/robustness/__tests__/perturbations.unit.test.d.ts.map +1 -0
- package/dist/robustness/__tests__/perturbations.unit.test.js +284 -0
- package/dist/robustness/__tests__/perturbations.unit.test.js.map +1 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts +7 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts.map +1 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.js +185 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.js.map +1 -0
- package/package.json +8 -1
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for Robustness Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Tests robustness analysis functions including:
|
|
5
|
+
* - analyzeRobustnessForMetric
|
|
6
|
+
* - analyzeRobustnessWithCurve
|
|
7
|
+
* - compareRobustness
|
|
8
|
+
* - createRobustnessAnalysis
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it } from "node:test";
|
|
11
|
+
import { strict as assert } from "node:assert";
|
|
12
|
+
import { analyzeRobustnessForMetric, analyzeRobustnessWithCurve, compareRobustness, createRobustnessAnalysis, } from "../analyzer.js";
|
|
13
|
+
/**
|
|
14
|
+
* Create a mock evaluation result.
|
|
15
|
+
*/
|
|
16
|
+
function createMockResult(metricValue, perturbationIntensity, perturbation) {
|
|
17
|
+
const config = {};
|
|
18
|
+
if (perturbation !== undefined)
|
|
19
|
+
config.perturbation = perturbation;
|
|
20
|
+
if (perturbationIntensity !== undefined)
|
|
21
|
+
config.perturbationIntensity = perturbationIntensity;
|
|
22
|
+
return {
|
|
23
|
+
run: {
|
|
24
|
+
runId: `run-${Math.random()}`,
|
|
25
|
+
sut: "test-sut",
|
|
26
|
+
sutRole: "primary",
|
|
27
|
+
caseId: "test-case",
|
|
28
|
+
repetition: 0,
|
|
29
|
+
config: Object.keys(config).length > 0 ? config : undefined,
|
|
30
|
+
},
|
|
31
|
+
metrics: {
|
|
32
|
+
numeric: {
|
|
33
|
+
accuracy: metricValue,
|
|
34
|
+
precision: metricValue * 0.9,
|
|
35
|
+
recall: metricValue * 0.95,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
correctness: {
|
|
39
|
+
expectedExists: true,
|
|
40
|
+
producedOutput: true,
|
|
41
|
+
valid: true,
|
|
42
|
+
matchesExpected: true,
|
|
43
|
+
},
|
|
44
|
+
outputs: {},
|
|
45
|
+
provenance: {
|
|
46
|
+
runtime: {
|
|
47
|
+
platform: "test",
|
|
48
|
+
arch: "test",
|
|
49
|
+
nodeVersion: "test",
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create mock base results.
|
|
56
|
+
*/
|
|
57
|
+
function createBaseResults() {
|
|
58
|
+
return [createMockResult(0.85), createMockResult(0.87), createMockResult(0.86)];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create mock perturbed results.
|
|
62
|
+
*/
|
|
63
|
+
function createPerturbedResults(values) {
|
|
64
|
+
return values.map((v) => createMockResult(v, 1, "noise"));
|
|
65
|
+
}
|
|
66
|
+
describe("analyzeRobustnessForMetric", () => {
|
|
67
|
+
describe("with valid base and perturbed results", () => {
|
|
68
|
+
it("should compute variance under perturbation", () => {
|
|
69
|
+
const baseResults = createBaseResults();
|
|
70
|
+
const perturbedResults = createPerturbedResults([0.82, 0.84, 0.86, 0.88, 0.9]);
|
|
71
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
72
|
+
// Variance should be a finite number
|
|
73
|
+
assert.ok(Number.isFinite(result.varianceUnderPerturbation));
|
|
74
|
+
assert.ok(result.varianceUnderPerturbation >= 0);
|
|
75
|
+
});
|
|
76
|
+
it("should compute standard deviation under perturbation", () => {
|
|
77
|
+
const baseResults = createBaseResults();
|
|
78
|
+
const perturbedResults = createPerturbedResults([0.8, 0.85, 0.9]);
|
|
79
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
80
|
+
// Std should be finite and non-negative
|
|
81
|
+
assert.ok(Number.isFinite(result.stdUnderPerturbation));
|
|
82
|
+
assert.ok(result.stdUnderPerturbation >= 0);
|
|
83
|
+
});
|
|
84
|
+
it("should compute coefficient of variation for non-zero mean", () => {
|
|
85
|
+
const baseResults = createBaseResults();
|
|
86
|
+
const perturbedResults = createPerturbedResults([0.82, 0.84, 0.86, 0.88, 0.9]);
|
|
87
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
88
|
+
// Coefficient of variation should be finite
|
|
89
|
+
assert.ok(Number.isFinite(result.coefficientOfVariation));
|
|
90
|
+
assert.ok(result.coefficientOfVariation >= 0);
|
|
91
|
+
});
|
|
92
|
+
it("should handle stable results with low variance", () => {
|
|
93
|
+
const baseResults = createBaseResults();
|
|
94
|
+
const perturbedResults = createPerturbedResults([0.85, 0.85, 0.85, 0.85, 0.85]);
|
|
95
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
96
|
+
// Very stable results should have near-zero variance
|
|
97
|
+
assert.ok(result.varianceUnderPerturbation < 0.01);
|
|
98
|
+
assert.ok(result.stdUnderPerturbation < 0.1);
|
|
99
|
+
});
|
|
100
|
+
it("should handle high variance results", () => {
|
|
101
|
+
const baseResults = createBaseResults();
|
|
102
|
+
const perturbedResults = createPerturbedResults([0.5, 0.6, 0.7, 0.8, 0.9]);
|
|
103
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
104
|
+
// High variance should be detected
|
|
105
|
+
assert.ok(result.varianceUnderPerturbation > 0.01);
|
|
106
|
+
assert.ok(result.stdUnderPerturbation > 0.1);
|
|
107
|
+
});
|
|
108
|
+
it("should filter out NaN values from results", () => {
|
|
109
|
+
const baseResults = [createMockResult(0.85), createMockResult(NaN), createMockResult(0.87)];
|
|
110
|
+
const perturbedResults = [
|
|
111
|
+
createMockResult(0.82),
|
|
112
|
+
createMockResult(NaN),
|
|
113
|
+
createMockResult(0.84),
|
|
114
|
+
];
|
|
115
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
116
|
+
// Should compute stats from non-NaN values only
|
|
117
|
+
assert.ok(Number.isFinite(result.varianceUnderPerturbation));
|
|
118
|
+
assert.ok(Number.isFinite(result.stdUnderPerturbation));
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe("with empty results", () => {
|
|
122
|
+
it("should return NaN for all metrics when base results are empty", () => {
|
|
123
|
+
const baseResults = [];
|
|
124
|
+
const perturbedResults = createPerturbedResults([0.82, 0.84, 0.86]);
|
|
125
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
126
|
+
assert.ok(Number.isNaN(result.varianceUnderPerturbation));
|
|
127
|
+
assert.ok(Number.isNaN(result.stdUnderPerturbation));
|
|
128
|
+
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
129
|
+
});
|
|
130
|
+
it("should return NaN for all metrics when perturbed results are empty", () => {
|
|
131
|
+
const baseResults = createBaseResults();
|
|
132
|
+
const perturbedResults = [];
|
|
133
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
134
|
+
assert.ok(Number.isNaN(result.varianceUnderPerturbation));
|
|
135
|
+
assert.ok(Number.isNaN(result.stdUnderPerturbation));
|
|
136
|
+
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
137
|
+
});
|
|
138
|
+
it("should return NaN when both are empty", () => {
|
|
139
|
+
const baseResults = [];
|
|
140
|
+
const perturbedResults = [];
|
|
141
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
142
|
+
assert.ok(Number.isNaN(result.varianceUnderPerturbation));
|
|
143
|
+
assert.ok(Number.isNaN(result.stdUnderPerturbation));
|
|
144
|
+
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
145
|
+
});
|
|
146
|
+
it("should return NaN when all values are NaN", () => {
|
|
147
|
+
const baseResults = [createMockResult(NaN), createMockResult(NaN)];
|
|
148
|
+
const perturbedResults = [createMockResult(NaN), createMockResult(NaN)];
|
|
149
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
150
|
+
assert.ok(Number.isNaN(result.varianceUnderPerturbation));
|
|
151
|
+
assert.ok(Number.isNaN(result.stdUnderPerturbation));
|
|
152
|
+
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
describe("edge cases", () => {
|
|
156
|
+
it("should return NaN for coefficient of variation when mean is zero", () => {
|
|
157
|
+
const baseResults = createBaseResults();
|
|
158
|
+
const perturbedResults = [createMockResult(0), createMockResult(0), createMockResult(0)];
|
|
159
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
160
|
+
// Std should be 0 (no variance)
|
|
161
|
+
assert.strictEqual(result.stdUnderPerturbation, 0);
|
|
162
|
+
// Coefficient of variation should be NaN (mean is zero)
|
|
163
|
+
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
164
|
+
});
|
|
165
|
+
it("should return NaN for std and coefficient of variation with single perturbed result", () => {
|
|
166
|
+
const baseResults = createBaseResults();
|
|
167
|
+
const perturbedResults = createPerturbedResults([0.85]);
|
|
168
|
+
const result = analyzeRobustnessForMetric(baseResults, perturbedResults, "accuracy");
|
|
169
|
+
// Single value: std is undefined (needs n > 1), so variance and cv are NaN
|
|
170
|
+
assert.ok(Number.isNaN(result.varianceUnderPerturbation));
|
|
171
|
+
assert.ok(Number.isNaN(result.stdUnderPerturbation));
|
|
172
|
+
assert.ok(Number.isNaN(result.coefficientOfVariation));
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
describe("analyzeRobustnessWithCurve", () => {
|
|
177
|
+
it("should group results by perturbation intensity", () => {
|
|
178
|
+
const results = [
|
|
179
|
+
createMockResult(0.85), // Base
|
|
180
|
+
createMockResult(0.86), // Base
|
|
181
|
+
createMockResult(0.82, 1), // Level 1
|
|
182
|
+
createMockResult(0.83, 1), // Level 1
|
|
183
|
+
createMockResult(0.78, 2), // Level 2
|
|
184
|
+
createMockResult(0.79, 2), // Level 2
|
|
185
|
+
];
|
|
186
|
+
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2]);
|
|
187
|
+
// Should have degradation curve points
|
|
188
|
+
assert.ok(result.degradationCurve.length >= 2);
|
|
189
|
+
});
|
|
190
|
+
it("should include level 0 (base) in degradation curve", () => {
|
|
191
|
+
const results = [
|
|
192
|
+
createMockResult(0.85), // Base
|
|
193
|
+
createMockResult(0.82, 1), // Level 1
|
|
194
|
+
];
|
|
195
|
+
const result = analyzeRobustnessWithCurve(results, "accuracy", [1]);
|
|
196
|
+
// Should have base level
|
|
197
|
+
const baseLevel = result.degradationCurve.find((d) => d.perturbationLevel === 0);
|
|
198
|
+
assert.ok(baseLevel);
|
|
199
|
+
assert.strictEqual(baseLevel.metricValue, 0.85);
|
|
200
|
+
});
|
|
201
|
+
it("should sort degradation curve by perturbation level", () => {
|
|
202
|
+
const results = [
|
|
203
|
+
createMockResult(0.78, 2),
|
|
204
|
+
createMockResult(0.85), // Base
|
|
205
|
+
createMockResult(0.82, 1),
|
|
206
|
+
];
|
|
207
|
+
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2]);
|
|
208
|
+
// Check sorted order
|
|
209
|
+
for (let i = 1; i < result.degradationCurve.length; i++) {
|
|
210
|
+
assert.ok(result.degradationCurve[i].perturbationLevel >=
|
|
211
|
+
result.degradationCurve[i - 1].perturbationLevel);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
it("should include stdDev in degradation curve", () => {
|
|
215
|
+
const results = [createMockResult(0.85), createMockResult(0.82, 1), createMockResult(0.84, 1)];
|
|
216
|
+
const result = analyzeRobustnessWithCurve(results, "accuracy", [1]);
|
|
217
|
+
const level1 = result.degradationCurve.find((d) => d.perturbationLevel === 1);
|
|
218
|
+
assert.ok(level1);
|
|
219
|
+
assert.ok(level1.stdDev !== undefined);
|
|
220
|
+
});
|
|
221
|
+
it("should detect breakpoint when degradation exceeds 10%", () => {
|
|
222
|
+
const results = [
|
|
223
|
+
createMockResult(0.9), // Base
|
|
224
|
+
createMockResult(0.89, 1), // 1.1% change - no breakpoint
|
|
225
|
+
createMockResult(0.8, 2), // 11% change - breakpoint!
|
|
226
|
+
];
|
|
227
|
+
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2]);
|
|
228
|
+
// Should detect breakpoint at level 2
|
|
229
|
+
assert.strictEqual(result.breakpoint, 2);
|
|
230
|
+
});
|
|
231
|
+
it("should not detect breakpoint when degradation is under 10%", () => {
|
|
232
|
+
const results = [
|
|
233
|
+
createMockResult(0.9), // Base
|
|
234
|
+
createMockResult(0.89, 1), // 1.1% change
|
|
235
|
+
createMockResult(0.88, 2), // 2.2% change
|
|
236
|
+
];
|
|
237
|
+
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2]);
|
|
238
|
+
// No breakpoint
|
|
239
|
+
assert.strictEqual(result.breakpoint, undefined);
|
|
240
|
+
});
|
|
241
|
+
it("should compute overall variance from all perturbed results", () => {
|
|
242
|
+
const results = [
|
|
243
|
+
createMockResult(0.85),
|
|
244
|
+
createMockResult(0.82, 1),
|
|
245
|
+
createMockResult(0.84, 1),
|
|
246
|
+
createMockResult(0.78, 2),
|
|
247
|
+
createMockResult(0.8, 2),
|
|
248
|
+
];
|
|
249
|
+
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2]);
|
|
250
|
+
// Should have finite overall variance
|
|
251
|
+
assert.ok(Number.isFinite(result.varianceUnderPerturbation));
|
|
252
|
+
assert.ok(result.varianceUnderPerturbation > 0);
|
|
253
|
+
});
|
|
254
|
+
it("should handle missing intensity levels gracefully", () => {
|
|
255
|
+
const results = [
|
|
256
|
+
createMockResult(0.85),
|
|
257
|
+
createMockResult(0.82, 1), // Only level 1 present
|
|
258
|
+
];
|
|
259
|
+
const result = analyzeRobustnessWithCurve(results, "accuracy", [1, 2, 3]);
|
|
260
|
+
// Should only have levels with data
|
|
261
|
+
assert.ok(result.degradationCurve.length >= 1);
|
|
262
|
+
assert.ok(result.degradationCurve.length <= 2); // Base + level 1
|
|
263
|
+
});
|
|
264
|
+
it("should filter NaN values from curve computation", () => {
|
|
265
|
+
const results = [createMockResult(0.85), createMockResult(NaN, 1), createMockResult(0.82, 1)];
|
|
266
|
+
const result = analyzeRobustnessWithCurve(results, "accuracy", [1]);
|
|
267
|
+
const level1 = result.degradationCurve.find((d) => d.perturbationLevel === 1);
|
|
268
|
+
assert.ok(level1);
|
|
269
|
+
// Should compute from non-NaN values
|
|
270
|
+
assert.strictEqual(level1.metricValue, 0.82);
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
describe("compareRobustness", () => {
|
|
274
|
+
it("should compute variance for both SUTs", () => {
|
|
275
|
+
const sutAResults = [
|
|
276
|
+
createMockResult(0.85),
|
|
277
|
+
createMockResult(0.82, 1),
|
|
278
|
+
createMockResult(0.83, 1),
|
|
279
|
+
];
|
|
280
|
+
const sutBResults = [
|
|
281
|
+
createMockResult(0.8),
|
|
282
|
+
createMockResult(0.78, 1),
|
|
283
|
+
createMockResult(0.82, 1),
|
|
284
|
+
];
|
|
285
|
+
const result = compareRobustness(sutAResults, sutBResults, "accuracy");
|
|
286
|
+
assert.ok(Number.isFinite(result.sutAVariance));
|
|
287
|
+
assert.ok(Number.isFinite(result.sutBVariance));
|
|
288
|
+
});
|
|
289
|
+
it("should compute relative robustness correctly", () => {
|
|
290
|
+
const sutAResults = [
|
|
291
|
+
createMockResult(0.85),
|
|
292
|
+
createMockResult(0.82, 1), // Low variance
|
|
293
|
+
createMockResult(0.83, 1),
|
|
294
|
+
];
|
|
295
|
+
const sutBResults = [
|
|
296
|
+
createMockResult(0.8),
|
|
297
|
+
createMockResult(0.7, 1), // High variance
|
|
298
|
+
createMockResult(0.9, 1),
|
|
299
|
+
];
|
|
300
|
+
const result = compareRobustness(sutAResults, sutBResults, "accuracy");
|
|
301
|
+
// Lower relative robustness means A is more robust
|
|
302
|
+
assert.ok(result.relativeRobustness < 1);
|
|
303
|
+
});
|
|
304
|
+
it("should return Infinity when SUT B has zero variance", () => {
|
|
305
|
+
const sutAResults = [
|
|
306
|
+
createMockResult(0.85),
|
|
307
|
+
createMockResult(0.82, 1),
|
|
308
|
+
createMockResult(0.83, 1),
|
|
309
|
+
];
|
|
310
|
+
const sutBResults = [
|
|
311
|
+
createMockResult(0.85),
|
|
312
|
+
createMockResult(0.85, 1),
|
|
313
|
+
createMockResult(0.85, 1), // Perfect stability
|
|
314
|
+
];
|
|
315
|
+
const result = compareRobustness(sutAResults, sutBResults, "accuracy");
|
|
316
|
+
assert.strictEqual(result.relativeRobustness, Infinity);
|
|
317
|
+
});
|
|
318
|
+
it("should handle equal variance", () => {
|
|
319
|
+
const sutAResults = [
|
|
320
|
+
createMockResult(0.85),
|
|
321
|
+
createMockResult(0.82, 1),
|
|
322
|
+
createMockResult(0.83, 1),
|
|
323
|
+
];
|
|
324
|
+
const sutBResults = [
|
|
325
|
+
createMockResult(0.8),
|
|
326
|
+
createMockResult(0.77, 1),
|
|
327
|
+
createMockResult(0.78, 1),
|
|
328
|
+
];
|
|
329
|
+
const result = compareRobustness(sutAResults, sutBResults, "accuracy");
|
|
330
|
+
// Same variance pattern
|
|
331
|
+
assert.strictEqual(result.relativeRobustness, 1);
|
|
332
|
+
});
|
|
333
|
+
it("should filter results by perturbation intensity", () => {
|
|
334
|
+
const sutAResults = [
|
|
335
|
+
createMockResult(0.85), // Base
|
|
336
|
+
createMockResult(0.82, 1), // Perturbed
|
|
337
|
+
createMockResult(0.83, 1), // Perturbed
|
|
338
|
+
];
|
|
339
|
+
const result = compareRobustness(sutAResults, sutAResults, "accuracy");
|
|
340
|
+
// Should only use perturbed results
|
|
341
|
+
assert.ok(Number.isFinite(result.sutAVariance));
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
describe("createRobustnessAnalysis", () => {
|
|
345
|
+
it("should create analysis output with correct structure", () => {
|
|
346
|
+
const results = [
|
|
347
|
+
createMockResult(0.85, undefined, undefined),
|
|
348
|
+
createMockResult(0.82, 1, "noise"),
|
|
349
|
+
createMockResult(0.83, 1, "noise"),
|
|
350
|
+
];
|
|
351
|
+
const options = {
|
|
352
|
+
metrics: ["accuracy"],
|
|
353
|
+
perturbations: ["noise"],
|
|
354
|
+
intensityLevels: [1],
|
|
355
|
+
runsPerLevel: 2,
|
|
356
|
+
};
|
|
357
|
+
const output = createRobustnessAnalysis(results, options);
|
|
358
|
+
assert.strictEqual(output.version, "1.0.0");
|
|
359
|
+
assert.ok(output.timestamp);
|
|
360
|
+
assert.ok(Array.isArray(output.results));
|
|
361
|
+
assert.ok(output.config);
|
|
362
|
+
});
|
|
363
|
+
it("should include config in output", () => {
|
|
364
|
+
const results = [createMockResult(0.85), createMockResult(0.82, 1, "noise")];
|
|
365
|
+
const options = {
|
|
366
|
+
metrics: ["accuracy", "precision"],
|
|
367
|
+
perturbations: ["noise", "blur"],
|
|
368
|
+
intensityLevels: [1, 2],
|
|
369
|
+
runsPerLevel: 3,
|
|
370
|
+
};
|
|
371
|
+
const output = createRobustnessAnalysis(results, options);
|
|
372
|
+
assert.deepStrictEqual(output.config.perturbations, ["noise", "blur"]);
|
|
373
|
+
assert.deepStrictEqual(output.config.metrics, ["accuracy", "precision"]);
|
|
374
|
+
assert.deepStrictEqual(output.config.intensityLevels, [1, 2]);
|
|
375
|
+
assert.strictEqual(output.config.runsPerLevel, 3);
|
|
376
|
+
});
|
|
377
|
+
it("should analyze each metric-perturbation combination", () => {
|
|
378
|
+
const results = [
|
|
379
|
+
createMockResult(0.85),
|
|
380
|
+
createMockResult(0.82, 1, "noise"),
|
|
381
|
+
createMockResult(0.8, 1, "blur"),
|
|
382
|
+
];
|
|
383
|
+
const options = {
|
|
384
|
+
metrics: ["accuracy", "precision"],
|
|
385
|
+
perturbations: ["noise", "blur"],
|
|
386
|
+
};
|
|
387
|
+
const output = createRobustnessAnalysis(results, options);
|
|
388
|
+
// Should have 4 results: 2 metrics x 2 perturbations
|
|
389
|
+
assert.strictEqual(output.results.length, 4);
|
|
390
|
+
});
|
|
391
|
+
it("should compute baseline value from base results", () => {
|
|
392
|
+
const results = [
|
|
393
|
+
createMockResult(0.85),
|
|
394
|
+
createMockResult(0.87),
|
|
395
|
+
createMockResult(0.82, 1, "noise"),
|
|
396
|
+
];
|
|
397
|
+
const options = {
|
|
398
|
+
metrics: ["accuracy"],
|
|
399
|
+
perturbations: ["noise"],
|
|
400
|
+
};
|
|
401
|
+
const output = createRobustnessAnalysis(results, options);
|
|
402
|
+
// Baseline should be average of base results
|
|
403
|
+
const baseline = output.results[0].baselineValue;
|
|
404
|
+
assert.ok(Number.isFinite(baseline));
|
|
405
|
+
assert.ok(baseline > 0);
|
|
406
|
+
});
|
|
407
|
+
it("should include run count in results", () => {
|
|
408
|
+
const results = [
|
|
409
|
+
createMockResult(0.85),
|
|
410
|
+
createMockResult(0.82, 1, "noise"),
|
|
411
|
+
createMockResult(0.83, 1, "noise"),
|
|
412
|
+
createMockResult(0.84, 1, "noise"),
|
|
413
|
+
];
|
|
414
|
+
const options = {
|
|
415
|
+
metrics: ["accuracy"],
|
|
416
|
+
perturbations: ["noise"],
|
|
417
|
+
};
|
|
418
|
+
const output = createRobustnessAnalysis(results, options);
|
|
419
|
+
assert.strictEqual(output.results[0].runCount, 3);
|
|
420
|
+
});
|
|
421
|
+
it("should group results by SUT", () => {
|
|
422
|
+
const results = [
|
|
423
|
+
createMockResult(0.85, undefined, undefined),
|
|
424
|
+
createMockResult(0.82, 1, "noise"),
|
|
425
|
+
];
|
|
426
|
+
// Modify SUT name
|
|
427
|
+
results[0].run.sut = "sut-a";
|
|
428
|
+
results[1].run.sut = "sut-a";
|
|
429
|
+
const options = {
|
|
430
|
+
metrics: ["accuracy"],
|
|
431
|
+
perturbations: ["noise"],
|
|
432
|
+
};
|
|
433
|
+
const output = createRobustnessAnalysis(results, options);
|
|
434
|
+
assert.strictEqual(output.results[0].sut, "sut-a");
|
|
435
|
+
});
|
|
436
|
+
it("should handle empty results gracefully", () => {
|
|
437
|
+
const results = [];
|
|
438
|
+
const options = {
|
|
439
|
+
metrics: ["accuracy"],
|
|
440
|
+
perturbations: ["noise"],
|
|
441
|
+
};
|
|
442
|
+
const output = createRobustnessAnalysis(results, options);
|
|
443
|
+
assert.strictEqual(output.results.length, 0);
|
|
444
|
+
});
|
|
445
|
+
it("should default runsPerLevel to 1 when not specified", () => {
|
|
446
|
+
const results = [createMockResult(0.85), createMockResult(0.82, 1, "noise")];
|
|
447
|
+
const options = {
|
|
448
|
+
metrics: ["accuracy"],
|
|
449
|
+
perturbations: ["noise"],
|
|
450
|
+
};
|
|
451
|
+
const output = createRobustnessAnalysis(results, options);
|
|
452
|
+
assert.strictEqual(output.config.runsPerLevel, 1);
|
|
453
|
+
});
|
|
454
|
+
});
|
|
455
|
+
//# sourceMappingURL=analyzer.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.unit.test.js","sourceRoot":"","sources":["../../../src/robustness/__tests__/analyzer.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for Perturbations
|
|
3
|
+
*
|
|
4
|
+
* Tests perturbation application including:
|
|
5
|
+
* - Edge removal perturbation
|
|
6
|
+
* - Seed shift perturbation
|
|
7
|
+
* - Node removal perturbation
|
|
8
|
+
* - Weight noise perturbation
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=perturbations.unit.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perturbations.unit.test.d.ts","sourceRoot":"","sources":["../../../src/robustness/__tests__/perturbations.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|