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
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Integration tests for CheckpointManager
3
+ *
4
+ * Tests end-to-end checkpoint operations with real file system.
5
+ */
6
+ import { existsSync, rmSync, unlinkSync } from "node:fs";
7
+ import { join } from "node:path";
8
+ import { describe, it, beforeEach, afterEach } from "node:test";
9
+ import assert from "node:assert/strict";
10
+ import { CheckpointManager, InMemoryLock } from "../checkpoint-manager.js";
11
+ import { FileStorage } from "../checkpoint-storage.js";
12
+ const TEST_DIR = join(process.cwd(), "test-checkpoints");
13
+ /**
14
+ * Create a minimal valid EvaluationResult for testing.
15
+ * @param runId
16
+ */
17
+ const createTestResult = (runId) => {
18
+ const runContext = {
19
+ runId,
20
+ sut: "test-sut",
21
+ sutRole: "primary",
22
+ caseId: "test-case",
23
+ config: { repetitions: 1, seedBase: 42 },
24
+ };
25
+ return {
26
+ run: runContext,
27
+ correctness: {
28
+ expectedExists: false,
29
+ producedOutput: true,
30
+ valid: true,
31
+ matchesExpected: null,
32
+ },
33
+ outputs: {},
34
+ metrics: { numeric: {} },
35
+ provenance: {
36
+ runtime: {
37
+ platform: process.platform,
38
+ arch: process.arch,
39
+ nodeVersion: process.version,
40
+ },
41
+ },
42
+ };
43
+ };
44
+ /**
45
+ * Clean up test checkpoint files.
46
+ * @param path
47
+ */
48
+ const cleanupCheckpointFile = (path) => {
49
+ try {
50
+ if (existsSync(path)) {
51
+ unlinkSync(path);
52
+ }
53
+ }
54
+ catch {
55
+ // Ignore
56
+ }
57
+ };
58
+ /**
59
+ * Clean up test directory.
60
+ */
61
+ const cleanupTestDir = () => {
62
+ try {
63
+ rmSync(TEST_DIR, { recursive: true, force: true });
64
+ }
65
+ catch {
66
+ // Ignore
67
+ }
68
+ };
69
+ describe("CheckpointManager (Integration)", () => {
70
+ beforeEach(() => {
71
+ cleanupTestDir();
72
+ });
73
+ afterEach(() => {
74
+ cleanupTestDir();
75
+ });
76
+ describe("End-to-end checkpoint lifecycle", () => {
77
+ it("should create checkpoint, save results, load, and verify", async () => {
78
+ const checkpointPath = join(TEST_DIR, "checkpoint.json");
79
+ const storage = new FileStorage(checkpointPath);
80
+ const lock = new InMemoryLock();
81
+ const checkpoint = new CheckpointManager({ storage, lock });
82
+ // Initially no checkpoint
83
+ assert.strictEqual(await checkpoint.load(), false);
84
+ assert.strictEqual(checkpoint.exists(), false);
85
+ // Save a result
86
+ const result1 = createTestResult("run1");
87
+ await checkpoint.saveIncremental(result1);
88
+ // Load checkpoint
89
+ const loaded = await checkpoint.load();
90
+ assert.strictEqual(loaded, true);
91
+ assert.strictEqual(checkpoint.exists(), true);
92
+ // Verify data
93
+ assert.strictEqual(checkpoint.isCompleted("run1"), true);
94
+ assert.strictEqual(checkpoint.getResults().length, 1);
95
+ // Save another result
96
+ const result2 = createTestResult("run2");
97
+ await checkpoint.saveIncremental(result2);
98
+ // Reload and verify both results
99
+ await checkpoint.load();
100
+ assert.strictEqual(checkpoint.isCompleted("run1"), true);
101
+ assert.strictEqual(checkpoint.isCompleted("run2"), true);
102
+ assert.strictEqual(checkpoint.getResults().length, 2);
103
+ // Clean up
104
+ cleanupCheckpointFile(checkpointPath);
105
+ });
106
+ it("should resume from checkpoint and save more results", async () => {
107
+ const checkpointPath = join(TEST_DIR, "resume-checkpoint.json");
108
+ const storage = new FileStorage(checkpointPath);
109
+ const lock = new InMemoryLock();
110
+ const checkpoint = new CheckpointManager({ storage, lock });
111
+ // Save initial results
112
+ await checkpoint.saveIncremental(createTestResult("run1"));
113
+ await checkpoint.saveIncremental(createTestResult("run2"));
114
+ // Create new checkpoint manager instance (simulating process restart)
115
+ const storage2 = new FileStorage(checkpointPath);
116
+ const checkpoint2 = new CheckpointManager({ storage: storage2, lock });
117
+ await checkpoint2.load();
118
+ // Verify existing data
119
+ assert.strictEqual(checkpoint2.isCompleted("run1"), true);
120
+ assert.strictEqual(checkpoint2.isCompleted("run2"), true);
121
+ // Add more results
122
+ await checkpoint2.saveIncremental(createTestResult("run3"));
123
+ await checkpoint2.saveIncremental(createTestResult("run4"));
124
+ // Final verification with yet another instance
125
+ const storage3 = new FileStorage(checkpointPath);
126
+ const checkpoint3 = new CheckpointManager({ storage: storage3, lock });
127
+ await checkpoint3.load();
128
+ assert.strictEqual(checkpoint3.getResults().length, 4);
129
+ assert.strictEqual(checkpoint3.isCompleted("run1"), true);
130
+ assert.strictEqual(checkpoint3.isCompleted("run2"), true);
131
+ assert.strictEqual(checkpoint3.isCompleted("run3"), true);
132
+ assert.strictEqual(checkpoint3.isCompleted("run4"), true);
133
+ // Clean up
134
+ cleanupCheckpointFile(checkpointPath);
135
+ });
136
+ });
137
+ describe("Multi-worker simulation", () => {
138
+ it("should handle multiple workers writing to separate files", async () => {
139
+ const workers = 3;
140
+ const checkpoints = [];
141
+ const checkpointPaths = [];
142
+ // Create checkpoint managers for each worker
143
+ for (let index = 0; index < workers; index++) {
144
+ const path = join(TEST_DIR, `checkpoint-worker-${index}.json`);
145
+ checkpointPaths.push(path);
146
+ const storage = new FileStorage(path);
147
+ const lock = new InMemoryLock();
148
+ const checkpoint = new CheckpointManager({
149
+ storage,
150
+ lock,
151
+ workerIndex: index,
152
+ totalWorkers: workers,
153
+ basePath: TEST_DIR,
154
+ });
155
+ checkpoints.push(checkpoint);
156
+ }
157
+ // Each worker saves different results
158
+ await checkpoints[0].saveIncremental(createTestResult("run0"));
159
+ await checkpoints[0].saveIncremental(createTestResult("run1"));
160
+ await checkpoints[1].saveIncremental(createTestResult("run2"));
161
+ await checkpoints[1].saveIncremental(createTestResult("run3"));
162
+ await checkpoints[2].saveIncremental(createTestResult("run4"));
163
+ await checkpoints[2].saveIncremental(createTestResult("run5"));
164
+ // Verify each worker has their own data
165
+ await checkpoints[0].load();
166
+ assert.strictEqual(checkpoints[0].getResults().length, 2);
167
+ assert.strictEqual(checkpoints[0].isCompleted("run0"), true);
168
+ assert.strictEqual(checkpoints[0].isCompleted("run1"), true);
169
+ await checkpoints[1].load();
170
+ assert.strictEqual(checkpoints[1].getResults().length, 2);
171
+ assert.strictEqual(checkpoints[1].isCompleted("run2"), true);
172
+ assert.strictEqual(checkpoints[1].isCompleted("run3"), true);
173
+ await checkpoints[2].load();
174
+ assert.strictEqual(checkpoints[2].getResults().length, 2);
175
+ assert.strictEqual(checkpoints[2].isCompleted("run4"), true);
176
+ assert.strictEqual(checkpoints[2].isCompleted("run5"), true);
177
+ // Clean up
178
+ for (const path of checkpointPaths) {
179
+ cleanupCheckpointFile(path);
180
+ }
181
+ });
182
+ });
183
+ describe("Merge phase", () => {
184
+ it("should merge multiple worker checkpoints into aggregate", async () => {
185
+ const workers = 3;
186
+ const checkpointPaths = [];
187
+ // Create worker checkpoints
188
+ for (let index = 0; index < workers; index++) {
189
+ const path = join(TEST_DIR, `checkpoint-worker-${index}.json`);
190
+ checkpointPaths.push(path);
191
+ const storage = new FileStorage(path);
192
+ const lock = new InMemoryLock();
193
+ const checkpoint = new CheckpointManager({
194
+ storage,
195
+ lock,
196
+ workerIndex: index,
197
+ totalWorkers: workers,
198
+ basePath: TEST_DIR,
199
+ });
200
+ // Initialize with config hash
201
+ checkpoint.initializeEmpty([], [], { repetitions: 1 }, 6);
202
+ // Save some results
203
+ const baseIndex = index * 2;
204
+ await checkpoint.saveIncremental(createTestResult(`run${baseIndex}`));
205
+ await checkpoint.saveIncremental(createTestResult(`run${baseIndex + 1}`));
206
+ }
207
+ // Now merge them
208
+ const mainPath = join(TEST_DIR, "checkpoint.json");
209
+ const mainStorage = new FileStorage(mainPath);
210
+ const mainCheckpoint = new CheckpointManager({
211
+ storage: mainStorage,
212
+ lock: new InMemoryLock(),
213
+ });
214
+ await mainCheckpoint.mergeShards(checkpointPaths);
215
+ // Verify merged data
216
+ assert.strictEqual(mainCheckpoint.exists(), true);
217
+ assert.strictEqual(mainCheckpoint.getResults().length, 6);
218
+ assert.strictEqual(mainCheckpoint.isCompleted("run0"), true);
219
+ assert.strictEqual(mainCheckpoint.isCompleted("run1"), true);
220
+ assert.strictEqual(mainCheckpoint.isCompleted("run2"), true);
221
+ assert.strictEqual(mainCheckpoint.isCompleted("run3"), true);
222
+ assert.strictEqual(mainCheckpoint.isCompleted("run4"), true);
223
+ assert.strictEqual(mainCheckpoint.isCompleted("run5"), true);
224
+ // Clean up
225
+ cleanupCheckpointFile(mainPath);
226
+ for (const path of checkpointPaths) {
227
+ cleanupCheckpointFile(path);
228
+ }
229
+ });
230
+ it("should use FileStorage.findShards to discover worker checkpoints", async () => {
231
+ const workers = 3;
232
+ // Create worker checkpoints
233
+ for (let index = 0; index < workers; index++) {
234
+ const path = join(TEST_DIR, `checkpoint-worker-${index}.json`);
235
+ const storage = new FileStorage(path);
236
+ const lock = new InMemoryLock();
237
+ const checkpoint = new CheckpointManager({
238
+ storage,
239
+ lock,
240
+ workerIndex: index,
241
+ totalWorkers: workers,
242
+ basePath: TEST_DIR,
243
+ });
244
+ await checkpoint.saveIncremental(createTestResult(`run${index}`));
245
+ }
246
+ // Discover shards
247
+ const shards = await FileStorage.findShards(TEST_DIR);
248
+ assert.strictEqual(shards.length, 3);
249
+ // Merge discovered shards
250
+ const mainPath = join(TEST_DIR, "checkpoint.json");
251
+ const mainStorage = new FileStorage(mainPath);
252
+ const mainCheckpoint = new CheckpointManager({
253
+ storage: mainStorage,
254
+ lock: new InMemoryLock(),
255
+ });
256
+ await mainCheckpoint.mergeShards(shards);
257
+ // Verify all results merged
258
+ assert.strictEqual(mainCheckpoint.getResults().length, 3);
259
+ // Clean up
260
+ cleanupCheckpointFile(mainPath);
261
+ for (let index = 0; index < workers; index++) {
262
+ cleanupCheckpointFile(join(TEST_DIR, `checkpoint-worker-${index}.json`));
263
+ }
264
+ });
265
+ });
266
+ describe("Progress tracking", () => {
267
+ it("should calculate progress correctly", async () => {
268
+ const checkpointPath = join(TEST_DIR, "progress-checkpoint.json");
269
+ const storage = new FileStorage(checkpointPath);
270
+ const lock = new InMemoryLock();
271
+ const checkpoint = new CheckpointManager({ storage, lock });
272
+ // Initialize with total planned and save to persist totalPlanned
273
+ checkpoint.initializeEmpty([], [], { repetitions: 1 }, 10);
274
+ await checkpoint.save();
275
+ const progress1 = checkpoint.getProgress();
276
+ assert.strictEqual(progress1.completed, 0);
277
+ assert.strictEqual(progress1.total, 10);
278
+ assert.strictEqual(progress1.percent, 0);
279
+ // Save some results
280
+ await checkpoint.saveIncremental(createTestResult("run1"));
281
+ await checkpoint.saveIncremental(createTestResult("run2"));
282
+ await checkpoint.saveIncremental(createTestResult("run3"));
283
+ // Reload and check progress
284
+ await checkpoint.load();
285
+ const progress2 = checkpoint.getProgress();
286
+ assert.strictEqual(progress2.completed, 3);
287
+ assert.strictEqual(progress2.total, 10);
288
+ assert.strictEqual(progress2.percent, 30);
289
+ // Complete all
290
+ for (let index = 4; index <= 10; index++) {
291
+ await checkpoint.saveIncremental(createTestResult(`run${index}`));
292
+ }
293
+ await checkpoint.load();
294
+ const progress3 = checkpoint.getProgress();
295
+ assert.strictEqual(progress3.completed, 10);
296
+ assert.strictEqual(progress3.total, 10);
297
+ assert.strictEqual(progress3.percent, 100);
298
+ // Clean up
299
+ cleanupCheckpointFile(checkpointPath);
300
+ });
301
+ });
302
+ describe("Filter remaining runs", () => {
303
+ it("should filter out completed runs", async () => {
304
+ const checkpointPath = join(TEST_DIR, "filter-checkpoint.json");
305
+ const storage = new FileStorage(checkpointPath);
306
+ const lock = new InMemoryLock();
307
+ const checkpoint = new CheckpointManager({ storage, lock });
308
+ // Save some results
309
+ await checkpoint.saveIncremental(createTestResult("run1"));
310
+ await checkpoint.saveIncremental(createTestResult("run2"));
311
+ await checkpoint.saveIncremental(createTestResult("run3"));
312
+ // Reload
313
+ await checkpoint.load();
314
+ // Filter remaining
315
+ const allRuns = [
316
+ { runId: "run1", sutId: "sut", caseId: "case", repetition: 0, seed: 1 },
317
+ { runId: "run2", sutId: "sut", caseId: "case", repetition: 0, seed: 2 },
318
+ { runId: "run3", sutId: "sut", caseId: "case", repetition: 0, seed: 3 },
319
+ { runId: "run4", sutId: "sut", caseId: "case", repetition: 0, seed: 4 },
320
+ { runId: "run5", sutId: "sut", caseId: "case", repetition: 0, seed: 5 },
321
+ ];
322
+ const remaining = checkpoint.filterRemaining(allRuns);
323
+ assert.strictEqual(remaining.length, 2);
324
+ assert.deepStrictEqual(remaining.map((r) => r.runId), ["run4", "run5"]);
325
+ // Clean up
326
+ cleanupCheckpointFile(checkpointPath);
327
+ });
328
+ });
329
+ });
330
+ //# sourceMappingURL=checkpoint-manager.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-manager.integration.test.js","sourceRoot":"","sources":["../../../src/executor/__tests__/checkpoint-manager.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for CheckpointManager
3
+ *
4
+ * Tests checkpoint management, staleness detection, and shard merging.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=checkpoint-manager.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-manager.unit.test.d.ts","sourceRoot":"","sources":["../../../src/executor/__tests__/checkpoint-manager.unit.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}