@forgehive/task 0.2.3 → 0.2.4

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 (72) hide show
  1. package/dist/index.d.ts +9 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +38 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/test/add-listener-with-boundaries.test.js +78 -7
  6. package/dist/test/add-listener-with-boundaries.test.js.map +1 -1
  7. package/dist/test/add-listener.test.js +36 -0
  8. package/dist/test/add-listener.test.js.map +1 -1
  9. package/dist/test/boundary-modes.test.js +45 -5
  10. package/dist/test/boundary-modes.test.js.map +1 -1
  11. package/dist/test/execution-record-boundaries.test.js +12 -2
  12. package/dist/test/execution-record-boundaries.test.js.map +1 -1
  13. package/dist/test/integration-enhanced-records.test.d.ts +2 -0
  14. package/dist/test/integration-enhanced-records.test.d.ts.map +1 -0
  15. package/dist/test/integration-enhanced-records.test.js +467 -0
  16. package/dist/test/integration-enhanced-records.test.js.map +1 -0
  17. package/dist/test/metrics-collection.test.d.ts +2 -0
  18. package/dist/test/metrics-collection.test.d.ts.map +1 -0
  19. package/dist/test/metrics-collection.test.js +409 -0
  20. package/dist/test/metrics-collection.test.js.map +1 -0
  21. package/dist/test/performance-edge-cases.test.d.ts +2 -0
  22. package/dist/test/performance-edge-cases.test.d.ts.map +1 -0
  23. package/dist/test/performance-edge-cases.test.js +502 -0
  24. package/dist/test/performance-edge-cases.test.js.map +1 -0
  25. package/dist/test/run-boundary.test.js +27 -3
  26. package/dist/test/run-boundary.test.js.map +1 -1
  27. package/dist/test/safe-replay-complex-boundary.test.js +110 -9
  28. package/dist/test/safe-replay-complex-boundary.test.js.map +1 -1
  29. package/dist/test/safe-replay.test.js +35 -5
  30. package/dist/test/safe-replay.test.js.map +1 -1
  31. package/dist/test/safe-run.test.js +46 -4
  32. package/dist/test/safe-run.test.js.map +1 -1
  33. package/dist/test/setmetrics-boundary.test.d.ts +2 -0
  34. package/dist/test/setmetrics-boundary.test.d.ts.map +1 -0
  35. package/dist/test/setmetrics-boundary.test.js +195 -0
  36. package/dist/test/setmetrics-boundary.test.js.map +1 -0
  37. package/dist/test/task-with-boundaries.test.js +63 -2
  38. package/dist/test/task-with-boundaries.test.js.map +1 -1
  39. package/dist/test/timing-capture.test.d.ts +2 -0
  40. package/dist/test/timing-capture.test.d.ts.map +1 -0
  41. package/dist/test/timing-capture.test.js +304 -0
  42. package/dist/test/timing-capture.test.js.map +1 -0
  43. package/dist/test/timing-utilities.test.d.ts +2 -0
  44. package/dist/test/timing-utilities.test.d.ts.map +1 -0
  45. package/dist/test/timing-utilities.test.js +127 -0
  46. package/dist/test/timing-utilities.test.js.map +1 -0
  47. package/dist/types.d.ts +93 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +78 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/utils/boundary.d.ts +3 -0
  52. package/dist/utils/boundary.d.ts.map +1 -1
  53. package/dist/utils/boundary.js +11 -2
  54. package/dist/utils/boundary.js.map +1 -1
  55. package/package.json +3 -2
  56. package/src/index.ts +63 -8
  57. package/src/test/add-listener-with-boundaries.test.ts +78 -7
  58. package/src/test/add-listener.test.ts +36 -0
  59. package/src/test/boundary-modes.test.ts +45 -5
  60. package/src/test/execution-record-boundaries.test.ts +12 -2
  61. package/src/test/metrics-collection.test.ts +476 -0
  62. package/src/test/performance-edge-cases.test.ts +596 -0
  63. package/src/test/run-boundary.test.ts +27 -3
  64. package/src/test/safe-replay-complex-boundary.test.ts +115 -10
  65. package/src/test/safe-replay.test.ts +35 -5
  66. package/src/test/safe-run.test.ts +46 -4
  67. package/src/test/setmetrics-boundary.test.ts +223 -0
  68. package/src/test/task-with-boundaries.test.ts +71 -5
  69. package/src/test/timing-capture.test.ts +348 -0
  70. package/src/test/timing-utilities.test.ts +145 -0
  71. package/src/types.ts +139 -0
  72. package/src/utils/boundary.ts +15 -2
@@ -0,0 +1,502 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable no-console */
4
+ const index_1 = require("../index");
5
+ const schema_1 = require("@forgehive/schema");
6
+ describe('Performance and Edge Case Tests', () => {
7
+ describe('Performance impact of timing and metrics collection', () => {
8
+ it('should have minimal performance overhead for timing collection', async () => {
9
+ var _a, _b;
10
+ const baselineTask = (0, index_1.createTask)({
11
+ name: 'baseline-performance',
12
+ schema: new schema_1.Schema({ iterations: schema_1.Schema.number() }),
13
+ boundaries: {
14
+ simpleOperation: async (value) => {
15
+ return value * 2;
16
+ }
17
+ },
18
+ fn: async ({ iterations }, { simpleOperation }) => {
19
+ const results = [];
20
+ for (let i = 0; i < iterations; i++) {
21
+ results.push(await simpleOperation(i));
22
+ }
23
+ return { results };
24
+ }
25
+ });
26
+ const timingTask = (0, index_1.createTask)({
27
+ name: 'timing-performance',
28
+ schema: new schema_1.Schema({ iterations: schema_1.Schema.number() }),
29
+ boundaries: {
30
+ simpleOperation: async (value) => {
31
+ return value * 2;
32
+ }
33
+ },
34
+ fn: async ({ iterations }, { simpleOperation, setMetrics }) => {
35
+ const results = [];
36
+ for (let i = 0; i < iterations; i++) {
37
+ results.push(await simpleOperation(i));
38
+ // Add timing metrics for each operation
39
+ await setMetrics({ type: 'performance', name: 'operation_completed', value: i });
40
+ }
41
+ return { results };
42
+ }
43
+ });
44
+ const iterations = 100;
45
+ // Measure baseline performance (without extensive metrics)
46
+ const baselineStart = Date.now();
47
+ const [baselineResult, baselineError, baselineRecord] = await baselineTask.safeRun({ iterations });
48
+ const baselineTime = Date.now() - baselineStart;
49
+ expect(baselineError).toBeNull();
50
+ expect(baselineResult === null || baselineResult === void 0 ? void 0 : baselineResult.results).toHaveLength(iterations);
51
+ // Measure performance with timing and metrics
52
+ const timingStart = Date.now();
53
+ const [timingResult, timingError, timingRecord] = await timingTask.safeRun({ iterations });
54
+ const timingTime = Date.now() - timingStart;
55
+ expect(timingError).toBeNull();
56
+ expect(timingResult === null || timingResult === void 0 ? void 0 : timingResult.results).toHaveLength(iterations);
57
+ expect(timingRecord.metrics).toHaveLength(iterations);
58
+ // Performance overhead should be reasonable (less than 50% increase)
59
+ const overhead = (timingTime - baselineTime) / baselineTime;
60
+ expect(overhead).toBeLessThan(0.5); // Less than 50% overhead
61
+ // Verify timing accuracy - duration should be 0 or greater for fast operations
62
+ expect((_a = baselineRecord.timing) === null || _a === void 0 ? void 0 : _a.duration).toBeGreaterThanOrEqual(0);
63
+ expect((_b = timingRecord.timing) === null || _b === void 0 ? void 0 : _b.duration).toBeGreaterThanOrEqual(0);
64
+ console.log('Performance Test Results:');
65
+ console.log(`Baseline: ${baselineTime}ms, With timing: ${timingTime}ms`);
66
+ console.log(`Overhead: ${(overhead * 100).toFixed(1)}%`);
67
+ });
68
+ it('should handle high-frequency timing operations efficiently', () => {
69
+ const timings = [];
70
+ const iterations = 1000;
71
+ const start = Date.now();
72
+ for (let i = 0; i < iterations; i++) {
73
+ const tracker = index_1.TimingTracker.create();
74
+ tracker.start();
75
+ // Simulate very brief operation
76
+ for (let j = 0; j < 10; j++) {
77
+ Math.random();
78
+ }
79
+ const timing = tracker.end();
80
+ if (timing) {
81
+ timings.push(timing);
82
+ }
83
+ }
84
+ const totalTime = Date.now() - start;
85
+ // Verify all timings were captured
86
+ expect(timings).toHaveLength(iterations);
87
+ timings.forEach(timing => {
88
+ expect(timing).not.toBeNull();
89
+ expect(timing.duration).toBeGreaterThanOrEqual(0);
90
+ });
91
+ // High-frequency timing should complete reasonably quickly
92
+ expect(totalTime).toBeLessThan(1000); // Less than 1 second for 1000 operations
93
+ console.log(`High-frequency timing: ${iterations} operations in ${totalTime}ms`);
94
+ });
95
+ it('should handle large metrics collections without memory issues', async () => {
96
+ var _a;
97
+ const largeMetricsTask = (0, index_1.createTask)({
98
+ name: 'large-metrics-test',
99
+ schema: new schema_1.Schema({ metricCount: schema_1.Schema.number() }),
100
+ boundaries: {},
101
+ fn: async ({ metricCount }, { setMetrics }) => {
102
+ for (let i = 0; i < metricCount; i++) {
103
+ await setMetrics({
104
+ type: i % 3 === 0 ? 'business' : i % 3 === 1 ? 'performance' : 'error',
105
+ name: `metric_${i}`,
106
+ value: Math.random() * 1000
107
+ });
108
+ }
109
+ return { metricsCreated: metricCount };
110
+ }
111
+ });
112
+ const metricCount = 1000;
113
+ const memoryBefore = process.memoryUsage();
114
+ const [result, error, record] = await largeMetricsTask.safeRun({ metricCount });
115
+ const memoryAfter = process.memoryUsage();
116
+ expect(error).toBeNull();
117
+ expect(result === null || result === void 0 ? void 0 : result.metricsCreated).toBe(metricCount);
118
+ expect(record.metrics).toHaveLength(metricCount);
119
+ // Verify metrics are correctly structured
120
+ (_a = record.metrics) === null || _a === void 0 ? void 0 : _a.forEach((metric, index) => {
121
+ expect(metric).toEqual(expect.objectContaining({
122
+ type: expect.stringMatching(/^(business|performance|error)$/),
123
+ name: `metric_${index}`,
124
+ value: expect.any(Number)
125
+ }));
126
+ });
127
+ // Memory usage should not explode
128
+ const memoryIncrease = memoryAfter.heapUsed - memoryBefore.heapUsed;
129
+ expect(memoryIncrease).toBeLessThan(50 * 1024 * 1024); // Less than 50MB increase
130
+ console.log(`Large metrics test: ${metricCount} metrics, memory increase: ${(memoryIncrease / 1024 / 1024).toFixed(1)}MB`);
131
+ });
132
+ });
133
+ describe('Edge cases and error handling', () => {
134
+ it('should handle missing timing data gracefully', async () => {
135
+ // Manually create a broken timing scenario
136
+ const tracker = index_1.TimingTracker.create();
137
+ // Don't call start()
138
+ const timing = tracker.end();
139
+ expect(timing).toBeNull();
140
+ // Test with multiple end calls
141
+ tracker.start();
142
+ const timing1 = tracker.end();
143
+ const timing2 = tracker.end(); // Second end call
144
+ expect(timing1).not.toBeNull();
145
+ expect(timing2).toBeNull(); // Should return null on second call
146
+ });
147
+ it('should handle invalid metrics gracefully', () => {
148
+ // Test boundary conditions for metric validation
149
+ expect((0, index_1.validateMetric)({ type: 'business', name: 'test', value: 0 })).toBe(true);
150
+ expect((0, index_1.validateMetric)({ type: 'business', name: 'test', value: -1 })).toBe(true);
151
+ expect((0, index_1.validateMetric)({ type: 'business', name: 'test', value: 999999 })).toBe(true);
152
+ // Test invalid cases
153
+ expect((0, index_1.validateMetric)({ type: 'business', name: 'test', value: null })).toBe(false);
154
+ expect((0, index_1.validateMetric)({ type: 'business', name: 'test', value: undefined })).toBe(false);
155
+ expect((0, index_1.validateMetric)({ type: 'business', name: 'test', value: 'string' })).toBe(false);
156
+ expect((0, index_1.validateMetric)({ type: 'business', name: 'test', value: {} })).toBe(false);
157
+ expect((0, index_1.validateMetric)({ type: 'business', name: 'test', value: [] })).toBe(false);
158
+ // Test edge cases with createMetric
159
+ expect(() => (0, index_1.createMetric)('business', 'test', 0)).not.toThrow();
160
+ expect(() => (0, index_1.createMetric)('business', 'test', -999)).not.toThrow();
161
+ expect(() => (0, index_1.createMetric)('business', 'test', 0.0001)).not.toThrow();
162
+ expect(() => (0, index_1.createMetric)('', 'test', 1)).toThrow();
163
+ expect(() => (0, index_1.createMetric)('business', '', 1)).toThrow();
164
+ expect(() => (0, index_1.createMetric)('business', 'test', NaN)).toThrow();
165
+ expect(() => (0, index_1.createMetric)('business', 'test', Infinity)).toThrow();
166
+ expect(() => (0, index_1.createMetric)('business', 'test', -Infinity)).toThrow();
167
+ });
168
+ it('should handle memory cleanup and long-running tasks', async () => {
169
+ var _a;
170
+ const longRunningTask = (0, index_1.createTask)({
171
+ name: 'memory-cleanup-test',
172
+ schema: new schema_1.Schema({ duration: schema_1.Schema.number() }),
173
+ boundaries: {
174
+ memoryIntensiveOperation: async (iterations) => {
175
+ const data = [];
176
+ for (let i = 0; i < iterations; i++) {
177
+ data.push(new Array(1000).fill(Math.random()));
178
+ }
179
+ return { processed: data.length, size: data.length * 1000 };
180
+ }
181
+ },
182
+ fn: async ({ duration }, { memoryIntensiveOperation, setMetrics }) => {
183
+ const startTime = Date.now();
184
+ const results = [];
185
+ while (Date.now() - startTime < duration) {
186
+ const result = await memoryIntensiveOperation(100);
187
+ results.push(result);
188
+ await setMetrics({ type: 'performance', name: 'memory_operations', value: 1 });
189
+ await setMetrics({ type: 'business', name: 'data_processed', value: result.processed });
190
+ // Force garbage collection opportunity
191
+ if (results.length % 10 === 0) {
192
+ if (global.gc) {
193
+ global.gc();
194
+ }
195
+ }
196
+ }
197
+ return { operations: results.length, totalProcessed: results.reduce((sum, r) => sum + r.processed, 0) };
198
+ }
199
+ });
200
+ const memoryBefore = process.memoryUsage();
201
+ const [result, error, record] = await longRunningTask.safeRun({ duration: 500 }); // 500ms
202
+ // Allow some time for garbage collection
203
+ await new Promise(resolve => setTimeout(resolve, 100));
204
+ if (global.gc) {
205
+ global.gc();
206
+ }
207
+ const memoryAfter = process.memoryUsage();
208
+ expect(error).toBeNull();
209
+ expect(result === null || result === void 0 ? void 0 : result.operations).toBeGreaterThan(0);
210
+ expect((_a = record.metrics) === null || _a === void 0 ? void 0 : _a.length).toBeGreaterThan(0);
211
+ // Memory should not grow excessively
212
+ const memoryIncrease = memoryAfter.heapUsed - memoryBefore.heapUsed;
213
+ expect(memoryIncrease).toBeLessThan(100 * 1024 * 1024); // Less than 100MB
214
+ console.log(`Memory cleanup test: ${result === null || result === void 0 ? void 0 : result.operations} operations, memory increase: ${(memoryIncrease / 1024 / 1024).toFixed(1)}MB`);
215
+ });
216
+ it('should handle concurrent task executions without interference', async () => {
217
+ const concurrentTask = (0, index_1.createTask)({
218
+ name: 'concurrent-test',
219
+ schema: new schema_1.Schema({ taskId: schema_1.Schema.string(), delay: schema_1.Schema.number() }),
220
+ boundaries: {
221
+ processWithDelay: async (taskId, delay) => {
222
+ await new Promise(resolve => setTimeout(resolve, delay));
223
+ return { taskId, processedAt: Date.now() };
224
+ }
225
+ },
226
+ fn: async ({ taskId, delay }, { processWithDelay, setMetrics, setMetadata }) => {
227
+ await setMetadata('taskId', taskId);
228
+ await setMetadata('concurrencyTest', 'true');
229
+ await setMetrics({ type: 'business', name: 'concurrent_tasks', value: 1 });
230
+ const result = await processWithDelay(taskId, delay);
231
+ await setMetrics({ type: 'performance', name: 'task_delay', value: delay });
232
+ await setMetrics({ type: 'business', name: 'tasks_completed', value: 1 });
233
+ return { taskId, result, delay };
234
+ }
235
+ });
236
+ // Launch multiple concurrent tasks
237
+ const tasks = [
238
+ concurrentTask.safeRun({ taskId: 'task-1', delay: 100 }),
239
+ concurrentTask.safeRun({ taskId: 'task-2', delay: 150 }),
240
+ concurrentTask.safeRun({ taskId: 'task-3', delay: 80 }),
241
+ concurrentTask.safeRun({ taskId: 'task-4', delay: 200 }),
242
+ concurrentTask.safeRun({ taskId: 'task-5', delay: 120 })
243
+ ];
244
+ const results = await Promise.all(tasks);
245
+ // Verify all tasks completed successfully
246
+ results.forEach(([result, error, record], index) => {
247
+ expect(error).toBeNull();
248
+ expect(result === null || result === void 0 ? void 0 : result.taskId).toBe(`task-${index + 1}`);
249
+ expect(record.metrics).toHaveLength(3);
250
+ expect(record.timing).toBeDefined();
251
+ expect(record.boundaries.processWithDelay).toHaveLength(1);
252
+ });
253
+ // Verify timing isolation between concurrent tasks
254
+ const timings = results.map(([, , record]) => record.timing);
255
+ timings.forEach((timing, index) => {
256
+ expect(timing.duration).toBeGreaterThanOrEqual([100, 150, 80, 200, 120][index] - 20);
257
+ expect(timing.duration).toBeLessThan([100, 150, 80, 200, 120][index] + 50);
258
+ });
259
+ console.log(`Concurrent tasks completed: ${results.length}`);
260
+ });
261
+ it('should handle extreme boundary call counts', async () => {
262
+ const extremeBoundaryTask = (0, index_1.createTask)({
263
+ name: 'extreme-boundary-test',
264
+ schema: new schema_1.Schema({ callCount: schema_1.Schema.number() }),
265
+ boundaries: {
266
+ lightweightOperation: async (index) => {
267
+ return { index, doubled: index * 2 };
268
+ }
269
+ },
270
+ fn: async ({ callCount }, { lightweightOperation, setMetrics }) => {
271
+ await setMetrics({ type: 'business', name: 'boundary_test_runs', value: 1 });
272
+ const results = [];
273
+ for (let i = 0; i < callCount; i++) {
274
+ const result = await lightweightOperation(i);
275
+ results.push(result);
276
+ // Add metrics every 100 calls to avoid excessive metrics
277
+ if (i % 100 === 0) {
278
+ await setMetrics({ type: 'performance', name: 'batch_progress', value: i });
279
+ }
280
+ }
281
+ await setMetrics({ type: 'business', name: 'total_boundary_calls', value: callCount });
282
+ return { results: results.length, lastResult: results[results.length - 1] };
283
+ }
284
+ });
285
+ const callCount = 1000;
286
+ const start = Date.now();
287
+ const [result, error, record] = await extremeBoundaryTask.safeRun({ callCount });
288
+ const executionTime = Date.now() - start;
289
+ expect(error).toBeNull();
290
+ expect(result === null || result === void 0 ? void 0 : result.results).toBe(callCount);
291
+ expect(record.boundaries.lightweightOperation).toHaveLength(callCount);
292
+ // Verify all boundary calls have timing
293
+ record.boundaries.lightweightOperation.forEach((call, index) => {
294
+ expect(call.timing).toBeDefined();
295
+ expect(call.input).toEqual([index]);
296
+ expect(call.output).toEqual({ index, doubled: index * 2 });
297
+ });
298
+ // Performance should be reasonable for high volume
299
+ expect(executionTime).toBeLessThan(5000); // Less than 5 seconds for 1000 calls
300
+ console.log(`Extreme boundary test: ${callCount} calls in ${executionTime}ms`);
301
+ });
302
+ it('should handle schema validation edge cases with timing', async () => {
303
+ const validationTask = (0, index_1.createTask)({
304
+ name: 'validation-edge-case-test',
305
+ schema: new schema_1.Schema({
306
+ requiredString: schema_1.Schema.string(),
307
+ optionalNumber: schema_1.Schema.number().optional(),
308
+ nestedValue: schema_1.Schema.number()
309
+ }),
310
+ boundaries: {},
311
+ fn: async ({ requiredString, optionalNumber, nestedValue }) => {
312
+ return {
313
+ processed: true,
314
+ stringLength: requiredString.length,
315
+ hasOptional: optionalNumber !== undefined,
316
+ nestedValue: nestedValue
317
+ };
318
+ }
319
+ });
320
+ // Test with valid input
321
+ const [validResult, validError, validRecord] = await validationTask.safeRun({
322
+ requiredString: 'test',
323
+ optionalNumber: 42,
324
+ nestedValue: 100
325
+ });
326
+ expect(validError).toBeNull();
327
+ expect(validResult === null || validResult === void 0 ? void 0 : validResult.processed).toBe(true);
328
+ expect(validRecord.timing).toBeDefined();
329
+ expect(validRecord.type).toBe('success');
330
+ // Test with invalid input (should fail validation before timing main function)
331
+ const [invalidResult, invalidError, invalidRecord] = await validationTask.safeRun({
332
+ requiredString: 123, // Wrong type
333
+ nestedValue: 'not-a-number' // Wrong type
334
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
335
+ });
336
+ expect(invalidResult).toBeNull();
337
+ expect(invalidError).not.toBeNull();
338
+ expect(invalidRecord.type).toBe('error');
339
+ expect(invalidRecord.timing).toBeUndefined(); // No main function timing on validation error
340
+ // Test with missing required field
341
+ const [missingResult, missingError, missingRecord] = await validationTask.safeRun({
342
+ nestedValue: 100
343
+ // Missing requiredString
344
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
345
+ });
346
+ expect(missingResult).toBeNull();
347
+ expect(missingError).not.toBeNull();
348
+ expect(missingRecord.type).toBe('error');
349
+ expect(missingRecord.timing).toBeUndefined();
350
+ console.log(`Schema validation edge cases: valid=${validRecord.type}, invalid=${invalidRecord.type}, missing=${missingRecord.type}`);
351
+ });
352
+ it('should handle very large execution records efficiently', async () => {
353
+ const largeRecordTask = (0, index_1.createTask)({
354
+ name: 'large-record-test',
355
+ schema: new schema_1.Schema({
356
+ dataSize: schema_1.Schema.number(),
357
+ metricCount: schema_1.Schema.number()
358
+ }),
359
+ boundaries: {
360
+ generateLargeData: async (size) => {
361
+ const data = [];
362
+ for (let i = 0; i < size; i++) {
363
+ data.push({
364
+ id: `item_${i}`,
365
+ data: new Array(100).fill(Math.random()),
366
+ metadata: { index: i, category: `cat_${i % 10}` }
367
+ });
368
+ }
369
+ return { items: data, totalSize: size };
370
+ },
371
+ processLargeDataset: async (dataset) => {
372
+ // Simulate heavy processing
373
+ const processed = dataset.items.map((item) => ({
374
+ id: item.id,
375
+ processed: true,
376
+ checksum: item.data.reduce((sum, val) => sum + val, 0)
377
+ }));
378
+ return { processed, count: processed.length };
379
+ }
380
+ },
381
+ fn: async ({ dataSize, metricCount }, { generateLargeData, processLargeDataset, setMetrics, setMetadata }) => {
382
+ await setMetadata('dataSize', dataSize.toString());
383
+ await setMetadata('expectedMetrics', metricCount.toString());
384
+ // Generate large dataset
385
+ const dataset = await generateLargeData(dataSize);
386
+ await setMetrics({ type: 'business', name: 'data_generated', value: dataset.totalSize });
387
+ // Generate many metrics
388
+ for (let i = 0; i < metricCount; i++) {
389
+ await setMetrics({
390
+ type: i % 3 === 0 ? 'business' : i % 3 === 1 ? 'performance' : 'error',
391
+ name: `large_record_metric_${i}`,
392
+ value: Math.random() * 1000
393
+ });
394
+ }
395
+ // Process the large dataset
396
+ const result = await processLargeDataset(dataset);
397
+ await setMetrics({ type: 'business', name: 'items_processed', value: result.count });
398
+ return {
399
+ dataSize: dataset.totalSize,
400
+ processedCount: result.count,
401
+ metricsGenerated: metricCount,
402
+ status: 'completed'
403
+ };
404
+ }
405
+ });
406
+ const memoryBefore = process.memoryUsage();
407
+ const start = Date.now();
408
+ const [result, error, record] = await largeRecordTask.safeRun({
409
+ dataSize: 100, // 100 items with 100 random numbers each
410
+ metricCount: 200 // 200 metrics
411
+ });
412
+ const executionTime = Date.now() - start;
413
+ const memoryAfter = process.memoryUsage();
414
+ expect(error).toBeNull();
415
+ expect(result === null || result === void 0 ? void 0 : result.status).toBe('completed');
416
+ expect(result === null || result === void 0 ? void 0 : result.dataSize).toBe(100);
417
+ expect(result === null || result === void 0 ? void 0 : result.metricsGenerated).toBe(200);
418
+ // Verify record structure
419
+ expect(record.metrics).toHaveLength(202); // 200 + 2 additional metrics
420
+ expect(record.boundaries.generateLargeData).toHaveLength(1);
421
+ expect(record.boundaries.processLargeDataset).toHaveLength(1);
422
+ // Verify large data in boundaries is preserved
423
+ const generatedData = record.boundaries.generateLargeData[0].output;
424
+ if (generatedData) {
425
+ expect(generatedData.items).toHaveLength(100);
426
+ expect(generatedData.items[0].data).toHaveLength(100);
427
+ }
428
+ // Performance should be reasonable even with large records
429
+ expect(executionTime).toBeLessThan(2000); // Less than 2 seconds
430
+ const memoryIncrease = memoryAfter.heapUsed - memoryBefore.heapUsed;
431
+ expect(memoryIncrease).toBeLessThan(100 * 1024 * 1024); // Less than 100MB
432
+ console.log(`Large record test: ${result === null || result === void 0 ? void 0 : result.dataSize} items, ${result === null || result === void 0 ? void 0 : result.metricsGenerated} metrics, ${executionTime}ms, ${(memoryIncrease / 1024 / 1024).toFixed(1)}MB`);
433
+ });
434
+ });
435
+ describe('Timing accuracy and precision tests', () => {
436
+ it('should maintain timing accuracy across different execution patterns', async () => {
437
+ const precisionTask = (0, index_1.createTask)({
438
+ name: 'timing-precision-test',
439
+ schema: new schema_1.Schema({ pattern: schema_1.Schema.string() }),
440
+ boundaries: {
441
+ fixedDelay: async (ms) => {
442
+ await new Promise(resolve => setTimeout(resolve, ms));
443
+ return { delayed: ms };
444
+ },
445
+ variableDelay: async (baseMs) => {
446
+ const actualDelay = baseMs + Math.random() * 20 - 10; // ±10ms variation
447
+ await new Promise(resolve => setTimeout(resolve, actualDelay));
448
+ return { delayed: actualDelay };
449
+ }
450
+ },
451
+ fn: async ({ pattern }, { fixedDelay, variableDelay, setMetrics }) => {
452
+ const timings = [];
453
+ if (pattern === 'fixed') {
454
+ // Test fixed delays
455
+ const delays = [50, 100, 150];
456
+ for (const delay of delays) {
457
+ const start = Date.now();
458
+ await fixedDelay(delay);
459
+ const measured = Date.now() - start;
460
+ timings.push({ expected: delay, measured });
461
+ await setMetrics({ type: 'performance', name: 'timing_accuracy', value: Math.abs(measured - delay) });
462
+ }
463
+ }
464
+ else if (pattern === 'variable') {
465
+ // Test variable delays
466
+ for (let i = 0; i < 5; i++) {
467
+ const baseDelay = 80;
468
+ const start = Date.now();
469
+ const result = await variableDelay(baseDelay);
470
+ const measured = Date.now() - start;
471
+ timings.push({ expected: result.delayed, measured });
472
+ }
473
+ }
474
+ return { pattern, timings };
475
+ }
476
+ });
477
+ // Test fixed timing precision
478
+ const [fixedResult, fixedError, fixedRecord] = await precisionTask.safeRun({ pattern: 'fixed' });
479
+ expect(fixedError).toBeNull();
480
+ expect(fixedResult === null || fixedResult === void 0 ? void 0 : fixedResult.timings).toHaveLength(3);
481
+ // Verify boundary timing accuracy
482
+ fixedRecord.boundaries.fixedDelay.forEach((call, index) => {
483
+ const expectedDelay = [50, 100, 150][index];
484
+ const actualDuration = call.timing.duration;
485
+ const accuracy = Math.abs(actualDuration - expectedDelay);
486
+ // Timing should be within 30ms of expected (allowing for system variance)
487
+ expect(accuracy).toBeLessThan(30);
488
+ });
489
+ // Test variable timing
490
+ const [variableResult, variableError, variableRecord] = await precisionTask.safeRun({ pattern: 'variable' });
491
+ expect(variableError).toBeNull();
492
+ expect(variableResult === null || variableResult === void 0 ? void 0 : variableResult.timings).toHaveLength(5);
493
+ // Verify variable timing boundaries
494
+ variableRecord.boundaries.variableDelay.forEach((call) => {
495
+ expect(call.timing.duration).toBeGreaterThan(60); // Should be at least 70ms (80-10)
496
+ expect(call.timing.duration).toBeLessThan(120); // Should be at most 110ms (80+10+20 for variance)
497
+ });
498
+ console.log(`Timing precision test completed: fixed=${fixedRecord.boundaries.fixedDelay.length} calls, variable=${variableRecord.boundaries.variableDelay.length} calls`);
499
+ });
500
+ });
501
+ });
502
+ //# sourceMappingURL=performance-edge-cases.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-edge-cases.test.js","sourceRoot":"","sources":["../../src/test/performance-edge-cases.test.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,15 @@ describe('Run boundary tests', function () {
10
10
  await identity({ value: 5 });
11
11
  const runTape = identity.getRunData();
12
12
  expect(runTape.length).toBe(1);
13
- expect(runTape[0]).toEqual({ input: [{ value: 5 }], output: { value: 5 } });
13
+ expect(runTape[0]).toEqual({
14
+ input: [{ value: 5 }],
15
+ output: { value: 5 },
16
+ timing: expect.objectContaining({
17
+ startTime: expect.any(Number),
18
+ endTime: expect.any(Number),
19
+ duration: expect.any(Number)
20
+ })
21
+ });
14
22
  });
15
23
  it('Should only add a record if run is active', async function () {
16
24
  const identity = (0, boundary_1.createBoundary)(async function (argv) {
@@ -30,7 +38,15 @@ describe('Run boundary tests', function () {
30
38
  await identity({ value: 5 });
31
39
  const runTape = identity.getRunData();
32
40
  expect(runTape.length).toBe(1);
33
- expect(runTape[0]).toEqual({ input: [{ value: 5 }], output: { value: 5 } });
41
+ expect(runTape[0]).toEqual({
42
+ input: [{ value: 5 }],
43
+ output: { value: 5 },
44
+ timing: expect.objectContaining({
45
+ startTime: expect.any(Number),
46
+ endTime: expect.any(Number),
47
+ duration: expect.any(Number)
48
+ })
49
+ });
34
50
  });
35
51
  it('Should have run elements from this run', async function () {
36
52
  const identity = (0, boundary_1.createBoundary)(async function (argv) {
@@ -43,7 +59,15 @@ describe('Run boundary tests', function () {
43
59
  await identity({ value: 5 });
44
60
  const runTape = identity.getRunData();
45
61
  expect(runTape.length).toBe(1);
46
- expect(runTape[0]).toEqual({ input: [{ value: 5 }], output: { value: 5 } });
62
+ expect(runTape[0]).toEqual({
63
+ input: [{ value: 5 }],
64
+ output: { value: 5 },
65
+ timing: expect.objectContaining({
66
+ startTime: expect.any(Number),
67
+ endTime: expect.any(Number),
68
+ duration: expect.any(Number)
69
+ })
70
+ });
47
71
  });
48
72
  });
49
73
  //# sourceMappingURL=run-boundary.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-boundary.test.js","sourceRoot":"","sources":["../../src/test/run-boundary.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-boundary.test.js","sourceRoot":"","sources":["../../src/test/run-boundary.test.ts"],"names":[],"mappings":"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"}