warpo 2.5.0-alpha-2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/asconfig.schema.json +13 -0
  2. package/dist/heap_analyzer/src/classResolver.d.ts +34 -0
  3. package/dist/heap_analyzer/src/classResolver.js +206 -0
  4. package/dist/heap_analyzer/src/classResolver.js.map +1 -0
  5. package/dist/heap_analyzer/src/constants.d.ts +21 -0
  6. package/dist/heap_analyzer/src/constants.js +30 -0
  7. package/dist/heap_analyzer/src/constants.js.map +1 -0
  8. package/dist/heap_analyzer/src/dominator.d.ts +17 -0
  9. package/dist/heap_analyzer/src/dominator.js +149 -0
  10. package/dist/heap_analyzer/src/dominator.js.map +1 -0
  11. package/dist/heap_analyzer/src/dumpReader.d.ts +2 -0
  12. package/dist/heap_analyzer/src/dumpReader.js +25 -0
  13. package/dist/heap_analyzer/src/dumpReader.js.map +1 -0
  14. package/dist/heap_analyzer/src/dwarfParser.d.ts +117 -0
  15. package/dist/heap_analyzer/src/dwarfParser.js +366 -0
  16. package/dist/heap_analyzer/src/dwarfParser.js.map +1 -0
  17. package/dist/heap_analyzer/src/referenceScanner.d.ts +11 -0
  18. package/dist/heap_analyzer/src/referenceScanner.js +143 -0
  19. package/dist/heap_analyzer/src/referenceScanner.js.map +1 -0
  20. package/dist/heap_analyzer/src/retainedSize.d.ts +9 -0
  21. package/dist/heap_analyzer/src/retainedSize.js +78 -0
  22. package/dist/heap_analyzer/src/retainedSize.js.map +1 -0
  23. package/dist/heap_analyzer/src/roots.d.ts +13 -0
  24. package/dist/heap_analyzer/src/roots.js +45 -0
  25. package/dist/heap_analyzer/src/roots.js.map +1 -0
  26. package/dist/heap_analyzer/src/snapshot.d.ts +2 -0
  27. package/dist/heap_analyzer/src/snapshot.js +170 -0
  28. package/dist/heap_analyzer/src/snapshot.js.map +1 -0
  29. package/dist/heap_analyzer/src/tlsf.d.ts +18 -0
  30. package/dist/heap_analyzer/src/tlsf.js +48 -0
  31. package/dist/heap_analyzer/src/tlsf.js.map +1 -0
  32. package/dist/heap_analyzer/src/types.d.ts +70 -0
  33. package/dist/heap_analyzer/src/types.js +4 -0
  34. package/dist/heap_analyzer/src/types.js.map +1 -0
  35. package/dist/heap_analyzer/tests/classResolver.test.d.ts +1 -0
  36. package/dist/heap_analyzer/tests/classResolver.test.js +110 -0
  37. package/dist/heap_analyzer/tests/classResolver.test.js.map +1 -0
  38. package/dist/heap_analyzer/tests/dominator.test.d.ts +1 -0
  39. package/dist/heap_analyzer/tests/dominator.test.js +438 -0
  40. package/dist/heap_analyzer/tests/dominator.test.js.map +1 -0
  41. package/dist/heap_analyzer/tests/dumpReader.test.d.ts +1 -0
  42. package/dist/heap_analyzer/tests/dumpReader.test.js +51 -0
  43. package/dist/heap_analyzer/tests/dumpReader.test.js.map +1 -0
  44. package/dist/heap_analyzer/tests/dwarfParser.test.d.ts +1 -0
  45. package/dist/heap_analyzer/tests/dwarfParser.test.js +280 -0
  46. package/dist/heap_analyzer/tests/dwarfParser.test.js.map +1 -0
  47. package/dist/heap_analyzer/tests/fixture/dwarfFixture.d.ts +2 -0
  48. package/dist/heap_analyzer/tests/fixture/dwarfFixture.js +266 -0
  49. package/dist/heap_analyzer/tests/fixture/dwarfFixture.js.map +1 -0
  50. package/dist/heap_analyzer/tests/retainedSize.test.d.ts +1 -0
  51. package/dist/heap_analyzer/tests/retainedSize.test.js +57 -0
  52. package/dist/heap_analyzer/tests/retainedSize.test.js.map +1 -0
  53. package/dist/heap_analyzer/tests/roots.test.d.ts +1 -0
  54. package/dist/heap_analyzer/tests/roots.test.js +71 -0
  55. package/dist/heap_analyzer/tests/roots.test.js.map +1 -0
  56. package/dist/heap_analyzer/tests/snapshot.test.d.ts +1 -0
  57. package/dist/heap_analyzer/tests/snapshot.test.js +102 -0
  58. package/dist/heap_analyzer/tests/snapshot.test.js.map +1 -0
  59. package/dist/heap_analyzer/tests/testHelper.d.ts +18 -0
  60. package/dist/heap_analyzer/tests/testHelper.js +68 -0
  61. package/dist/heap_analyzer/tests/testHelper.js.map +1 -0
  62. package/dist/heap_analyzer/tests/tlsf.test.d.ts +1 -0
  63. package/dist/heap_analyzer/tests/tlsf.test.js +98 -0
  64. package/dist/heap_analyzer/tests/tlsf.test.js.map +1 -0
  65. package/dist/heap_analyzer/tests/wasmExecutor.d.ts +9 -0
  66. package/dist/heap_analyzer/tests/wasmExecutor.js +49 -0
  67. package/dist/heap_analyzer/tests/wasmExecutor.js.map +1 -0
  68. package/package.json +10 -5
  69. package/types/std/index.d.ts +0 -4
  70. package/types/warpo/index.d.ts +8 -0
@@ -0,0 +1,438 @@
1
+ // Copyright (C) 2024 wasm-ecosystem
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import assert from "node:assert/strict";
4
+ import { describe, it } from "node:test";
5
+ import { buildDominatorTree, VIRTUAL_ROOT } from "../src/dominator.js";
6
+ function assertIdom(tree, node, expected) {
7
+ assert.strictEqual(tree.get(node), expected);
8
+ }
9
+ function dominates(tree, dominator, node) {
10
+ if (dominator === node) {
11
+ return true;
12
+ }
13
+ let current = tree.get(node);
14
+ while (current !== undefined) {
15
+ if (current === dominator) {
16
+ return true;
17
+ }
18
+ if (current === VIRTUAL_ROOT) {
19
+ return false;
20
+ }
21
+ current = tree.get(current);
22
+ }
23
+ return false;
24
+ }
25
+ function nearestCommonDominator(tree, lhs, rhs) {
26
+ const dominators = new Set([lhs]);
27
+ let current = tree.get(lhs);
28
+ while (current !== undefined) {
29
+ dominators.add(current);
30
+ if (current === VIRTUAL_ROOT) {
31
+ break;
32
+ }
33
+ current = tree.get(current);
34
+ }
35
+ if (dominators.has(rhs)) {
36
+ return rhs;
37
+ }
38
+ current = tree.get(rhs);
39
+ while (current !== undefined) {
40
+ if (dominators.has(current)) {
41
+ return current;
42
+ }
43
+ if (current === VIRTUAL_ROOT) {
44
+ break;
45
+ }
46
+ current = tree.get(current);
47
+ }
48
+ return undefined;
49
+ }
50
+ function assertDomChildren(tree, node, expectedChildren) {
51
+ const actualChildren = Array.from(tree.entries())
52
+ .filter(([, idom]) => idom === node)
53
+ .map(([child]) => child)
54
+ .toSorted((lhs, rhs) => lhs - rhs);
55
+ const sortedExpectedChildren = expectedChildren.toSorted((lhs, rhs) => lhs - rhs);
56
+ assert.deepStrictEqual(actualChildren, sortedExpectedChildren);
57
+ }
58
+ describe("buildDominatorTree", () => {
59
+ it("should handle an empty graph", () => {
60
+ const graph = new Map();
61
+ const roots = new Set();
62
+ const domTree = buildDominatorTree(graph, roots);
63
+ assert.strictEqual(domTree.size, 0);
64
+ });
65
+ it("should handle a graph with a single root node", () => {
66
+ const graph = new Map();
67
+ const roots = new Set([10]);
68
+ const domTree = buildDominatorTree(graph, roots);
69
+ assert.strictEqual(domTree.size, 1);
70
+ assertIdom(domTree, 10, VIRTUAL_ROOT);
71
+ });
72
+ it("should handle a simple chain", () => {
73
+ // 10 -> 20 -> 30
74
+ const graph = new Map([
75
+ [10, [20]],
76
+ [20, [30]],
77
+ ]);
78
+ const roots = new Set([10]);
79
+ const domTree = buildDominatorTree(graph, roots);
80
+ assert.strictEqual(domTree.size, 3);
81
+ assertIdom(domTree, 10, VIRTUAL_ROOT);
82
+ assertIdom(domTree, 20, 10);
83
+ assertIdom(domTree, 30, 20);
84
+ });
85
+ it("should handle multiple roots", () => {
86
+ // R1 -> 10
87
+ // R2 -> 20
88
+ const graph = new Map([
89
+ [1, [10]],
90
+ [2, [20]],
91
+ ]);
92
+ const roots = new Set([1, 2]);
93
+ const domTree = buildDominatorTree(graph, roots);
94
+ assert.strictEqual(domTree.size, 4);
95
+ assertIdom(domTree, 1, VIRTUAL_ROOT);
96
+ assertIdom(domTree, 2, VIRTUAL_ROOT);
97
+ assertIdom(domTree, 10, 1);
98
+ assertIdom(domTree, 20, 2);
99
+ });
100
+ it("should handle a simple diamond graph", () => {
101
+ // 10
102
+ // / \
103
+ // 20 30
104
+ // \ /
105
+ // 40
106
+ const graph = new Map([
107
+ [10, [20, 30]],
108
+ [20, [40]],
109
+ [30, [40]],
110
+ ]);
111
+ const roots = new Set([10]);
112
+ const domTree = buildDominatorTree(graph, roots);
113
+ assert.strictEqual(domTree.size, 4);
114
+ assertIdom(domTree, 10, VIRTUAL_ROOT);
115
+ assertIdom(domTree, 20, 10);
116
+ assertIdom(domTree, 30, 10);
117
+ assertIdom(domTree, 40, 10);
118
+ });
119
+ it("matches the LLVM dominance no-regions case", () => {
120
+ const graph = new Map([
121
+ [0, [1]],
122
+ [1, [2, 3]],
123
+ [2, [4]],
124
+ [3, [4]],
125
+ [4, [5]],
126
+ ]);
127
+ const roots = new Set([0]);
128
+ const domTree = buildDominatorTree(graph, roots);
129
+ assert.strictEqual(dominates(domTree, 1, 4), true);
130
+ assert.strictEqual(dominates(domTree, 4, 1), false);
131
+ assert.strictEqual(dominates(domTree, 1, 2), true);
132
+ assert.strictEqual(dominates(domTree, 2, 1), false);
133
+ assert.strictEqual(dominates(domTree, 1, 3), true);
134
+ assert.strictEqual(dominates(domTree, 3, 1), false);
135
+ assert.strictEqual(nearestCommonDominator(domTree, 2, 3), 1);
136
+ assert.strictEqual(nearestCommonDominator(domTree, 2, 4), 1);
137
+ assert.strictEqual(nearestCommonDominator(domTree, 4, 4), 4);
138
+ });
139
+ it("matches the rust paper example", () => {
140
+ const graph = new Map([
141
+ [6, [5, 4]],
142
+ [5, [1]],
143
+ [4, [2, 3]],
144
+ [1, [2]],
145
+ [2, [3, 1]],
146
+ [3, [2]],
147
+ ]);
148
+ const roots = new Set([6]);
149
+ const domTree = buildDominatorTree(graph, roots);
150
+ assert.strictEqual(domTree.get(0), undefined);
151
+ assertIdom(domTree, 1, 6);
152
+ assertIdom(domTree, 2, 6);
153
+ assertIdom(domTree, 3, 6);
154
+ assertIdom(domTree, 4, 6);
155
+ assertIdom(domTree, 5, 6);
156
+ assertIdom(domTree, 6, VIRTUAL_ROOT);
157
+ });
158
+ it("handles the rust paper_slt example", () => {
159
+ const graph = new Map([
160
+ [1, [2, 3]],
161
+ [2, [3, 7]],
162
+ [3, [4, 6]],
163
+ [4, [5]],
164
+ [5, [4]],
165
+ [6, [7]],
166
+ [7, [8]],
167
+ [8, [5]],
168
+ ]);
169
+ const roots = new Set([1]);
170
+ buildDominatorTree(graph, roots);
171
+ });
172
+ it("matches the rust immediate_dominator case", () => {
173
+ const graph = new Map([
174
+ [1, [2]],
175
+ [2, [3]],
176
+ ]);
177
+ const roots = new Set([1]);
178
+ const domTree = buildDominatorTree(graph, roots);
179
+ assert.strictEqual(domTree.get(0), undefined);
180
+ assertIdom(domTree, 1, VIRTUAL_ROOT);
181
+ assertIdom(domTree, 2, 1);
182
+ assertIdom(domTree, 3, 2);
183
+ });
184
+ it("matches the rust transitive_dominator case", () => {
185
+ const graph = new Map([
186
+ [0, [1, 7]],
187
+ [1, [2, 5]],
188
+ [2, [3]],
189
+ [3, [4]],
190
+ [5, [6, 3]],
191
+ [7, [2]],
192
+ ]);
193
+ const roots = new Set([0]);
194
+ const domTree = buildDominatorTree(graph, roots);
195
+ assertIdom(domTree, 2, 0);
196
+ assertIdom(domTree, 3, 0);
197
+ });
198
+ it("should handle a graph with a cycle", () => {
199
+ // 10 -> 20 -> 30 -> 20
200
+ const graph = new Map([
201
+ [10, [20]],
202
+ [20, [30]],
203
+ [30, [20]],
204
+ ]);
205
+ const roots = new Set([10]);
206
+ const domTree = buildDominatorTree(graph, roots);
207
+ assert.strictEqual(domTree.size, 3);
208
+ assertIdom(domTree, 10, VIRTUAL_ROOT);
209
+ assertIdom(domTree, 20, 10);
210
+ assertIdom(domTree, 30, 20);
211
+ });
212
+ it("matches the DomTreeImpl complex branching-and-join case", () => {
213
+ // 0
214
+ // / \
215
+ // 1 2
216
+ // / \ \
217
+ // 3 4 5
218
+ // | \ /
219
+ // 6 7
220
+ // \ /
221
+ // 8
222
+ const graph = new Map([
223
+ [0, [1, 2]],
224
+ [1, [3, 4]],
225
+ [2, [5]],
226
+ [3, [6]],
227
+ [4, [7]],
228
+ [5, [7]],
229
+ [6, [8]],
230
+ [7, [8]],
231
+ ]);
232
+ const roots = new Set([0]);
233
+ const domTree = buildDominatorTree(graph, roots);
234
+ assert.strictEqual(domTree.size, 9);
235
+ assertIdom(domTree, 0, VIRTUAL_ROOT);
236
+ assertIdom(domTree, 1, 0);
237
+ assertIdom(domTree, 2, 0);
238
+ assertIdom(domTree, 3, 1);
239
+ assertIdom(domTree, 4, 1);
240
+ assertIdom(domTree, 5, 2);
241
+ assertIdom(domTree, 6, 3);
242
+ assertIdom(domTree, 7, 0);
243
+ assertIdom(domTree, 8, 0);
244
+ });
245
+ it("matches the DomTreeImpl loop case", () => {
246
+ // 0
247
+ // |
248
+ // 1
249
+ // / \
250
+ // 2 3 <-+
251
+ // | | |
252
+ // 4 5 --6
253
+ // \ /
254
+ // 7
255
+ // |
256
+ // 8
257
+ const graph = new Map([
258
+ [0, [1]],
259
+ [1, [2, 3]],
260
+ [2, [4]],
261
+ [3, [5]],
262
+ [4, [7]],
263
+ [5, [6, 7]],
264
+ [6, [3]],
265
+ [7, [8]],
266
+ ]);
267
+ const roots = new Set([0]);
268
+ const domTree = buildDominatorTree(graph, roots);
269
+ assert.strictEqual(domTree.size, 9);
270
+ assertIdom(domTree, 0, VIRTUAL_ROOT);
271
+ assertIdom(domTree, 1, 0);
272
+ assertIdom(domTree, 2, 1);
273
+ assertIdom(domTree, 3, 1);
274
+ assertIdom(domTree, 4, 2);
275
+ assertIdom(domTree, 5, 3);
276
+ assertIdom(domTree, 6, 5);
277
+ assertIdom(domTree, 7, 1);
278
+ assertIdom(domTree, 8, 7);
279
+ });
280
+ it("matches the LLVM consecutive-regions graph at block level", () => {
281
+ const graph = new Map([
282
+ [0, [10]],
283
+ [10, [11]],
284
+ [11, [12, 13]],
285
+ [12, [14]],
286
+ [13, [13, 14]],
287
+ [14, [20]],
288
+ [20, [21]],
289
+ [21, [22]],
290
+ [22, [30]],
291
+ ]);
292
+ const roots = new Set([0]);
293
+ const domTree = buildDominatorTree(graph, roots);
294
+ assertDomChildren(domTree, 10, [11]);
295
+ assertDomChildren(domTree, 11, [12, 13, 14]);
296
+ assertDomChildren(domTree, 12, []);
297
+ assertDomChildren(domTree, 13, []);
298
+ assertDomChildren(domTree, 14, [20]);
299
+ assertDomChildren(domTree, 20, [21]);
300
+ assertDomChildren(domTree, 21, [22]);
301
+ assert.strictEqual(dominates(domTree, 10, 20), true);
302
+ assert.strictEqual(dominates(domTree, 20, 10), false);
303
+ assert.strictEqual(dominates(domTree, 11, 14), true);
304
+ assert.strictEqual(dominates(domTree, 14, 11), false);
305
+ assert.strictEqual(dominates(domTree, 21, 22), true);
306
+ assert.strictEqual(dominates(domTree, 22, 21), false);
307
+ assert.strictEqual(dominates(domTree, 11, 21), true);
308
+ assert.strictEqual(dominates(domTree, 21, 11), false);
309
+ assert.strictEqual(dominates(domTree, 14, 21), true);
310
+ assert.strictEqual(dominates(domTree, 13, 21), false);
311
+ assert.strictEqual(dominates(domTree, 10, 21), true);
312
+ assert.strictEqual(dominates(domTree, 21, 10), false);
313
+ });
314
+ it("matches the LLVM nested-regions graph at block level", () => {
315
+ const graph = new Map([
316
+ [0, [10]],
317
+ [10, [11]],
318
+ [11, [20, 12]],
319
+ [20, [21]],
320
+ [21, [22]],
321
+ [22, [21, 23]],
322
+ [23, [13]],
323
+ [12, [13]],
324
+ [13, [30]],
325
+ [30, [31]],
326
+ ]);
327
+ const roots = new Set([0]);
328
+ const domTree = buildDominatorTree(graph, roots);
329
+ assertDomChildren(domTree, 0, [10]);
330
+ assertDomChildren(domTree, 10, [11]);
331
+ assertDomChildren(domTree, 11, [12, 13, 20]);
332
+ assertDomChildren(domTree, 12, []);
333
+ assertDomChildren(domTree, 20, [21]);
334
+ assertDomChildren(domTree, 21, [22]);
335
+ assertDomChildren(domTree, 22, [23]);
336
+ assertDomChildren(domTree, 23, []);
337
+ assertDomChildren(domTree, 13, [30]);
338
+ assertDomChildren(domTree, 30, [31]);
339
+ });
340
+ it("should handle unreachable nodes", () => {
341
+ // 10 -> 20
342
+ // 30 (unreachable)
343
+ const graph = new Map([
344
+ [10, [20]],
345
+ [30, []],
346
+ ]);
347
+ const roots = new Set([10]);
348
+ const domTree = buildDominatorTree(graph, roots);
349
+ assert.strictEqual(domTree.size, 2);
350
+ assert.strictEqual(domTree.has(10), true);
351
+ assert.strictEqual(domTree.has(20), true);
352
+ assert.strictEqual(domTree.has(30), false);
353
+ });
354
+ it("should handle a more complex graph (from Lengauer-Tarjan paper)", () => {
355
+ // This is a classic example graph for dominator algorithms.
356
+ // R(1)
357
+ // / | \
358
+ // 2 3 4
359
+ // | | | \
360
+ // 5--+--6 7
361
+ // | | | /
362
+ // 8--+--9
363
+ // \ | /
364
+ // 10
365
+ // |
366
+ // 11
367
+ // |
368
+ // 12
369
+ // /
370
+ // 1
371
+ const graph = new Map([
372
+ [1, [2, 3, 4]],
373
+ [2, [5]],
374
+ [3, [6]],
375
+ [4, [6, 7]],
376
+ [5, [8]],
377
+ [6, [9]],
378
+ [7, [9]],
379
+ [8, [10]],
380
+ [9, [10]],
381
+ [10, [11]],
382
+ [11, [12]],
383
+ [12, [1]], // Cycle back to root
384
+ ]);
385
+ const roots = new Set([1]);
386
+ const domTree = buildDominatorTree(graph, roots);
387
+ assert.strictEqual(domTree.size, 12);
388
+ assertIdom(domTree, 1, VIRTUAL_ROOT);
389
+ assertIdom(domTree, 2, 1);
390
+ assertIdom(domTree, 3, 1);
391
+ assertIdom(domTree, 4, 1);
392
+ assertIdom(domTree, 5, 2);
393
+ assertIdom(domTree, 6, 1); // Dominated by 1, not 3 or 4
394
+ assertIdom(domTree, 7, 4);
395
+ assertIdom(domTree, 8, 5);
396
+ assertIdom(domTree, 9, 1); // Dominated by 1, not 6 or 7
397
+ assertIdom(domTree, 10, 1); // Dominated by 1, not 8 or 9
398
+ assertIdom(domTree, 11, 10);
399
+ assertIdom(domTree, 12, 11);
400
+ });
401
+ it("should handle a case where semi-dominator is not the idom", () => {
402
+ // 1
403
+ // |
404
+ // 2
405
+ // / \
406
+ // 3 4
407
+ // | |
408
+ // 5<--6
409
+ // |
410
+ // 7
411
+ // |
412
+ // 8
413
+ // ^
414
+ // 4
415
+ const graph = new Map([
416
+ [1, [2]],
417
+ [2, [3, 4]],
418
+ [3, [5]],
419
+ [4, [6, 8]],
420
+ [5, [7]],
421
+ [6, [5]],
422
+ [7, [8]],
423
+ ]);
424
+ const roots = new Set([1]);
425
+ const domTree = buildDominatorTree(graph, roots);
426
+ // sdom(8) is 4.
427
+ // But idom(8) is 2, because of the path 1-2-3-5-7-8
428
+ assertIdom(domTree, 1, VIRTUAL_ROOT);
429
+ assertIdom(domTree, 2, 1);
430
+ assertIdom(domTree, 3, 2);
431
+ assertIdom(domTree, 4, 2);
432
+ assertIdom(domTree, 5, 2); // Dom by 2, not 3 or 6
433
+ assertIdom(domTree, 6, 4);
434
+ assertIdom(domTree, 7, 5);
435
+ assertIdom(domTree, 8, 2); // Dom by 2, not 4 or 7
436
+ });
437
+ });
438
+ //# sourceMappingURL=dominator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dominator.test.js","sourceRoot":"","sources":["../../../tools/heap_analyzer/tests/dominator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,51 @@
1
+ import assert from "node:assert/strict";
2
+ import { before, it } from "node:test";
3
+ import { parseDumpFile } from "../src/dumpReader.js";
4
+ import { DUMP_HEADER_SIZE } from "../src/constants.js";
5
+ import { describeIntegration } from "./testHelper.js";
6
+ describeIntegration("parseDumpFile", (ctx) => {
7
+ let buffer;
8
+ before(() => {
9
+ ctx.compileFixture();
10
+ ctx.generateFixtureDump();
11
+ buffer = ctx.loadFixtureDumpBuffer();
12
+ });
13
+ it("parses metadata from generated dump", () => {
14
+ const result = parseDumpFile(buffer);
15
+ const header = new DataView(buffer);
16
+ assert.strictEqual(result.rtGlobals.dataEnd, header.getUint32(8, true));
17
+ assert.strictEqual(result.rtGlobals.heapBase, header.getUint32(12, true));
18
+ assert.strictEqual(result.rtGlobals.stackPointer, header.getUint32(16, true));
19
+ assert.ok(result.rtGlobals.dataEnd > 0);
20
+ assert.ok(result.rtGlobals.heapBase > result.rtGlobals.dataEnd);
21
+ assert.ok(result.rtGlobals.stackPointer <= result.rtGlobals.heapBase);
22
+ });
23
+ it("returns a DataView over the memory region", () => {
24
+ const result = parseDumpFile(buffer);
25
+ assert.ok(result.memory instanceof DataView);
26
+ });
27
+ it("memory size equals file size minus header", () => {
28
+ const result = parseDumpFile(buffer);
29
+ assert.strictEqual(result.memory.byteLength, buffer.byteLength - DUMP_HEADER_SIZE);
30
+ assert.strictEqual(result.memory.byteLength, 65536);
31
+ });
32
+ it("memory content is readable at address 0", () => {
33
+ const result = parseDumpFile(buffer);
34
+ assert.doesNotThrow(() => result.memory.getUint8(0));
35
+ });
36
+ it("throws on truncated input", () => {
37
+ const truncated = buffer.slice(0, 10);
38
+ assert.throws(() => parseDumpFile(truncated), /too small/);
39
+ });
40
+ it("throws on corrupt magic", () => {
41
+ const corrupt = buffer.slice(0);
42
+ new Uint8Array(corrupt).set([0, 0, 0, 0], 0);
43
+ assert.throws(() => parseDumpFile(corrupt), /Invalid dump magic/);
44
+ });
45
+ it("throws on wrong version", () => {
46
+ const badVersion = buffer.slice(0);
47
+ new DataView(badVersion).setUint32(4, 99, true);
48
+ assert.throws(() => parseDumpFile(badVersion), /Unsupported dump version/);
49
+ });
50
+ });
51
+ //# sourceMappingURL=dumpReader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dumpReader.test.js","sourceRoot":"","sources":["../../../tools/heap_analyzer/tests/dumpReader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};