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.
Files changed (199) hide show
  1. package/README.md +172 -0
  2. package/dist/__tests__/framework-pipeline.integration.test.d.ts +7 -0
  3. package/dist/__tests__/framework-pipeline.integration.test.d.ts.map +1 -0
  4. package/dist/__tests__/framework-pipeline.integration.test.js +413 -0
  5. package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -0
  6. package/dist/__tests__/registry-executor.integration.test.d.ts +5 -0
  7. package/dist/__tests__/registry-executor.integration.test.d.ts.map +1 -0
  8. package/dist/__tests__/registry-executor.integration.test.js +349 -0
  9. package/dist/__tests__/registry-executor.integration.test.js.map +1 -0
  10. package/dist/__tests__/test-helpers.d.ts +94 -0
  11. package/dist/__tests__/test-helpers.d.ts.map +1 -0
  12. package/dist/__tests__/test-helpers.js +271 -0
  13. package/dist/__tests__/test-helpers.js.map +1 -0
  14. package/dist/aggregation/aggregators.d.ts +54 -0
  15. package/dist/aggregation/aggregators.d.ts.map +1 -0
  16. package/dist/aggregation/aggregators.js +228 -0
  17. package/dist/aggregation/aggregators.js.map +1 -0
  18. package/dist/aggregation/index.d.ts +8 -0
  19. package/dist/aggregation/index.d.ts.map +1 -0
  20. package/dist/aggregation/index.js +8 -0
  21. package/dist/aggregation/index.js.map +1 -0
  22. package/dist/aggregation/pipeline.d.ts +38 -0
  23. package/dist/aggregation/pipeline.d.ts.map +1 -0
  24. package/dist/aggregation/pipeline.js +198 -0
  25. package/dist/aggregation/pipeline.js.map +1 -0
  26. package/dist/claims/evaluator.d.ts +33 -0
  27. package/dist/claims/evaluator.d.ts.map +1 -0
  28. package/dist/claims/evaluator.js +174 -0
  29. package/dist/claims/evaluator.js.map +1 -0
  30. package/dist/claims/index.d.ts +7 -0
  31. package/dist/claims/index.d.ts.map +1 -0
  32. package/dist/claims/index.js +7 -0
  33. package/dist/claims/index.js.map +1 -0
  34. package/dist/collector/index.d.ts +8 -0
  35. package/dist/collector/index.d.ts.map +1 -0
  36. package/dist/collector/index.js +8 -0
  37. package/dist/collector/index.js.map +1 -0
  38. package/dist/collector/result-collector.d.ts +159 -0
  39. package/dist/collector/result-collector.d.ts.map +1 -0
  40. package/dist/collector/result-collector.js +213 -0
  41. package/dist/collector/result-collector.js.map +1 -0
  42. package/dist/collector/schema.d.ts +34 -0
  43. package/dist/collector/schema.d.ts.map +1 -0
  44. package/dist/collector/schema.js +145 -0
  45. package/dist/collector/schema.js.map +1 -0
  46. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts +10 -0
  47. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts.map +1 -0
  48. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js +122 -0
  49. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js.map +1 -0
  50. package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts +7 -0
  51. package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts.map +1 -0
  52. package/dist/executor/__tests__/checkpoint-manager.integration.test.js +330 -0
  53. package/dist/executor/__tests__/checkpoint-manager.integration.test.js.map +1 -0
  54. package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts +7 -0
  55. package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts.map +1 -0
  56. package/dist/executor/__tests__/checkpoint-manager.unit.test.js +449 -0
  57. package/dist/executor/__tests__/checkpoint-manager.unit.test.js.map +1 -0
  58. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts +11 -0
  59. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts.map +1 -0
  60. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js +224 -0
  61. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js.map +1 -0
  62. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts +8 -0
  63. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts.map +1 -0
  64. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js +164 -0
  65. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js.map +1 -0
  66. package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts +7 -0
  67. package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts.map +1 -0
  68. package/dist/executor/__tests__/checkpoint-storage.unit.test.js +386 -0
  69. package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -0
  70. package/dist/executor/__tests__/executor.unit.test.d.ts +7 -0
  71. package/dist/executor/__tests__/executor.unit.test.d.ts.map +1 -0
  72. package/dist/executor/__tests__/executor.unit.test.js +134 -0
  73. package/dist/executor/__tests__/executor.unit.test.js.map +1 -0
  74. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts +12 -0
  75. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts.map +1 -0
  76. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js +196 -0
  77. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js.map +1 -0
  78. package/dist/executor/__tests__/parallel-executor.integration.test.d.ts +7 -0
  79. package/dist/executor/__tests__/parallel-executor.integration.test.d.ts.map +1 -0
  80. package/dist/executor/__tests__/parallel-executor.integration.test.js +249 -0
  81. package/dist/executor/__tests__/parallel-executor.integration.test.js.map +1 -0
  82. package/dist/executor/__tests__/parallel-executor.unit.test.d.ts +7 -0
  83. package/dist/executor/__tests__/parallel-executor.unit.test.d.ts.map +1 -0
  84. package/dist/executor/__tests__/parallel-executor.unit.test.js +203 -0
  85. package/dist/executor/__tests__/parallel-executor.unit.test.js.map +1 -0
  86. package/dist/executor/checkpoint-manager.d.ts +231 -0
  87. package/dist/executor/checkpoint-manager.d.ts.map +1 -0
  88. package/dist/executor/checkpoint-manager.js +395 -0
  89. package/dist/executor/checkpoint-manager.js.map +1 -0
  90. package/dist/executor/checkpoint-storage.d.ts +230 -0
  91. package/dist/executor/checkpoint-storage.d.ts.map +1 -0
  92. package/dist/executor/checkpoint-storage.js +370 -0
  93. package/dist/executor/checkpoint-storage.js.map +1 -0
  94. package/dist/executor/checkpoint-types.d.ts +48 -0
  95. package/dist/executor/checkpoint-types.d.ts.map +1 -0
  96. package/dist/executor/checkpoint-types.js +8 -0
  97. package/dist/executor/checkpoint-types.js.map +1 -0
  98. package/dist/executor/executor.d.ts +164 -0
  99. package/dist/executor/executor.d.ts.map +1 -0
  100. package/dist/executor/executor.js +408 -0
  101. package/dist/executor/executor.js.map +1 -0
  102. package/dist/executor/index.d.ts +11 -0
  103. package/dist/executor/index.d.ts.map +1 -0
  104. package/dist/executor/index.js +11 -0
  105. package/dist/executor/index.js.map +1 -0
  106. package/dist/executor/memory-monitor.d.ts +115 -0
  107. package/dist/executor/memory-monitor.d.ts.map +1 -0
  108. package/dist/executor/memory-monitor.js +168 -0
  109. package/dist/executor/memory-monitor.js.map +1 -0
  110. package/dist/executor/parallel-executor.d.ts +53 -0
  111. package/dist/executor/parallel-executor.d.ts.map +1 -0
  112. package/dist/executor/parallel-executor.js +194 -0
  113. package/dist/executor/parallel-executor.js.map +1 -0
  114. package/dist/executor/run-id.d.ts +71 -0
  115. package/dist/executor/run-id.d.ts.map +1 -0
  116. package/dist/executor/run-id.js +67 -0
  117. package/dist/executor/run-id.js.map +1 -0
  118. package/dist/executor/worker-entry.d.ts +8 -0
  119. package/dist/executor/worker-entry.d.ts.map +1 -0
  120. package/dist/executor/worker-entry.js +67 -0
  121. package/dist/executor/worker-entry.js.map +1 -0
  122. package/dist/index.cjs +11 -0
  123. package/dist/index.d.ts +15 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +24 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/registry/case-registry.d.ts +113 -0
  128. package/dist/registry/case-registry.d.ts.map +1 -0
  129. package/dist/registry/case-registry.js +160 -0
  130. package/dist/registry/case-registry.js.map +1 -0
  131. package/dist/registry/index.d.ts +8 -0
  132. package/dist/registry/index.d.ts.map +1 -0
  133. package/dist/registry/index.js +8 -0
  134. package/dist/registry/index.js.map +1 -0
  135. package/dist/registry/sut-registry.d.ts +96 -0
  136. package/dist/registry/sut-registry.d.ts.map +1 -0
  137. package/dist/registry/sut-registry.js +126 -0
  138. package/dist/registry/sut-registry.js.map +1 -0
  139. package/dist/renderers/index.d.ts +10 -0
  140. package/dist/renderers/index.d.ts.map +1 -0
  141. package/dist/renderers/index.js +9 -0
  142. package/dist/renderers/index.js.map +1 -0
  143. package/dist/renderers/latex-renderer.d.ts +84 -0
  144. package/dist/renderers/latex-renderer.d.ts.map +1 -0
  145. package/dist/renderers/latex-renderer.js +208 -0
  146. package/dist/renderers/latex-renderer.js.map +1 -0
  147. package/dist/renderers/types.d.ts +106 -0
  148. package/dist/renderers/types.d.ts.map +1 -0
  149. package/dist/renderers/types.js +23 -0
  150. package/dist/renderers/types.js.map +1 -0
  151. package/dist/robustness/analyzer.d.ts +61 -0
  152. package/dist/robustness/analyzer.d.ts.map +1 -0
  153. package/dist/robustness/analyzer.js +191 -0
  154. package/dist/robustness/analyzer.js.map +1 -0
  155. package/dist/robustness/index.d.ts +8 -0
  156. package/dist/robustness/index.d.ts.map +1 -0
  157. package/dist/robustness/index.js +8 -0
  158. package/dist/robustness/index.js.map +1 -0
  159. package/dist/robustness/perturbations.d.ts +46 -0
  160. package/dist/robustness/perturbations.d.ts.map +1 -0
  161. package/dist/robustness/perturbations.js +184 -0
  162. package/dist/robustness/perturbations.js.map +1 -0
  163. package/dist/statistical/index.d.ts +8 -0
  164. package/dist/statistical/index.d.ts.map +1 -0
  165. package/dist/statistical/index.js +8 -0
  166. package/dist/statistical/index.js.map +1 -0
  167. package/dist/statistical/mann-whitney-u.d.ts +62 -0
  168. package/dist/statistical/mann-whitney-u.d.ts.map +1 -0
  169. package/dist/statistical/mann-whitney-u.js +127 -0
  170. package/dist/statistical/mann-whitney-u.js.map +1 -0
  171. package/dist/types/aggregate.d.ts +124 -0
  172. package/dist/types/aggregate.d.ts.map +1 -0
  173. package/dist/types/aggregate.js +9 -0
  174. package/dist/types/aggregate.js.map +1 -0
  175. package/dist/types/case.d.ts +105 -0
  176. package/dist/types/case.d.ts.map +1 -0
  177. package/dist/types/case.js +10 -0
  178. package/dist/types/case.js.map +1 -0
  179. package/dist/types/claims.d.ts +122 -0
  180. package/dist/types/claims.d.ts.map +1 -0
  181. package/dist/types/claims.js +14 -0
  182. package/dist/types/claims.js.map +1 -0
  183. package/dist/types/index.d.ts +12 -0
  184. package/dist/types/index.d.ts.map +1 -0
  185. package/dist/types/index.js +7 -0
  186. package/dist/types/index.js.map +1 -0
  187. package/dist/types/perturbation.d.ts +105 -0
  188. package/dist/types/perturbation.d.ts.map +1 -0
  189. package/dist/types/perturbation.js +9 -0
  190. package/dist/types/perturbation.js.map +1 -0
  191. package/dist/types/result.d.ts +150 -0
  192. package/dist/types/result.d.ts.map +1 -0
  193. package/dist/types/result.js +12 -0
  194. package/dist/types/result.js.map +1 -0
  195. package/dist/types/sut.d.ts +128 -0
  196. package/dist/types/sut.d.ts.map +1 -0
  197. package/dist/types/sut.js +12 -0
  198. package/dist/types/sut.js.map +1 -0
  199. 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,7 @@
1
+ /**
2
+ * Integration tests for Framework Pipeline
3
+ *
4
+ * Tests the complete flow: Results → Aggregate → Evaluate Claims → Render
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=framework-pipeline.integration.test.d.ts.map
@@ -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,5 @@
1
+ /**
2
+ * Integration tests for SUT Registry and Case Registry
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=registry-executor.integration.test.d.ts.map
@@ -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"}