ppef 1.0.0 → 1.0.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.
- package/README.md +172 -0
- package/dist/__tests__/framework-pipeline.integration.test.d.ts +7 -0
- package/dist/__tests__/framework-pipeline.integration.test.d.ts.map +1 -0
- package/dist/__tests__/framework-pipeline.integration.test.js +413 -0
- package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -0
- package/dist/__tests__/registry-executor.integration.test.d.ts +5 -0
- package/dist/__tests__/registry-executor.integration.test.d.ts.map +1 -0
- package/dist/__tests__/registry-executor.integration.test.js +349 -0
- package/dist/__tests__/registry-executor.integration.test.js.map +1 -0
- package/dist/__tests__/test-helpers.d.ts +94 -0
- package/dist/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/__tests__/test-helpers.js +271 -0
- package/dist/__tests__/test-helpers.js.map +1 -0
- package/dist/aggregation/aggregators.d.ts +54 -0
- package/dist/aggregation/aggregators.d.ts.map +1 -0
- package/dist/aggregation/aggregators.js +228 -0
- package/dist/aggregation/aggregators.js.map +1 -0
- package/dist/aggregation/index.d.ts +8 -0
- package/dist/aggregation/index.d.ts.map +1 -0
- package/dist/aggregation/index.js +8 -0
- package/dist/aggregation/index.js.map +1 -0
- package/dist/aggregation/pipeline.d.ts +38 -0
- package/dist/aggregation/pipeline.d.ts.map +1 -0
- package/dist/aggregation/pipeline.js +198 -0
- package/dist/aggregation/pipeline.js.map +1 -0
- package/dist/claims/evaluator.d.ts +33 -0
- package/dist/claims/evaluator.d.ts.map +1 -0
- package/dist/claims/evaluator.js +174 -0
- package/dist/claims/evaluator.js.map +1 -0
- package/dist/claims/index.d.ts +7 -0
- package/dist/claims/index.d.ts.map +1 -0
- package/dist/claims/index.js +7 -0
- package/dist/claims/index.js.map +1 -0
- package/dist/collector/index.d.ts +8 -0
- package/dist/collector/index.d.ts.map +1 -0
- package/dist/collector/index.js +8 -0
- package/dist/collector/index.js.map +1 -0
- package/dist/collector/result-collector.d.ts +159 -0
- package/dist/collector/result-collector.d.ts.map +1 -0
- package/dist/collector/result-collector.js +213 -0
- package/dist/collector/result-collector.js.map +1 -0
- package/dist/collector/schema.d.ts +34 -0
- package/dist/collector/schema.d.ts.map +1 -0
- package/dist/collector/schema.js +145 -0
- package/dist/collector/schema.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts +10 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js +122 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts +7 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.js +330 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.js +449 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts +11 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js +224 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts +8 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js +164 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js +386 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -0
- package/dist/executor/__tests__/executor.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/executor.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/executor.unit.test.js +134 -0
- package/dist/executor/__tests__/executor.unit.test.js.map +1 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts +12 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js +196 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js.map +1 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.d.ts +7 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.js +249 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.js.map +1 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.js +203 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.js.map +1 -0
- package/dist/executor/checkpoint-manager.d.ts +231 -0
- package/dist/executor/checkpoint-manager.d.ts.map +1 -0
- package/dist/executor/checkpoint-manager.js +395 -0
- package/dist/executor/checkpoint-manager.js.map +1 -0
- package/dist/executor/checkpoint-storage.d.ts +230 -0
- package/dist/executor/checkpoint-storage.d.ts.map +1 -0
- package/dist/executor/checkpoint-storage.js +370 -0
- package/dist/executor/checkpoint-storage.js.map +1 -0
- package/dist/executor/checkpoint-types.d.ts +48 -0
- package/dist/executor/checkpoint-types.d.ts.map +1 -0
- package/dist/executor/checkpoint-types.js +8 -0
- package/dist/executor/checkpoint-types.js.map +1 -0
- package/dist/executor/executor.d.ts +164 -0
- package/dist/executor/executor.d.ts.map +1 -0
- package/dist/executor/executor.js +408 -0
- package/dist/executor/executor.js.map +1 -0
- package/dist/executor/index.d.ts +11 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +11 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/executor/memory-monitor.d.ts +115 -0
- package/dist/executor/memory-monitor.d.ts.map +1 -0
- package/dist/executor/memory-monitor.js +168 -0
- package/dist/executor/memory-monitor.js.map +1 -0
- package/dist/executor/parallel-executor.d.ts +53 -0
- package/dist/executor/parallel-executor.d.ts.map +1 -0
- package/dist/executor/parallel-executor.js +194 -0
- package/dist/executor/parallel-executor.js.map +1 -0
- package/dist/executor/run-id.d.ts +71 -0
- package/dist/executor/run-id.d.ts.map +1 -0
- package/dist/executor/run-id.js +67 -0
- package/dist/executor/run-id.js.map +1 -0
- package/dist/executor/worker-entry.d.ts +8 -0
- package/dist/executor/worker-entry.d.ts.map +1 -0
- package/dist/executor/worker-entry.js +67 -0
- package/dist/executor/worker-entry.js.map +1 -0
- package/dist/index.cjs +11 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/registry/case-registry.d.ts +113 -0
- package/dist/registry/case-registry.d.ts.map +1 -0
- package/dist/registry/case-registry.js +160 -0
- package/dist/registry/case-registry.js.map +1 -0
- package/dist/registry/index.d.ts +8 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/sut-registry.d.ts +96 -0
- package/dist/registry/sut-registry.d.ts.map +1 -0
- package/dist/registry/sut-registry.js +126 -0
- package/dist/registry/sut-registry.js.map +1 -0
- package/dist/renderers/index.d.ts +10 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/index.js +9 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/latex-renderer.d.ts +84 -0
- package/dist/renderers/latex-renderer.d.ts.map +1 -0
- package/dist/renderers/latex-renderer.js +208 -0
- package/dist/renderers/latex-renderer.js.map +1 -0
- package/dist/renderers/types.d.ts +106 -0
- package/dist/renderers/types.d.ts.map +1 -0
- package/dist/renderers/types.js +23 -0
- package/dist/renderers/types.js.map +1 -0
- package/dist/robustness/analyzer.d.ts +61 -0
- package/dist/robustness/analyzer.d.ts.map +1 -0
- package/dist/robustness/analyzer.js +191 -0
- package/dist/robustness/analyzer.js.map +1 -0
- package/dist/robustness/index.d.ts +8 -0
- package/dist/robustness/index.d.ts.map +1 -0
- package/dist/robustness/index.js +8 -0
- package/dist/robustness/index.js.map +1 -0
- package/dist/robustness/perturbations.d.ts +46 -0
- package/dist/robustness/perturbations.d.ts.map +1 -0
- package/dist/robustness/perturbations.js +184 -0
- package/dist/robustness/perturbations.js.map +1 -0
- package/dist/statistical/index.d.ts +8 -0
- package/dist/statistical/index.d.ts.map +1 -0
- package/dist/statistical/index.js +8 -0
- package/dist/statistical/index.js.map +1 -0
- package/dist/statistical/mann-whitney-u.d.ts +62 -0
- package/dist/statistical/mann-whitney-u.d.ts.map +1 -0
- package/dist/statistical/mann-whitney-u.js +127 -0
- package/dist/statistical/mann-whitney-u.js.map +1 -0
- package/dist/types/aggregate.d.ts +124 -0
- package/dist/types/aggregate.d.ts.map +1 -0
- package/dist/types/aggregate.js +9 -0
- package/dist/types/aggregate.js.map +1 -0
- package/dist/types/case.d.ts +105 -0
- package/dist/types/case.d.ts.map +1 -0
- package/dist/types/case.js +10 -0
- package/dist/types/case.js.map +1 -0
- package/dist/types/claims.d.ts +122 -0
- package/dist/types/claims.d.ts.map +1 -0
- package/dist/types/claims.js +14 -0
- package/dist/types/claims.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/perturbation.d.ts +105 -0
- package/dist/types/perturbation.d.ts.map +1 -0
- package/dist/types/perturbation.js +9 -0
- package/dist/types/perturbation.js.map +1 -0
- package/dist/types/result.d.ts +150 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +12 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/sut.d.ts +128 -0
- package/dist/types/sut.d.ts.map +1 -0
- package/dist/types/sut.js +12 -0
- package/dist/types/sut.js.map +1 -0
- package/package.json +283 -7
package/README.md
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# PPEF - Portable Programmatic Evaluation Framework
|
|
2
|
+
|
|
3
|
+
A claim-driven, deterministic evaluation framework for experiments. PPEF provides a structured approach to testing and validating software components through reusable test cases, statistical aggregation, and claim-based evaluation.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Core**: Type-safe foundation with zero external dependencies
|
|
8
|
+
- **Store**: Centralized registry for Systems Under Test (SUTs)
|
|
9
|
+
- **Case**: Reusable test case infrastructure with setup/teardown
|
|
10
|
+
- **Execute**: Deterministic test execution with snapshot capture
|
|
11
|
+
- **Aggregate**: Statistical aggregation across test runs (mean, median, mode, min, max, stdDev)
|
|
12
|
+
- **Evaluate**: Claim-driven validation with custom predicates
|
|
13
|
+
- **Render**: Report generation in multiple formats (console, Markdown, JSON)
|
|
14
|
+
- **Monitor**: Built-in memory and CPU monitoring for resource tracking
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install as a dependency
|
|
20
|
+
pnpm add ppef
|
|
21
|
+
|
|
22
|
+
# Or use locally for development
|
|
23
|
+
git clone <repository-url>
|
|
24
|
+
cd ppef
|
|
25
|
+
pnpm install
|
|
26
|
+
pnpm build
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Quick Start
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { Store, Case, Execute, Aggregate, Evaluate, Render } from 'ppef';
|
|
33
|
+
|
|
34
|
+
// 1. Register your System Under Test (SUT)
|
|
35
|
+
Store.register('sort-algo', {
|
|
36
|
+
name: 'QuickSort',
|
|
37
|
+
execute: (input: number[]) => input.sort((a, b) => a - b)
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// 2. Define test cases
|
|
41
|
+
const ascendingCase = new Case({
|
|
42
|
+
name: 'ascending-order',
|
|
43
|
+
setup: () => [1, 2, 3, 4, 5],
|
|
44
|
+
teardown: (result) => console.log('Result:', result)
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const descendingCase = new Case({
|
|
48
|
+
name: 'descending-order',
|
|
49
|
+
setup: () => [5, 4, 3, 2, 1],
|
|
50
|
+
teardown: (result) => console.log('Result:', result)
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// 3. Execute tests
|
|
54
|
+
const results = Execute.run('sort-algo', [ascendingCase, descendingCase]);
|
|
55
|
+
|
|
56
|
+
// 4. Aggregate metrics across multiple runs
|
|
57
|
+
const aggregated = Aggregate.mean(results);
|
|
58
|
+
|
|
59
|
+
// 5. Evaluate claims
|
|
60
|
+
const claims = Evaluate.claims(aggregated, {
|
|
61
|
+
'always-sorted': (result) => {
|
|
62
|
+
const arr = result.output;
|
|
63
|
+
for (let i = 0; i < arr.length - 1; i++) {
|
|
64
|
+
if (arr[i] > arr[i + 1]) return false;
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// 6. Render reports
|
|
71
|
+
Render.console(claims);
|
|
72
|
+
Render.markdown(claims, './results.md');
|
|
73
|
+
Render.json(claims, './results.json');
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Modules
|
|
77
|
+
|
|
78
|
+
### Core
|
|
79
|
+
Type-safe foundation providing primitive types and interfaces. Zero external dependencies - pure TypeScript utilities for the entire framework.
|
|
80
|
+
|
|
81
|
+
### Store
|
|
82
|
+
Centralized registry for managing Systems Under Test (SUTs). Register implementations with unique identifiers and retrieve them for execution.
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
Store.register('my-sut', {
|
|
86
|
+
name: 'My Implementation',
|
|
87
|
+
version: '1.0.0',
|
|
88
|
+
execute: (input) => { /* implementation */ }
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
const sut = Store.get('my-sut');
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Case
|
|
95
|
+
Reusable test case infrastructure with lifecycle management. Each case includes setup, execution, and teardown phases with automatic resource cleanup.
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
const testCase = new Case({
|
|
99
|
+
name: 'test-case-1',
|
|
100
|
+
setup: () => ({ data: [1, 2, 3] }),
|
|
101
|
+
teardown: (result) => console.log('Cleanup:', result)
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Execute
|
|
106
|
+
Deterministic test execution engine. Runs SUTs against test cases and captures snapshots of inputs, outputs, and execution metadata.
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
const results = Execute.run('my-sut', [testCase]);
|
|
110
|
+
const snapshot = Execute.capture('my-sut', testCase);
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Aggregate
|
|
114
|
+
Statistical aggregation utilities for analyzing test results across multiple runs. Compute mean, median, mode, min, max, and standard deviation.
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const stats = Aggregate.mean(results);
|
|
118
|
+
const median = Aggregate.median(results);
|
|
119
|
+
const deviation = Aggregate.stdDev(results);
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Evaluate
|
|
123
|
+
Claim-driven validation framework. Define custom predicates to validate test results against expected properties and behaviors.
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
const claims = Evaluate.claims(results, {
|
|
127
|
+
'performance': (r) => r.duration < 100,
|
|
128
|
+
'correctness': (r) => r.output === expected,
|
|
129
|
+
'memory-safe': (r) => r.memoryUsage < 1024 * 1024
|
|
130
|
+
});
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Render
|
|
134
|
+
Multi-format report generation. Output results to console, Markdown files, or JSON for documentation and CI/CD integration.
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
Render.console(results);
|
|
138
|
+
Render.markdown(results, './report.md');
|
|
139
|
+
Render.json(results, './report.json');
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Monitor
|
|
143
|
+
Built-in resource tracking for performance profiling. Monitor memory usage and CPU consumption during test execution.
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
const monitor = new Monitor();
|
|
147
|
+
monitor.start();
|
|
148
|
+
// ... run tests ...
|
|
149
|
+
const metrics = monitor.stop();
|
|
150
|
+
console.log('Memory used:', metrics.memoryUsage);
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## API Reference
|
|
154
|
+
|
|
155
|
+
Detailed type definitions and API documentation are available in the source files:
|
|
156
|
+
|
|
157
|
+
- `src/core/` - Core types and interfaces
|
|
158
|
+
- `src/store.ts` - SUT registry API
|
|
159
|
+
- `src/case.ts` - Test case API
|
|
160
|
+
- `src/execute.ts` - Execution engine API
|
|
161
|
+
- `src/aggregate.ts` - Statistical functions
|
|
162
|
+
- `src/evaluate.ts` - Claim evaluation API
|
|
163
|
+
- `src/render.ts` - Report generation API
|
|
164
|
+
- `src/monitor.ts` - Resource monitoring API
|
|
165
|
+
|
|
166
|
+
## License
|
|
167
|
+
|
|
168
|
+
MIT
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
**PPEF** - Making experiments reproducible, evaluable, and documentable.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-pipeline.integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/framework-pipeline.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for Framework Pipeline
|
|
3
|
+
*
|
|
4
|
+
* Tests the complete flow: Results → Aggregate → Evaluate Claims → Render
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it } from "node:test";
|
|
7
|
+
import { strict as assert } from "node:assert";
|
|
8
|
+
import { aggregateResults } from "../aggregation/pipeline.js";
|
|
9
|
+
import { createClaimSummary, evaluateClaims } from "../claims/evaluator.js";
|
|
10
|
+
import { ResultCollector } from "../collector/result-collector.js";
|
|
11
|
+
import { LaTeXRenderer } from "../renderers/latex-renderer.js";
|
|
12
|
+
import { createMockResult } from "./test-helpers.js";
|
|
13
|
+
describe("Framework Pipeline Integration", () => {
|
|
14
|
+
/**
|
|
15
|
+
* Create a realistic set of evaluation results for testing
|
|
16
|
+
*/
|
|
17
|
+
const createTestResults = () => {
|
|
18
|
+
const results = [];
|
|
19
|
+
// Degree-Prioritised (primary) - faster, better hub avoidance
|
|
20
|
+
for (let index = 0; index < 10; index++) {
|
|
21
|
+
results.push(createMockResult({
|
|
22
|
+
run: {
|
|
23
|
+
runId: `dp-run-${index}`,
|
|
24
|
+
sut: "degree-prioritised-v1.0.0",
|
|
25
|
+
sutRole: "primary",
|
|
26
|
+
caseId: `case-${index}`,
|
|
27
|
+
caseClass: "scale-free",
|
|
28
|
+
},
|
|
29
|
+
correctness: {
|
|
30
|
+
expectedExists: true,
|
|
31
|
+
producedOutput: true,
|
|
32
|
+
valid: true,
|
|
33
|
+
matchesExpected: true,
|
|
34
|
+
},
|
|
35
|
+
metrics: {
|
|
36
|
+
numeric: {
|
|
37
|
+
"execution-time": 80 + Math.random() * 20,
|
|
38
|
+
"nodes-expanded": 40 + Math.random() * 10,
|
|
39
|
+
"hub-traversal": 5 + Math.random() * 5,
|
|
40
|
+
"path-diversity": 0.75 + Math.random() * 0.15,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
// Standard BFS (baseline) - slower, more hub visits
|
|
46
|
+
for (let index = 0; index < 10; index++) {
|
|
47
|
+
results.push(createMockResult({
|
|
48
|
+
run: {
|
|
49
|
+
runId: `bfs-run-${index}`,
|
|
50
|
+
sut: "standard-bfs-v1.0.0",
|
|
51
|
+
sutRole: "baseline",
|
|
52
|
+
caseId: `case-${index}`,
|
|
53
|
+
caseClass: "scale-free",
|
|
54
|
+
},
|
|
55
|
+
correctness: {
|
|
56
|
+
expectedExists: true,
|
|
57
|
+
producedOutput: true,
|
|
58
|
+
valid: true,
|
|
59
|
+
matchesExpected: true,
|
|
60
|
+
},
|
|
61
|
+
metrics: {
|
|
62
|
+
numeric: {
|
|
63
|
+
"execution-time": 120 + Math.random() * 30,
|
|
64
|
+
"nodes-expanded": 70 + Math.random() * 20,
|
|
65
|
+
"hub-traversal": 20 + Math.random() * 10,
|
|
66
|
+
"path-diversity": 0.6 + Math.random() * 0.15,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
// Frontier-Balanced (baseline) - between the two
|
|
72
|
+
for (let index = 0; index < 10; index++) {
|
|
73
|
+
results.push(createMockResult({
|
|
74
|
+
run: {
|
|
75
|
+
runId: `fb-run-${index}`,
|
|
76
|
+
sut: "frontier-balanced-v1.0.0",
|
|
77
|
+
sutRole: "baseline",
|
|
78
|
+
caseId: `case-${index}`,
|
|
79
|
+
caseClass: "scale-free",
|
|
80
|
+
},
|
|
81
|
+
correctness: {
|
|
82
|
+
expectedExists: true,
|
|
83
|
+
producedOutput: true,
|
|
84
|
+
valid: true,
|
|
85
|
+
matchesExpected: true,
|
|
86
|
+
},
|
|
87
|
+
metrics: {
|
|
88
|
+
numeric: {
|
|
89
|
+
"execution-time": 100 + Math.random() * 25,
|
|
90
|
+
"nodes-expanded": 55 + Math.random() * 15,
|
|
91
|
+
"hub-traversal": 12 + Math.random() * 8,
|
|
92
|
+
"path-diversity": 0.65 + Math.random() * 0.15,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
return results;
|
|
98
|
+
};
|
|
99
|
+
it("should flow: results → aggregate → evaluate claims → render", () => {
|
|
100
|
+
// Step 1: Collect results
|
|
101
|
+
const collector = new ResultCollector();
|
|
102
|
+
const results = createTestResults();
|
|
103
|
+
collector.recordBatch(results);
|
|
104
|
+
assert.strictEqual(collector.count, 30);
|
|
105
|
+
assert.strictEqual(collector.getUniqueSuts().length, 3);
|
|
106
|
+
// Step 2: Aggregate
|
|
107
|
+
const aggregates = aggregateResults(collector.getAll());
|
|
108
|
+
assert.ok(aggregates.length > 0);
|
|
109
|
+
// Find primary aggregate
|
|
110
|
+
const dpAggregate = aggregates.find((a) => a.sut === "degree-prioritised-v1.0.0");
|
|
111
|
+
assert.ok(dpAggregate);
|
|
112
|
+
assert.ok(dpAggregate?.metrics["execution-time"]);
|
|
113
|
+
assert.strictEqual(dpAggregate?.group.runCount, 10);
|
|
114
|
+
// Step 3: Define and evaluate claims
|
|
115
|
+
const claims = [
|
|
116
|
+
{
|
|
117
|
+
claimId: "C1",
|
|
118
|
+
description: "DP is faster than BFS",
|
|
119
|
+
sut: "degree-prioritised-v1.0.0",
|
|
120
|
+
baseline: "standard-bfs-v1.0.0",
|
|
121
|
+
metric: "execution-time",
|
|
122
|
+
direction: "less",
|
|
123
|
+
scope: "global",
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
claimId: "C2",
|
|
127
|
+
description: "DP visits fewer hubs than BFS",
|
|
128
|
+
sut: "degree-prioritised-v1.0.0",
|
|
129
|
+
baseline: "standard-bfs-v1.0.0",
|
|
130
|
+
metric: "hub-traversal",
|
|
131
|
+
direction: "less",
|
|
132
|
+
scope: "global",
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
claimId: "C3",
|
|
136
|
+
description: "DP has higher path diversity than BFS",
|
|
137
|
+
sut: "degree-prioritised-v1.0.0",
|
|
138
|
+
baseline: "standard-bfs-v1.0.0",
|
|
139
|
+
metric: "path-diversity",
|
|
140
|
+
direction: "greater",
|
|
141
|
+
scope: "global",
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
const evaluations = evaluateClaims(claims, aggregates);
|
|
145
|
+
assert.strictEqual(evaluations.length, 3);
|
|
146
|
+
assert.ok(evaluations.every((e) => e.status === "satisfied" || e.status === "violated" || e.status === "inconclusive"));
|
|
147
|
+
// Step 4: Create summary
|
|
148
|
+
const summary = createClaimSummary(evaluations);
|
|
149
|
+
assert.strictEqual(summary.summary.total, 3);
|
|
150
|
+
assert.strictEqual(summary.summary.satisfied + summary.summary.violated + summary.summary.inconclusive, 3);
|
|
151
|
+
// Step 5: Render
|
|
152
|
+
const renderer = new LaTeXRenderer();
|
|
153
|
+
const tableSpec = {
|
|
154
|
+
id: "performance-comparison",
|
|
155
|
+
filename: "06-performance-comparison.tex",
|
|
156
|
+
label: "tab:performance-comparison",
|
|
157
|
+
caption: "Performance comparison across methods",
|
|
158
|
+
columns: [
|
|
159
|
+
{ key: "method", header: "Method", align: "l" },
|
|
160
|
+
{ key: "execTime", header: "Time (ms)", align: "r" },
|
|
161
|
+
{ key: "nodesExpanded", header: "Nodes", align: "r" },
|
|
162
|
+
],
|
|
163
|
+
extractData: (aggs) => aggs.map((a) => ({
|
|
164
|
+
method: a.sut.replace("-v1.0.0", ""),
|
|
165
|
+
execTime: a.metrics["execution-time"]?.mean.toFixed(1),
|
|
166
|
+
nodesExpanded: a.metrics["nodes-expanded"]?.mean.toFixed(0),
|
|
167
|
+
})),
|
|
168
|
+
};
|
|
169
|
+
const tableOutput = renderer.renderTable(aggregates, tableSpec);
|
|
170
|
+
const claimOutput = renderer.renderClaimSummary(evaluations);
|
|
171
|
+
assert.ok(tableOutput.content.includes(String.raw `\begin{table}`));
|
|
172
|
+
assert.ok(tableOutput.content.includes("Performance comparison"));
|
|
173
|
+
assert.ok(claimOutput.content.includes("Claim"));
|
|
174
|
+
assert.ok(claimOutput.content.includes("Status"));
|
|
175
|
+
});
|
|
176
|
+
it("should handle the complete pipeline with real-world-like data", () => {
|
|
177
|
+
// Create results with deterministic values for predictable testing
|
|
178
|
+
const results = [];
|
|
179
|
+
// Primary: consistently better
|
|
180
|
+
for (let index = 0; index < 5; index++) {
|
|
181
|
+
results.push(createMockResult({
|
|
182
|
+
run: {
|
|
183
|
+
runId: `primary-${index}`,
|
|
184
|
+
sut: "primary-algorithm",
|
|
185
|
+
sutRole: "primary",
|
|
186
|
+
caseId: `case-${index}`,
|
|
187
|
+
},
|
|
188
|
+
metrics: {
|
|
189
|
+
numeric: {
|
|
190
|
+
"execution-time": 50,
|
|
191
|
+
"quality-score": 0.9,
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
196
|
+
// Baseline: consistently worse
|
|
197
|
+
for (let index = 0; index < 5; index++) {
|
|
198
|
+
results.push(createMockResult({
|
|
199
|
+
run: {
|
|
200
|
+
runId: `baseline-${index}`,
|
|
201
|
+
sut: "baseline-algorithm",
|
|
202
|
+
sutRole: "baseline",
|
|
203
|
+
caseId: `case-${index}`,
|
|
204
|
+
},
|
|
205
|
+
metrics: {
|
|
206
|
+
numeric: {
|
|
207
|
+
"execution-time": 100,
|
|
208
|
+
"quality-score": 0.7,
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
}));
|
|
212
|
+
}
|
|
213
|
+
// Aggregate
|
|
214
|
+
const aggregates = aggregateResults(results, { groupByCaseClass: false });
|
|
215
|
+
const primaryAgg = aggregates.find((a) => a.sut === "primary-algorithm");
|
|
216
|
+
const baselineAgg = aggregates.find((a) => a.sut === "baseline-algorithm");
|
|
217
|
+
assert.strictEqual(primaryAgg?.metrics["execution-time"].mean, 50);
|
|
218
|
+
assert.strictEqual(baselineAgg?.metrics["execution-time"].mean, 100);
|
|
219
|
+
// Evaluate claims
|
|
220
|
+
const claims = [
|
|
221
|
+
{
|
|
222
|
+
claimId: "SPEED",
|
|
223
|
+
description: "Primary is faster",
|
|
224
|
+
sut: "primary-algorithm",
|
|
225
|
+
baseline: "baseline-algorithm",
|
|
226
|
+
metric: "execution-time",
|
|
227
|
+
direction: "less",
|
|
228
|
+
scope: "global",
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
claimId: "QUALITY",
|
|
232
|
+
description: "Primary has higher quality",
|
|
233
|
+
sut: "primary-algorithm",
|
|
234
|
+
baseline: "baseline-algorithm",
|
|
235
|
+
metric: "quality-score",
|
|
236
|
+
direction: "greater",
|
|
237
|
+
scope: "global",
|
|
238
|
+
},
|
|
239
|
+
];
|
|
240
|
+
const evaluations = evaluateClaims(claims, aggregates);
|
|
241
|
+
// Both claims should be satisfied
|
|
242
|
+
assert.strictEqual(evaluations.find((e) => e.claim.claimId === "SPEED")?.status, "satisfied");
|
|
243
|
+
assert.strictEqual(evaluations.find((e) => e.claim.claimId === "QUALITY")?.status, "satisfied");
|
|
244
|
+
// Evidence should show correct values
|
|
245
|
+
const speedEvidence = evaluations.find((e) => e.claim.claimId === "SPEED")?.evidence;
|
|
246
|
+
assert.strictEqual(speedEvidence?.primaryValue, 50);
|
|
247
|
+
assert.strictEqual(speedEvidence?.baselineValue, 100);
|
|
248
|
+
assert.strictEqual(speedEvidence?.delta, -50); // 50 - 100 = -50
|
|
249
|
+
});
|
|
250
|
+
it("should properly serialize and deserialize through ResultCollector", () => {
|
|
251
|
+
const collector = new ResultCollector();
|
|
252
|
+
const results = createTestResults();
|
|
253
|
+
// Record results
|
|
254
|
+
collector.recordBatch(results);
|
|
255
|
+
// Serialize
|
|
256
|
+
const batch = collector.serialize({ experimentName: "test-exp" });
|
|
257
|
+
assert.strictEqual(batch.version, "1.0.0");
|
|
258
|
+
assert.strictEqual(batch.results.length, 30);
|
|
259
|
+
assert.strictEqual(batch.metadata?.experimentName, "test-exp");
|
|
260
|
+
// Load into new collector
|
|
261
|
+
const newCollector = new ResultCollector();
|
|
262
|
+
newCollector.load(batch);
|
|
263
|
+
assert.strictEqual(newCollector.count, 30);
|
|
264
|
+
assert.strictEqual(newCollector.getUniqueSuts().length, 3);
|
|
265
|
+
// Verify aggregation works on loaded data
|
|
266
|
+
const aggregates = aggregateResults(newCollector.getAll());
|
|
267
|
+
assert.ok(aggregates.length > 0);
|
|
268
|
+
});
|
|
269
|
+
it("should generate multiple tables from same aggregates", () => {
|
|
270
|
+
const results = createTestResults();
|
|
271
|
+
const aggregates = aggregateResults(results);
|
|
272
|
+
const renderer = new LaTeXRenderer();
|
|
273
|
+
const specs = [
|
|
274
|
+
{
|
|
275
|
+
id: "runtime",
|
|
276
|
+
filename: "runtime.tex",
|
|
277
|
+
label: "tab:runtime",
|
|
278
|
+
caption: "Runtime comparison",
|
|
279
|
+
columns: [
|
|
280
|
+
{ key: "method", header: "Method", align: "l" },
|
|
281
|
+
{ key: "time", header: "Time (ms)", align: "r" },
|
|
282
|
+
],
|
|
283
|
+
extractData: (aggs) => aggs.map((a) => ({
|
|
284
|
+
method: a.sut,
|
|
285
|
+
time: a.metrics["execution-time"]?.mean.toFixed(1),
|
|
286
|
+
})),
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
id: "quality",
|
|
290
|
+
filename: "quality.tex",
|
|
291
|
+
label: "tab:quality",
|
|
292
|
+
caption: "Quality metrics",
|
|
293
|
+
columns: [
|
|
294
|
+
{ key: "method", header: "Method", align: "l" },
|
|
295
|
+
{ key: "diversity", header: "Diversity", align: "r" },
|
|
296
|
+
],
|
|
297
|
+
extractData: (aggs) => aggs.map((a) => ({
|
|
298
|
+
method: a.sut,
|
|
299
|
+
diversity: a.metrics["path-diversity"]?.mean.toFixed(3),
|
|
300
|
+
})),
|
|
301
|
+
},
|
|
302
|
+
];
|
|
303
|
+
const outputs = renderer.renderAll(aggregates, specs);
|
|
304
|
+
assert.strictEqual(outputs.length, 2);
|
|
305
|
+
assert.strictEqual(outputs[0].id, "runtime");
|
|
306
|
+
assert.strictEqual(outputs[1].id, "quality");
|
|
307
|
+
assert.ok(outputs[0].content.includes("Runtime comparison"));
|
|
308
|
+
assert.ok(outputs[1].content.includes("Quality metrics"));
|
|
309
|
+
});
|
|
310
|
+
it("should handle claims with scope constraints", () => {
|
|
311
|
+
// Create results with different case classes
|
|
312
|
+
const results = [];
|
|
313
|
+
// Scale-free: primary is better
|
|
314
|
+
for (let index = 0; index < 5; index++) {
|
|
315
|
+
results.push(createMockResult({
|
|
316
|
+
run: {
|
|
317
|
+
runId: `dp-sf-${index}`,
|
|
318
|
+
sut: "degree-prioritised-v1.0.0",
|
|
319
|
+
sutRole: "primary",
|
|
320
|
+
caseId: `sf-case-${index}`,
|
|
321
|
+
caseClass: "scale-free",
|
|
322
|
+
},
|
|
323
|
+
metrics: { numeric: { "execution-time": 50 } },
|
|
324
|
+
}));
|
|
325
|
+
results.push(createMockResult({
|
|
326
|
+
run: {
|
|
327
|
+
runId: `bfs-sf-${index}`,
|
|
328
|
+
sut: "standard-bfs-v1.0.0",
|
|
329
|
+
sutRole: "baseline",
|
|
330
|
+
caseId: `sf-case-${index}`,
|
|
331
|
+
caseClass: "scale-free",
|
|
332
|
+
},
|
|
333
|
+
metrics: { numeric: { "execution-time": 100 } },
|
|
334
|
+
}));
|
|
335
|
+
}
|
|
336
|
+
// Random: baseline is better (hypothetically)
|
|
337
|
+
for (let index = 0; index < 5; index++) {
|
|
338
|
+
results.push(createMockResult({
|
|
339
|
+
run: {
|
|
340
|
+
runId: `dp-rand-${index}`,
|
|
341
|
+
sut: "degree-prioritised-v1.0.0",
|
|
342
|
+
sutRole: "primary",
|
|
343
|
+
caseId: `rand-case-${index}`,
|
|
344
|
+
caseClass: "random",
|
|
345
|
+
},
|
|
346
|
+
metrics: { numeric: { "execution-time": 100 } },
|
|
347
|
+
}));
|
|
348
|
+
results.push(createMockResult({
|
|
349
|
+
run: {
|
|
350
|
+
runId: `bfs-rand-${index}`,
|
|
351
|
+
sut: "standard-bfs-v1.0.0",
|
|
352
|
+
sutRole: "baseline",
|
|
353
|
+
caseId: `rand-case-${index}`,
|
|
354
|
+
caseClass: "random",
|
|
355
|
+
},
|
|
356
|
+
metrics: { numeric: { "execution-time": 100 } },
|
|
357
|
+
}));
|
|
358
|
+
}
|
|
359
|
+
const aggregates = aggregateResults(results);
|
|
360
|
+
// Claim scoped to scale-free should be satisfied
|
|
361
|
+
const scopedClaim = {
|
|
362
|
+
claimId: "SF-SPEED",
|
|
363
|
+
description: "DP is faster on scale-free graphs",
|
|
364
|
+
sut: "degree-prioritised-v1.0.0",
|
|
365
|
+
baseline: "standard-bfs-v1.0.0",
|
|
366
|
+
metric: "execution-time",
|
|
367
|
+
direction: "less",
|
|
368
|
+
scope: "caseClass",
|
|
369
|
+
scopeConstraints: { caseClass: "scale-free" },
|
|
370
|
+
};
|
|
371
|
+
const evaluations = evaluateClaims([scopedClaim], aggregates);
|
|
372
|
+
assert.strictEqual(evaluations[0].status, "satisfied");
|
|
373
|
+
});
|
|
374
|
+
it("should detect violated claims correctly", () => {
|
|
375
|
+
// Create results where the claim will be violated
|
|
376
|
+
const results = [];
|
|
377
|
+
// Primary is SLOWER than baseline (claim violation)
|
|
378
|
+
for (let index = 0; index < 5; index++) {
|
|
379
|
+
results.push(createMockResult({
|
|
380
|
+
run: {
|
|
381
|
+
runId: `primary-${index}`,
|
|
382
|
+
sut: "primary-algorithm",
|
|
383
|
+
sutRole: "primary",
|
|
384
|
+
caseId: `case-${index}`,
|
|
385
|
+
},
|
|
386
|
+
metrics: { numeric: { "execution-time": 150 } },
|
|
387
|
+
}));
|
|
388
|
+
results.push(createMockResult({
|
|
389
|
+
run: {
|
|
390
|
+
runId: `baseline-${index}`,
|
|
391
|
+
sut: "baseline-algorithm",
|
|
392
|
+
sutRole: "baseline",
|
|
393
|
+
caseId: `case-${index}`,
|
|
394
|
+
},
|
|
395
|
+
metrics: { numeric: { "execution-time": 100 } },
|
|
396
|
+
}));
|
|
397
|
+
}
|
|
398
|
+
const aggregates = aggregateResults(results, { groupByCaseClass: false });
|
|
399
|
+
const claim = {
|
|
400
|
+
claimId: "VIOLATED",
|
|
401
|
+
description: "Primary should be faster (but isn't)",
|
|
402
|
+
sut: "primary-algorithm",
|
|
403
|
+
baseline: "baseline-algorithm",
|
|
404
|
+
metric: "execution-time",
|
|
405
|
+
direction: "less",
|
|
406
|
+
scope: "global",
|
|
407
|
+
};
|
|
408
|
+
const evaluations = evaluateClaims([claim], aggregates);
|
|
409
|
+
assert.strictEqual(evaluations[0].status, "violated");
|
|
410
|
+
assert.ok(evaluations[0].evidence.delta > 0); // 150 - 100 = 50
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
//# sourceMappingURL=framework-pipeline.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-pipeline.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/framework-pipeline.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-executor.integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/registry-executor.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|