DHAT: when the run ends, print a how-to-view-the-profile hint message. n-i-bz.
[valgrind.git] / dhat / dh_test.js
blob7a15261c573d3dac4fd73df0f44ed97491517e9a
2 //--------------------------------------------------------------------*/
3 //--- DHAT: a Dynamic Heap Analysis Tool                dh_test.js ---*/
4 //--------------------------------------------------------------------*/
6 /*
7    This file is part of DHAT, a Valgrind tool for profiling the
8    heap usage of programs.
10    Copyright (C) 2018 Mozilla Foundation
12    This program is free software; you can redistribute it and/or
13    modify it under the terms of the GNU General Public License as
14    published by the Free Software Foundation; either version 2 of the
15    License, or (at your option) any later version.
17    This program is distributed in the hope that it will be useful, but
18    WITHOUT ANY WARRANTY; without even the implied warranty of
19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20    General Public License for more details.
22    You should have received a copy of the GNU General Public License
23    along with this program; if not, write to the Free Software
24    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
25    02111-1307, USA.
27    The GNU General Public License is contained in the file COPYING.
30 // We can't fully automate testing of a web app via the normal Valgrind
31 // regression testing. Instead we have this code, which is executed when
32 // dh_view.html is loaded with a "?test=1" parameter.
34 // Things tested by this file:
35 // - Tree building, with multiple sort metrics.
36 // - Text content of the displayed tree.
38 // Things not tested by this file:
39 // - Output from DHAT itself (unless that output is regenerated when necessary
40 //   and copy-and-pasted in the "input" fields in this file).
41 // - Interactions with the "Load" button and "Sort metric" menu.
42 // - File loading and parsing.
43 // - Non-text content of the displayed tree (e.g. node colours, sortKey
44 //   highlighting).
45 // - Tree interactions (collapsing and expanding of nodes).
47 "use strict";
49 // Test inputs are copied verbatim from DHAT output files, not as strings but
50 // as actual JavaScript code. This works because output files are JSON, and
51 // JSON is valid JavaScript.
53 // Expected outputs are paired with a sort metric, and copied verbatim from the
54 // DHAT viewer.
55 let tests = []
57 //---------------------------------------------------------------------------
58 // empty (corresponds to dhat/tests/empty.c)
59 //---------------------------------------------------------------------------
61 let empty = {
62   name: "empty",
63   input:
64 //---------------------------------------------------------------------------
65 {"dhatFileVersion":1
66 ,"cmd":"./empty"
67 ,"pid":23431
68 ,"mi":0,"ei":248602
69 ,"aps":
70  [
71  ]
72 ,"ftbl":
73  ["[root]"
74  ]
76 //---------------------------------------------------------------------------
77   ,
78   outputs: [
79     {
80       label: "Total (bytes)",
81       expected:
82 //---------------------------------------------------------------------------
84 Invocation {
85   Command: ./empty
86   PID:     23431
89 Times {
90   t-gmax: 0 instrs (0% of program duration)
91   t-end:  248,602 instrs
94 ─ AP 1/1 {
95     Total:     0 bytes (0%, 0/Minstr) in 0 blocks (0%, 0/Minstr), avg size 0 bytes, avg lifetime 0 instrs (0% of program duration)
96     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
97     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
98     Reads:     0 bytes (0%, 0/Minstr), 0/byte
99     Writes:    0 bytes (0%, 0/Minstr), 0/byte
100     Allocated at {
101       #0: [root]
102     }
103   }
105 AP significance threshold: total >= 0 bytes (0%)
107 //---------------------------------------------------------------------------
108     }
109   ]
111 tests.push(empty);
113 //---------------------------------------------------------------------------
114 // single (corresponds to dhat/tests/single.c)
115 //---------------------------------------------------------------------------
117 let single = {
118   name: "single",
119   input:
120 //---------------------------------------------------------------------------
121 {"dhatFileVersion":1
122 ,"cmd":"./single"
123 ,"pid":30563
124 ,"mi":242900,"ei":249824
125 ,"aps":
126  [{"tb":16,"tbk":1,"tli":6924
127   ,"mb":16,"mbk":1
128   ,"gb":16,"gbk":1
129   ,"fb":16,"fbk":1
130   ,"rb":0,"wb":12
131   ,"acc":[-4,3,-12,0]
132   ,"fs":[1]
133   }
135 ,"ftbl":
136  ["[root]"
137  ,"0x10865B: main (single.cpp:4)"
140 //---------------------------------------------------------------------------
141   ,
142   outputs: [
143     {
144       label: "Total (bytes)",
145       expected:
146 //---------------------------------------------------------------------------
148 Invocation {
149   Command: ./single
150   PID:     30563
153 Times {
154   t-gmax: 242,900 instrs (97.23% of program duration)
155   t-end:  249,824 instrs
158 ─ AP 1/1 {
159     Total:     16 bytes (100%, 64.05/Minstr) in 1 blocks (100%, 4/Minstr), avg size 16 bytes, avg lifetime 6,924 instrs (2.77% of program duration)
160     At t-gmax: 16 bytes (100%) in 1 blocks (100%), avg size 16 bytes
161     At t-end:  16 bytes (100%) in 1 blocks (100%), avg size 16 bytes
162     Reads:     0 bytes (0%, 0/Minstr), 0/byte
163     Writes:    12 bytes (100%, 48.03/Minstr), 0.75/byte
164     Accesses: {
165       [  0]  3 〃 〃 〃 - - - - - - - - - - - - 
166     }
167     Allocated at {
168       #0: [root]
169       #1: 0x10865B: main (single.cpp:4)
170     }
171   }
173 AP significance threshold: total >= 0.16 bytes (1%)
175 //---------------------------------------------------------------------------
176     }
177   ]
179 tests.push(single);
181 //---------------------------------------------------------------------------
182 // subseqs (a synthetic test for locations that are subsequences of other
183 // locations, which are rare but can happen in practice, esp. with recursion)
184 //---------------------------------------------------------------------------
186 let subseqs = {
187   name: "subseqs",
188   input:
189 //---------------------------------------------------------------------------
190 {"dhatFileVersion":1
191 ,"cmd":"subseqs"
192 ,"pid":0
193 ,"mi":10000,"ei":20000
194 ,"aps":
195  [{"tb":15,"tbk":1,"tli":1000
196   ,"mb":15,"mbk":1
197   ,"gb":15,"gbk":1
198   ,"fb":0,"fbk":0
199   ,"rb":0,"wb":0
200   ,"acc":[-15,0]
201   ,"fs":[1,2,3]
202   }
203  ,{"tb":14,"tbk":1,"tli":1000
204   ,"mb":14,"mbk":1
205   ,"gb":14,"gbk":1
206   ,"fb":0,"fbk":0
207   ,"rb":0,"wb":0
208   ,"acc":[-14,0]
209   ,"fs":[1,2,3,3]
210   }
211  ,{"tb":13,"tbk":1,"tli":1000
212   ,"mb":13,"mbk":1
213   ,"gb":13,"gbk":1
214   ,"fb":0,"fbk":0
215   ,"rb":0,"wb":0
216   ,"acc":[-13,0]
217   ,"fs":[1,2,3,3,3]
218   }
219  ,{"tb":12,"tbk":1,"tli":1000
220   ,"mb":12,"mbk":1
221   ,"gb":12,"gbk":1
222   ,"fb":0,"fbk":0
223   ,"rb":0,"wb":0
224   ,"acc":[-12,0]
225   ,"fs":[4,5,6,6,6]
226   }
227  ,{"tb":11,"tbk":1,"tli":1000
228   ,"mb":11,"mbk":1
229   ,"gb":11,"gbk":1
230   ,"fb":0,"fbk":0
231   ,"rb":0,"wb":0
232   ,"acc":[-11,0]
233   ,"fs":[4,5,6,6]
234   }
235  ,{"tb":10,"tbk":1,"tli":1000
236   ,"mb":10,"mbk":1
237   ,"gb":10,"gbk":1
238   ,"fb":0,"fbk":0
239   ,"rb":0,"wb":0
240   ,"acc":[-10,0]
241   ,"fs":[4,5,6]
242   }
243  ,{"tb":9,"tbk":1,"tli":1000
244   ,"mb":9,"mbk":1
245   ,"gb":9,"gbk":1
246   ,"fb":0,"fbk":0
247   ,"rb":0,"wb":0
248   ,"acc":[-9,0]
249   ,"fs":[7,8,9]
250   }
251  ,{"tb":8,"tbk":1,"tli":1000
252   ,"mb":8,"mbk":1
253   ,"gb":8,"gbk":1
254   ,"fb":0,"fbk":0
255   ,"rb":0,"wb":0
256   ,"acc":[-8,0]
257   ,"fs":[7,8,10]
258   }
259  ,{"tb":7,"tbk":1,"tli":1000
260   ,"mb":7,"mbk":1
261   ,"gb":7,"gbk":1
262   ,"fb":0,"fbk":0
263   ,"rb":0,"wb":0
264   ,"acc":[-7,0]
265   ,"fs":[7,8]
266   }
268 ,"ftbl":
269  ["[root]"
270  ,"a()"
271  ,"b()"
272  ,"c()"
273  ,"d()"
274  ,"e()"
275  ,"f()"
276  ,"g()"
277  ,"h()"
278  ,"i()"
279  ,"j()"
282 //---------------------------------------------------------------------------
283   ,
284   outputs: [
285     {
286       label: "Total (bytes)",
287       expected:
288 //---------------------------------------------------------------------------
290 Invocation {
291   Command: subseqs
292   PID:     0
295 Times {
296   t-gmax: 10,000 instrs (50% of program duration)
297   t-end:  20,000 instrs
300 ▼ AP 1/1 (3 children) {
301     Total:     99 bytes (100%, 4,950/Minstr) in 9 blocks (100%, 450/Minstr), avg size 11 bytes, avg lifetime 1,000 instrs (5% of program duration)
302     At t-gmax: 99 bytes (100%) in 9 blocks (100%), avg size 11 bytes
303     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
304     Reads:     0 bytes (0%, 0/Minstr), 0/byte
305     Writes:    0 bytes (0%, 0/Minstr), 0/byte
306     Allocated at {
307       #0: [root]
308     }
309   }
310   ├─▼ AP 1.1/3 (2 children) {
311   │     Total:     42 bytes (42.42%, 2,100/Minstr) in 3 blocks (33.33%, 150/Minstr), avg size 14 bytes, avg lifetime 1,000 instrs (5% of program duration)
312   │     At t-gmax: 42 bytes (42.42%) in 3 blocks (33.33%), avg size 14 bytes
313   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
314   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
315   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
316   │     Allocated at {
317   │       #1: a()
318   │       #2: b()
319   │       #3: c()
320   │     }
321   │   }
322   │   ├─▼ AP 1.1.1/2 (2 children) {
323   │   │     Total:     27 bytes (27.27%, 1,350/Minstr) in 2 blocks (22.22%, 100/Minstr), avg size 13.5 bytes, avg lifetime 1,000 instrs (5% of program duration)
324   │   │     At t-gmax: 27 bytes (27.27%) in 2 blocks (22.22%), avg size 13.5 bytes
325   │   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
326   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
327   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
328   │   │     Allocated at {
329   │   │       ^1: a()
330   │   │       ^2: b()
331   │   │       ^3: c()
332   │   │       #4: c()
333   │   │     }
334   │   │   }
335   │   │   ├── AP 1.1.1.1/2 {
336   │   │   │     Total:     14 bytes (14.14%, 700/Minstr) in 1 blocks (11.11%, 50/Minstr), avg size 14 bytes, avg lifetime 1,000 instrs (5% of program duration)
337   │   │   │     Max:       14 bytes in 1 blocks, avg size 14 bytes
338   │   │   │     At t-gmax: 14 bytes (14.14%) in 1 blocks (11.11%), avg size 14 bytes
339   │   │   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
340   │   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
341   │   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
342   │   │   │     Accesses: {
343   │   │   │       [  0]  - - - - - - - - - - - - - - 
344   │   │   │     }
345   │   │   │     Allocated at {
346   │   │   │       ^1: a()
347   │   │   │       ^2: b()
348   │   │   │       ^3: c()
349   │   │   │       ^4: c()
350   │   │   │     }
351   │   │   │   }
352   │   │   └── AP 1.1.1.2/2 {
353   │   │         Total:     13 bytes (13.13%, 650/Minstr) in 1 blocks (11.11%, 50/Minstr), avg size 13 bytes, avg lifetime 1,000 instrs (5% of program duration)
354   │   │         Max:       13 bytes in 1 blocks, avg size 13 bytes
355   │   │         At t-gmax: 13 bytes (13.13%) in 1 blocks (11.11%), avg size 13 bytes
356   │   │         At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
357   │   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
358   │   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
359   │   │         Accesses: {
360   │   │           [  0]  - - - - - - - - - - - - - 
361   │   │         }
362   │   │         Allocated at {
363   │   │           ^1: a()
364   │   │           ^2: b()
365   │   │           ^3: c()
366   │   │           ^4: c()
367   │   │           #5: c()
368   │   │         }
369   │   │       }
370   │   └── AP 1.1.2/2 {
371   │         Total:     15 bytes (15.15%, 750/Minstr) in 1 blocks (11.11%, 50/Minstr), avg size 15 bytes, avg lifetime 1,000 instrs (5% of program duration)
372   │         Max:       15 bytes in 1 blocks, avg size 15 bytes
373   │         At t-gmax: 15 bytes (15.15%) in 1 blocks (11.11%), avg size 15 bytes
374   │         At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
375   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
376   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
377   │         Accesses: {
378   │           [  0]  - - - - - - - - - - - - - - - 
379   │         }
380   │         Allocated at {
381   │           ^1: a()
382   │           ^2: b()
383   │           ^3: c()
384   │         }
385   │       }
386   ├─▼ AP 1.2/3 (2 children) {
387   │     Total:     33 bytes (33.33%, 1,650/Minstr) in 3 blocks (33.33%, 150/Minstr), avg size 11 bytes, avg lifetime 1,000 instrs (5% of program duration)
388   │     At t-gmax: 33 bytes (33.33%) in 3 blocks (33.33%), avg size 11 bytes
389   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
390   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
391   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
392   │     Allocated at {
393   │       #1: d()
394   │       #2: e()
395   │       #3: f()
396   │     }
397   │   }
398   │   ├─▼ AP 1.2.1/2 (2 children) {
399   │   │     Total:     23 bytes (23.23%, 1,150/Minstr) in 2 blocks (22.22%, 100/Minstr), avg size 11.5 bytes, avg lifetime 1,000 instrs (5% of program duration)
400   │   │     At t-gmax: 23 bytes (23.23%) in 2 blocks (22.22%), avg size 11.5 bytes
401   │   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
402   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
403   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
404   │   │     Allocated at {
405   │   │       ^1: d()
406   │   │       ^2: e()
407   │   │       ^3: f()
408   │   │       #4: f()
409   │   │     }
410   │   │   }
411   │   │   ├── AP 1.2.1.1/2 {
412   │   │   │     Total:     12 bytes (12.12%, 600/Minstr) in 1 blocks (11.11%, 50/Minstr), avg size 12 bytes, avg lifetime 1,000 instrs (5% of program duration)
413   │   │   │     Max:       12 bytes in 1 blocks, avg size 12 bytes
414   │   │   │     At t-gmax: 12 bytes (12.12%) in 1 blocks (11.11%), avg size 12 bytes
415   │   │   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
416   │   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
417   │   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
418   │   │   │     Accesses: {
419   │   │   │       [  0]  - - - - - - - - - - - - 
420   │   │   │     }
421   │   │   │     Allocated at {
422   │   │   │       ^1: d()
423   │   │   │       ^2: e()
424   │   │   │       ^3: f()
425   │   │   │       ^4: f()
426   │   │   │       #5: f()
427   │   │   │     }
428   │   │   │   }
429   │   │   └── AP 1.2.1.2/2 {
430   │   │         Total:     11 bytes (11.11%, 550/Minstr) in 1 blocks (11.11%, 50/Minstr), avg size 11 bytes, avg lifetime 1,000 instrs (5% of program duration)
431   │   │         Max:       11 bytes in 1 blocks, avg size 11 bytes
432   │   │         At t-gmax: 11 bytes (11.11%) in 1 blocks (11.11%), avg size 11 bytes
433   │   │         At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
434   │   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
435   │   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
436   │   │         Accesses: {
437   │   │           [  0]  - - - - - - - - - - - 
438   │   │         }
439   │   │         Allocated at {
440   │   │           ^1: d()
441   │   │           ^2: e()
442   │   │           ^3: f()
443   │   │           ^4: f()
444   │   │         }
445   │   │       }
446   │   └── AP 1.2.2/2 {
447   │         Total:     10 bytes (10.1%, 500/Minstr) in 1 blocks (11.11%, 50/Minstr), avg size 10 bytes, avg lifetime 1,000 instrs (5% of program duration)
448   │         Max:       10 bytes in 1 blocks, avg size 10 bytes
449   │         At t-gmax: 10 bytes (10.1%) in 1 blocks (11.11%), avg size 10 bytes
450   │         At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
451   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
452   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
453   │         Accesses: {
454   │           [  0]  - - - - - - - - - - 
455   │         }
456   │         Allocated at {
457   │           ^1: d()
458   │           ^2: e()
459   │           ^3: f()
460   │         }
461   │       }
462   └─▼ AP 1.3/3 (3 children) {
463         Total:     24 bytes (24.24%, 1,200/Minstr) in 3 blocks (33.33%, 150/Minstr), avg size 8 bytes, avg lifetime 1,000 instrs (5% of program duration)
464         At t-gmax: 24 bytes (24.24%) in 3 blocks (33.33%), avg size 8 bytes
465         At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
466         Reads:     0 bytes (0%, 0/Minstr), 0/byte
467         Writes:    0 bytes (0%, 0/Minstr), 0/byte
468         Allocated at {
469           #1: g()
470           #2: h()
471         }
472       }
473       ├── AP 1.3.1/3 {
474       │     Total:     9 bytes (9.09%, 450/Minstr) in 1 blocks (11.11%, 50/Minstr), avg size 9 bytes, avg lifetime 1,000 instrs (5% of program duration)
475       │     Max:       9 bytes in 1 blocks, avg size 9 bytes
476       │     At t-gmax: 9 bytes (9.09%) in 1 blocks (11.11%), avg size 9 bytes
477       │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
478       │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
479       │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
480       │     Accesses: {
481       │       [  0]  - - - - - - - - - 
482       │     }
483       │     Allocated at {
484       │       ^1: g()
485       │       ^2: h()
486       │       #3: i()
487       │     }
488       │   }
489       ├── AP 1.3.2/3 {
490       │     Total:     8 bytes (8.08%, 400/Minstr) in 1 blocks (11.11%, 50/Minstr), avg size 8 bytes, avg lifetime 1,000 instrs (5% of program duration)
491       │     Max:       8 bytes in 1 blocks, avg size 8 bytes
492       │     At t-gmax: 8 bytes (8.08%) in 1 blocks (11.11%), avg size 8 bytes
493       │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
494       │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
495       │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
496       │     Accesses: {
497       │       [  0]  - - - - - - - - 
498       │     }
499       │     Allocated at {
500       │       ^1: g()
501       │       ^2: h()
502       │       #3: j()
503       │     }
504       │   }
505       └── AP 1.3.3/3 {
506             Total:     7 bytes (7.07%, 350/Minstr) in 1 blocks (11.11%, 50/Minstr), avg size 7 bytes, avg lifetime 1,000 instrs (5% of program duration)
507             Max:       7 bytes in 1 blocks, avg size 7 bytes
508             At t-gmax: 7 bytes (7.07%) in 1 blocks (11.11%), avg size 7 bytes
509             At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
510             Reads:     0 bytes (0%, 0/Minstr), 0/byte
511             Writes:    0 bytes (0%, 0/Minstr), 0/byte
512             Accesses: {
513               [  0]  - - - - - - - 
514             }
515             Allocated at {
516               ^1: g()
517               ^2: h()
518             }
519           }
521 AP significance threshold: total >= 0.99 bytes (1%)
523 //---------------------------------------------------------------------------
524     }
525   ]
527 tests.push(subseqs);
529 //---------------------------------------------------------------------------
530 // acc (corresponds to dhat/tests/acc.c)
531 //---------------------------------------------------------------------------
533 let acc = {
534   name: "acc",
535   input:
536 //---------------------------------------------------------------------------
537 {"dhatFileVersion":1
538 ,"cmd":"./acc"
539 ,"pid":23513
540 ,"mi":265120,"ei":1337753
541 ,"aps":
542  [{"tb":32,"tbk":1,"tli":4751
543   ,"mb":32,"mbk":1
544   ,"gb":0,"gbk":0
545   ,"fb":0,"fbk":0
546   ,"rb":0,"wb":496
547   ,"acc":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
548   ,"fs":[1]
549   }
550  ,{"tb":20,"tbk":1,"tli":106
551   ,"mb":20,"mbk":1
552   ,"gb":0,"gbk":0
553   ,"fb":0,"fbk":0
554   ,"rb":4,"wb":48
555   ,"acc":[-4,2,-4,0,-4,1,-4,0,-4,10]
556   ,"fs":[2]
557   }
558  ,{"tb":33,"tbk":1,"tli":39
559   ,"mb":33,"mbk":1
560   ,"gb":0,"gbk":0
561   ,"fb":0,"fbk":0
562   ,"rb":0,"wb":1
563   ,"acc":[-32,0,1]
564   ,"fs":[3]
565   }
566  ,{"tb":1024,"tbk":1,"tli":15179
567   ,"mb":1024,"mbk":1
568   ,"gb":0,"gbk":0
569   ,"fb":0,"fbk":0
570   ,"rb":1024,"wb":1124
571   ,"acc":[-500,2,-100,3,-424,2]
572   ,"fs":[4]
573   }
574  ,{"tb":1025,"tbk":1,"tli":15415
575   ,"mb":1025,"mbk":1
576   ,"gb":1025,"gbk":1
577   ,"fb":0,"fbk":0
578   ,"rb":1025,"wb":1025
579   ,"fs":[5]
580   }
581  ,{"tb":100,"tbk":1,"tli":350084
582   ,"mb":100,"mbk":1
583   ,"gb":0,"gbk":0
584   ,"fb":0,"fbk":0
585   ,"rb":0,"wb":200000
586   ,"acc":[-4,50000,-96,0]
587   ,"fs":[6,7]
588   }
589  ,{"tb":100,"tbk":1,"tli":350072
590   ,"mb":100,"mbk":1
591   ,"gb":0,"gbk":0
592   ,"fb":0,"fbk":0
593   ,"rb":0,"wb":200000
594   ,"acc":[-4,50000,-96,0]
595   ,"fs":[6,8]
596   }
597  ,{"tb":100,"tbk":1,"tli":700084
598   ,"mb":100,"mbk":1
599   ,"gb":0,"gbk":0
600   ,"fb":0,"fbk":0
601   ,"rb":0,"wb":400000
602   ,"acc":[-4,65535,-96,0]
603   ,"fs":[9,10]
604   }
605  ,{"tb":100,"tbk":1,"tli":700072
606   ,"mb":100,"mbk":1
607   ,"gb":0,"gbk":0
608   ,"fb":0,"fbk":0
609   ,"rb":0,"wb":400000
610   ,"acc":[-4,65535,-96,0]
611   ,"fs":[9,11]
612   }
614 ,"ftbl":
615  ["[root]"
616  ,"0x10871F: main (acc.c:14)"
617  ,"0x108771: main (acc.c:23)"
618  ,"0x1087CB: main (acc.c:32)"
619  ,"0x1087F0: main (acc.c:37)"
620  ,"0x10886F: main (acc.c:47)"
621  ,"0x1086F1: m1 (acc.c:7)"
622  ,"0x1088C3: main (acc.c:54)"
623  ,"0x1088D1: main (acc.c:55)"
624  ,"0x10870B: m2 (acc.c:9)"
625  ,"0x108921: main (acc.c:64)"
626  ,"0x10892F: main (acc.c:65)"
629 //---------------------------------------------------------------------------
630   ,
631   outputs: [
632     {
633       // All blocks are freed, which means all "At t-end" values are 0, so
634       // sorting by atTEndBytes results in no aggregate nodes, which is what we
635       // want here.
636       label: "At t-end (bytes)",
637       expected:
638 //---------------------------------------------------------------------------
640 Invocation {
641   Command: ./acc
642   PID:     23513
645 Times {
646   t-gmax: 265,120 instrs (19.82% of program duration)
647   t-end:  1,337,753 instrs
650 ▼ AP 1/1 (7 children) {
651     Total:     2,534 bytes (100%, 1,894.22/Minstr) in 9 blocks (100%, 6.73/Minstr), avg size 281.56 bytes, avg lifetime 237,311.33 instrs (17.74% of program duration)
652     At t-gmax: 1,025 bytes (100%) in 1 blocks (100%), avg size 1,025 bytes
653     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
654     Reads:     2,053 bytes (100%, 1,534.66/Minstr), 0.81/byte
655     Writes:    1,202,694 bytes (100%, 899,040.41/Minstr), 474.62/byte
656     Allocated at {
657       #0: [root]
658     }
659   }
660   ├── AP 1.1/7 {
661   │     Total:     1,025 bytes (40.45%, 766.21/Minstr) in 1 blocks (11.11%, 0.75/Minstr), avg size 1,025 bytes, avg lifetime 15,415 instrs (1.15% of program duration)
662   │     Max:       1,025 bytes in 1 blocks, avg size 1,025 bytes
663   │     At t-gmax: 1,025 bytes (100%) in 1 blocks (100%), avg size 1,025 bytes
664   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
665   │     Reads:     1,025 bytes (49.93%, 766.21/Minstr), 1/byte
666   │     Writes:    1,025 bytes (0.09%, 766.21/Minstr), 1/byte
667   │     Allocated at {
668   │       #1: 0x10886F: main (acc.c:47)
669   │     }
670   │   }
671   ├── AP 1.2/7 {
672   │     Total:     1,024 bytes (40.41%, 765.46/Minstr) in 1 blocks (11.11%, 0.75/Minstr), avg size 1,024 bytes, avg lifetime 15,179 instrs (1.13% of program duration)
673   │     Max:       1,024 bytes in 1 blocks, avg size 1,024 bytes
674   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
675   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
676   │     Reads:     1,024 bytes (49.88%, 765.46/Minstr), 1/byte
677   │     Writes:    1,124 bytes (0.09%, 840.21/Minstr), 1.1/byte
678   │     Accesses: {
679   │       [  0]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
680   │       [ 32]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
681   │       [ 64]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
682   │       [ 96]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
683   │       [128]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
684   │       [160]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
685   │       [192]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
686   │       [224]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
687   │       [256]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
688   │       [288]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
689   │       [320]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
690   │       [352]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
691   │       [384]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
692   │       [416]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
693   │       [448]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
694   │       [480]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 3 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
695   │       [512]  3 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
696   │       [544]  3 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
697   │       [576]  3 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 2 〃 〃 〃 〃 〃 〃 〃 
698   │       [608]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
699   │       [640]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
700   │       [672]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
701   │       [704]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
702   │       [736]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
703   │       [768]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
704   │       [800]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
705   │       [832]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
706   │       [864]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
707   │       [896]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
708   │       [928]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
709   │       [960]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
710   │       [992]  2 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
711   │     }
712   │     Allocated at {
713   │       #1: 0x1087F0: main (acc.c:37)
714   │     }
715   │   }
716   ├─▼ AP 1.3/7 (2 children) {
717   │     Total:     200 bytes (7.89%, 149.5/Minstr) in 2 blocks (22.22%, 1.5/Minstr), avg size 100 bytes, avg lifetime 350,078 instrs (26.17% of program duration)
718   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
719   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
720   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
721   │     Writes:    400,000 bytes (33.26%, 299,008.86/Minstr), 2,000/byte
722   │     Accesses: {
723   │       [  0]  100000 〃 〃 〃 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
724   │       [ 32]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
725   │       [ 64]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
726   │       [ 96]  - - - - 
727   │     }
728   │     Allocated at {
729   │       #1: 0x1086F1: m1 (acc.c:7)
730   │     }
731   │   }
732   │   ├── AP 1.3.1/2 {
733   │   │     Total:     100 bytes (3.95%, 74.75/Minstr) in 1 blocks (11.11%, 0.75/Minstr), avg size 100 bytes, avg lifetime 350,084 instrs (26.17% of program duration)
734   │   │     Max:       100 bytes in 1 blocks, avg size 100 bytes
735   │   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
736   │   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
737   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
738   │   │     Writes:    200,000 bytes (16.63%, 149,504.43/Minstr), 2,000/byte
739   │   │     Accesses: {
740   │   │       [  0]  50000 〃 〃 〃 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
741   │   │       [ 32]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
742   │   │       [ 64]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
743   │   │       [ 96]  - - - - 
744   │   │     }
745   │   │     Allocated at {
746   │   │       ^1: 0x1086F1: m1 (acc.c:7)
747   │   │       #2: 0x1088C3: main (acc.c:54)
748   │   │     }
749   │   │   }
750   │   └── AP 1.3.2/2 {
751   │         Total:     100 bytes (3.95%, 74.75/Minstr) in 1 blocks (11.11%, 0.75/Minstr), avg size 100 bytes, avg lifetime 350,072 instrs (26.17% of program duration)
752   │         Max:       100 bytes in 1 blocks, avg size 100 bytes
753   │         At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
754   │         At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
755   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
756   │         Writes:    200,000 bytes (16.63%, 149,504.43/Minstr), 2,000/byte
757   │         Accesses: {
758   │           [  0]  50000 〃 〃 〃 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
759   │           [ 32]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
760   │           [ 64]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
761   │           [ 96]  - - - - 
762   │         }
763   │         Allocated at {
764   │           ^1: 0x1086F1: m1 (acc.c:7)
765   │           #2: 0x1088D1: main (acc.c:55)
766   │         }
767   │       }
768   ├─▼ AP 1.4/7 (2 children) {
769   │     Total:     200 bytes (7.89%, 149.5/Minstr) in 2 blocks (22.22%, 1.5/Minstr), avg size 100 bytes, avg lifetime 700,078 instrs (52.33% of program duration)
770   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
771   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
772   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
773   │     Writes:    800,000 bytes (66.52%, 598,017.72/Minstr), 4,000/byte
774   │     Accesses: {
775   │       [  0]  ∞ 〃 〃 〃 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
776   │       [ 32]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
777   │       [ 64]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
778   │       [ 96]  - - - - 
779   │     }
780   │     Allocated at {
781   │       #1: 0x10870B: m2 (acc.c:9)
782   │     }
783   │   }
784   │   ├── AP 1.4.1/2 {
785   │   │     Total:     100 bytes (3.95%, 74.75/Minstr) in 1 blocks (11.11%, 0.75/Minstr), avg size 100 bytes, avg lifetime 700,084 instrs (52.33% of program duration)
786   │   │     Max:       100 bytes in 1 blocks, avg size 100 bytes
787   │   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
788   │   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
789   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
790   │   │     Writes:    400,000 bytes (33.26%, 299,008.86/Minstr), 4,000/byte
791   │   │     Accesses: {
792   │   │       [  0]  ∞ 〃 〃 〃 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
793   │   │       [ 32]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
794   │   │       [ 64]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
795   │   │       [ 96]  - - - - 
796   │   │     }
797   │   │     Allocated at {
798   │   │       ^1: 0x10870B: m2 (acc.c:9)
799   │   │       #2: 0x108921: main (acc.c:64)
800   │   │     }
801   │   │   }
802   │   └── AP 1.4.2/2 {
803   │         Total:     100 bytes (3.95%, 74.75/Minstr) in 1 blocks (11.11%, 0.75/Minstr), avg size 100 bytes, avg lifetime 700,072 instrs (52.33% of program duration)
804   │         Max:       100 bytes in 1 blocks, avg size 100 bytes
805   │         At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
806   │         At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
807   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
808   │         Writes:    400,000 bytes (33.26%, 299,008.86/Minstr), 4,000/byte
809   │         Accesses: {
810   │           [  0]  ∞ 〃 〃 〃 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
811   │           [ 32]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
812   │           [ 64]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
813   │           [ 96]  - - - - 
814   │         }
815   │         Allocated at {
816   │           ^1: 0x10870B: m2 (acc.c:9)
817   │           #2: 0x10892F: main (acc.c:65)
818   │         }
819   │       }
820   ├── AP 1.5/7 {
821   │     Total:     33 bytes (1.3%, 24.67/Minstr) in 1 blocks (11.11%, 0.75/Minstr), avg size 33 bytes, avg lifetime 39 instrs (0% of program duration)
822   │     Max:       33 bytes in 1 blocks, avg size 33 bytes
823   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
824   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
825   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
826   │     Writes:    1 bytes (0%, 0.75/Minstr), 0.03/byte
827   │     Accesses: {
828   │       [  0]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
829   │       [ 32]  1 
830   │     }
831   │     Allocated at {
832   │       #1: 0x1087CB: main (acc.c:32)
833   │     }
834   │   }
835   ├── AP 1.6/7 {
836   │     Total:     32 bytes (1.26%, 23.92/Minstr) in 1 blocks (11.11%, 0.75/Minstr), avg size 32 bytes, avg lifetime 4,751 instrs (0.36% of program duration)
837   │     Max:       32 bytes in 1 blocks, avg size 32 bytes
838   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
839   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
840   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
841   │     Writes:    496 bytes (0.04%, 370.77/Minstr), 15.5/byte
842   │     Accesses: {
843   │       [  0]  - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
844   │     }
845   │     Allocated at {
846   │       #1: 0x10871F: main (acc.c:14)
847   │     }
848   │   }
849   └── AP 1.7/7 {
850         Total:     20 bytes (0.79%, 14.95/Minstr) in 1 blocks (11.11%, 0.75/Minstr), avg size 20 bytes, avg lifetime 106 instrs (0.01% of program duration)
851         Max:       20 bytes in 1 blocks, avg size 20 bytes
852         At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
853         At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
854         Reads:     4 bytes (0.19%, 2.99/Minstr), 0.2/byte
855         Writes:    48 bytes (0%, 35.88/Minstr), 2.4/byte
856         Accesses: {
857           [  0]  2 〃 〃 〃 - - - - 1 〃 〃 〃 - - - - 10 〃 〃 〃 
858         }
859         Allocated at {
860           #1: 0x108771: main (acc.c:23)
861         }
862       }
864 AP significance threshold: at-t-end >= 0 bytes (0%)
866 //---------------------------------------------------------------------------
867     }
868   ]
870 tests.push(acc);
872 //---------------------------------------------------------------------------
873 // big (corresponds to dhat/tests/big.c)
874 //---------------------------------------------------------------------------
876 let big = {
877   name: "big",
878   input:
879 //---------------------------------------------------------------------------
880 {"dhatFileVersion":1
881 ,"cmd":"./big"
882 ,"pid":3902
883 ,"mi":245281,"ei":253354
884 ,"aps":
885  [{"tb":706,"tbk":1,"tli":543
886   ,"mb":706,"mbk":1
887   ,"gb":706,"gbk":1
888   ,"fb":0,"fbk":0
889   ,"rb":0,"wb":0
890   ,"acc":[-706,0]
891   ,"fs":[1,2,3,4,5]
892   }
893  ,{"tb":5,"tbk":1,"tli":7972
894   ,"mb":5,"mbk":1
895   ,"gb":0,"gbk":0
896   ,"fb":5,"fbk":1
897   ,"rb":0,"wb":0
898   ,"acc":[-5,0]
899   ,"fs":[1,2,3,6,7]
900   }
901  ,{"tb":30,"tbk":1,"tli":7910
902   ,"mb":30,"mbk":1
903   ,"gb":0,"gbk":0
904   ,"fb":30,"fbk":1
905   ,"rb":0,"wb":0
906   ,"acc":[-30,0]
907   ,"fs":[1,2,8,9]
908   }
909  ,{"tb":20,"tbk":1,"tli":7857
910   ,"mb":20,"mbk":1
911   ,"gb":0,"gbk":0
912   ,"fb":20,"fbk":1
913   ,"rb":0,"wb":0
914   ,"acc":[-20,0]
915   ,"fs":[1,10,11]
916   }
917  ,{"tb":10,"tbk":1,"tli":7792
918   ,"mb":10,"mbk":1
919   ,"gb":0,"gbk":0
920   ,"fb":10,"fbk":1
921   ,"rb":0,"wb":0
922   ,"acc":[-10,0]
923   ,"fs":[1,12,13,14,15]
924   }
925  ,{"tb":60,"tbk":1,"tli":7709
926   ,"mb":60,"mbk":1
927   ,"gb":0,"gbk":0
928   ,"fb":60,"fbk":1
929   ,"rb":0,"wb":0
930   ,"acc":[-60,0]
931   ,"fs":[16,17,18,19,20,21,22]
932   }
933  ,{"tb":30,"tbk":1,"tli":7622
934   ,"mb":30,"mbk":1
935   ,"gb":0,"gbk":0
936   ,"fb":30,"fbk":1
937   ,"rb":0,"wb":0
938   ,"acc":[-30,0]
939   ,"fs":[16,17,18,23,24,25,26]
940   }
941  ,{"tb":20,"tbk":1,"tli":7528
942   ,"mb":20,"mbk":1
943   ,"gb":0,"gbk":0
944   ,"fb":20,"fbk":1
945   ,"rb":0,"wb":0
946   ,"acc":[-20,0]
947   ,"fs":[16,17,18,23,24,27,28,29]
948   }
949  ,{"tb":7,"tbk":1,"tli":7446
950   ,"mb":7,"mbk":1
951   ,"gb":0,"gbk":0
952   ,"fb":7,"fbk":1
953   ,"rb":0,"wb":0
954   ,"acc":[-7,0]
955   ,"fs":[16,17,18,30,31,32]
956   }
957  ,{"tb":3,"tbk":1,"tli":7375
958   ,"mb":3,"mbk":1
959   ,"gb":0,"gbk":0
960   ,"fb":3,"fbk":1
961   ,"rb":0,"wb":0
962   ,"acc":[-3,0]
963   ,"fs":[16,17,18,33,34]
964   }
965  ,{"tb":30,"tbk":1,"tli":7299
966   ,"mb":30,"mbk":1
967   ,"gb":0,"gbk":0
968   ,"fb":30,"fbk":1
969   ,"rb":0,"wb":0
970   ,"acc":[-30,0]
971   ,"fs":[35,36,37,38,39,40]
972   }
973  ,{"tb":20,"tbk":1,"tli":7249
974   ,"mb":20,"mbk":1
975   ,"gb":0,"gbk":0
976   ,"fb":20,"fbk":1
977   ,"rb":0,"wb":0
978   ,"acc":[-20,0]
979   ,"fs":[41,42]
980   }
981  ,{"tb":19,"tbk":1,"tli":7207
982   ,"mb":19,"mbk":1
983   ,"gb":0,"gbk":0
984   ,"fb":19,"fbk":1
985   ,"rb":0,"wb":0
986   ,"acc":[-19,0]
987   ,"fs":[43,44]
988   }
989  ,{"tb":9,"tbk":1,"tli":7158
990   ,"mb":9,"mbk":1
991   ,"gb":0,"gbk":0
992   ,"fb":9,"fbk":1
993   ,"rb":0,"wb":0
994   ,"acc":[-9,0]
995   ,"fs":[45,46,47]
996   }
997  ,{"tb":8,"tbk":1,"tli":7107
998   ,"mb":8,"mbk":1
999   ,"gb":0,"gbk":0
1000   ,"fb":8,"fbk":1
1001   ,"rb":0,"wb":0
1002   ,"acc":[-8,0]
1003   ,"fs":[45,48,49]
1004   }
1005  ,{"tb":7,"tbk":1,"tli":7056
1006   ,"mb":7,"mbk":1
1007   ,"gb":0,"gbk":0
1008   ,"fb":7,"fbk":1
1009   ,"rb":0,"wb":0
1010   ,"acc":[-7,0]
1011   ,"fs":[45,50,51]
1012   }
1013  ,{"tb":5,"tbk":1,"tli":7005
1014   ,"mb":5,"mbk":1
1015   ,"gb":0,"gbk":0
1016   ,"fb":5,"fbk":1
1017   ,"rb":0,"wb":0
1018   ,"acc":[-5,0]
1019   ,"fs":[45,52,53]
1020   }
1021  ,{"tb":1,"tbk":1,"tli":6954
1022   ,"mb":1,"mbk":1
1023   ,"gb":0,"gbk":0
1024   ,"fb":1,"fbk":1
1025   ,"rb":0,"wb":0
1026   ,"acc":[0]
1027   ,"fs":[45,52,54]
1028   }
1029  ,{"tb":10,"tbk":1,"tli":6917
1030   ,"mb":10,"mbk":1
1031   ,"gb":0,"gbk":0
1032   ,"fb":10,"fbk":1
1033   ,"rb":0,"wb":0
1034   ,"acc":[-10,0]
1035   ,"fs":[55]
1036   }
1038 ,"ftbl":
1039  ["[root]"
1040  ,"0x1086A1: a (big.c:10)"
1041  ,"0x1086BB: b1 (big.c:11)"
1042  ,"0x1086D5: c1 (big.c:12)"
1043  ,"0x1086EF: d1 (big.c:13)"
1044  ,"0x108A43: main (big.c:38)"
1045  ,"0x108709: d2 (big.c:14)"
1046  ,"0x108A5D: main (big.c:41)"
1047  ,"0x108723: c2 (big.c:15)"
1048  ,"0x108A67: main (big.c:42)"
1049  ,"0x10873D: b2 (big.c:16)"
1050  ,"0x108A71: main (big.c:43)"
1051  ,"0x108757: b3 (big.c:17)"
1052  ,"0x108771: e (big.c:17)"
1053  ,"0x10878B: f (big.c:17)"
1054  ,"0x108A7B: main (big.c:44)"
1055  ,"0x1087A5: g (big.c:18)"
1056  ,"0x1087BF: h (big.c:18)"
1057  ,"0x1087D9: i (big.c:18)"
1058  ,"0x1087F3: j2 (big.c:19)"
1059  ,"0x10880D: k (big.c:19)"
1060  ,"0x108827: l (big.c:19)"
1061  ,"0x108A85: main (big.c:45)"
1062  ,"0x108841: j3 (big.c:20)"
1063  ,"0x10885B: m (big.c:20)"
1064  ,"0x108875: n1 (big.c:21)"
1065  ,"0x108A8F: main (big.c:46)"
1066  ,"0x10888F: n2 (big.c:22)"
1067  ,"0x1088A9: o (big.c:22)"
1068  ,"0x108A99: main (big.c:47)"
1069  ,"0x1088C3: p (big.c:23)"
1070  ,"0x1088DD: q (big.c:23)"
1071  ,"0x108AA3: main (big.c:48)"
1072  ,"0x1088F7: r (big.c:24)"
1073  ,"0x108AAD: main (big.c:49)"
1074  ,"0x108911: s1 (big.c:25)"
1075  ,"0x10892B: s2 (big.c:25)"
1076  ,"0x108945: s3 (big.c:25)"
1077  ,"0x10895F: s4 (big.c:25)"
1078  ,"0x108979: s5 (big.c:25)"
1079  ,"0x108AB7: main (big.c:50)"
1080  ,"0x108993: t (big.c:26)"
1081  ,"0x108AC1: main (big.c:51)"
1082  ,"0x1089AD: u (big.c:27)"
1083  ,"0x108ACB: main (big.c:52)"
1084  ,"0x1089C7: v (big.c:28)"
1085  ,"0x1089E1: w (big.c:29)"
1086  ,"0x108AD5: main (big.c:53)"
1087  ,"0x1089FB: x (big.c:30)"
1088  ,"0x108ADF: main (big.c:54)"
1089  ,"0x108A15: y (big.c:31)"
1090  ,"0x108AE9: main (big.c:55)"
1091  ,"0x108A2F: z (big.c:32)"
1092  ,"0x108AF3: main (big.c:56)"
1093  ,"0x108AFD: main (big.c:57)"
1094  ,"0x108B07: main (big.c:60)"
1097 //---------------------------------------------------------------------------
1098   ,
1099   outputs: [
1100     {
1101       label: "Total (bytes)",
1102       expected:
1103 //---------------------------------------------------------------------------
1105 Invocation {
1106   Command: ./big
1107   PID:     3902
1110 Times {
1111   t-gmax: 245,281 instrs (96.81% of program duration)
1112   t-end:  253,354 instrs
1115 ▼ AP 1/1 (7 children) {
1116     Total:     1,000 bytes (100%, 3,947.05/Minstr) in 19 blocks (100%, 74.99/Minstr), avg size 52.63 bytes, avg lifetime 7,037.16 instrs (2.78% of program duration)
1117     At t-gmax: 706 bytes (100%) in 1 blocks (100%), avg size 706 bytes
1118     At t-end:  294 bytes (100%) in 18 blocks (100%), avg size 16.33 bytes
1119     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1120     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1121     Allocated at {
1122       #0: [root]
1123     }
1124   }
1125   ├─▼ AP 1.1/7 (3 children) {
1126   │     Total:     771 bytes (77.1%, 3,043.17/Minstr) in 5 blocks (26.32%, 19.74/Minstr), avg size 154.2 bytes, avg lifetime 6,414.8 instrs (2.53% of program duration)
1127   │     At t-gmax: 706 bytes (100%) in 1 blocks (100%), avg size 706 bytes
1128   │     At t-end:  65 bytes (22.11%) in 4 blocks (22.22%), avg size 16.25 bytes
1129   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1130   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1131   │     Allocated at {
1132   │       #1: 0x1086A1: a (big.c:10)
1133   │     }
1134   │   }
1135   │   ├─▼ AP 1.1.1/3 (2 children) {
1136   │   │     Total:     741 bytes (74.1%, 2,924.76/Minstr) in 3 blocks (15.79%, 11.84/Minstr), avg size 247 bytes, avg lifetime 5,475 instrs (2.16% of program duration)
1137   │   │     At t-gmax: 706 bytes (100%) in 1 blocks (100%), avg size 706 bytes
1138   │   │     At t-end:  35 bytes (11.9%) in 2 blocks (11.11%), avg size 17.5 bytes
1139   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1140   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1141   │   │     Allocated at {
1142   │   │       ^1: 0x1086A1: a (big.c:10)
1143   │   │       #2: 0x1086BB: b1 (big.c:11)
1144   │   │     }
1145   │   │   }
1146   │   │   ├─▼ AP 1.1.1.1/2 (2 children) {
1147   │   │   │     Total:     711 bytes (71.1%, 2,806.35/Minstr) in 2 blocks (10.53%, 7.89/Minstr), avg size 355.5 bytes, avg lifetime 4,257.5 instrs (1.68% of program duration)
1148   │   │   │     At t-gmax: 706 bytes (100%) in 1 blocks (100%), avg size 706 bytes
1149   │   │   │     At t-end:  5 bytes (1.7%) in 1 blocks (5.56%), avg size 5 bytes
1150   │   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1151   │   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1152   │   │   │     Allocated at {
1153   │   │   │       ^1: 0x1086A1: a (big.c:10)
1154   │   │   │       ^2: 0x1086BB: b1 (big.c:11)
1155   │   │   │       #3: 0x1086D5: c1 (big.c:12)
1156   │   │   │     }
1157   │   │   │   }
1158   │   │   │   ├── AP 1.1.1.1.1/2 {
1159   │   │   │   │     Total:     706 bytes (70.6%, 2,786.61/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 706 bytes, avg lifetime 543 instrs (0.21% of program duration)
1160   │   │   │   │     Max:       706 bytes in 1 blocks, avg size 706 bytes
1161   │   │   │   │     At t-gmax: 706 bytes (100%) in 1 blocks (100%), avg size 706 bytes
1162   │   │   │   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1163   │   │   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1164   │   │   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1165   │   │   │   │     Accesses: {
1166   │   │   │   │       [  0]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1167   │   │   │   │       [ 32]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1168   │   │   │   │       [ 64]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1169   │   │   │   │       [ 96]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1170   │   │   │   │       [128]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1171   │   │   │   │       [160]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1172   │   │   │   │       [192]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1173   │   │   │   │       [224]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1174   │   │   │   │       [256]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1175   │   │   │   │       [288]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1176   │   │   │   │       [320]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1177   │   │   │   │       [352]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1178   │   │   │   │       [384]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1179   │   │   │   │       [416]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1180   │   │   │   │       [448]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1181   │   │   │   │       [480]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1182   │   │   │   │       [512]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1183   │   │   │   │       [544]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1184   │   │   │   │       [576]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1185   │   │   │   │       [608]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1186   │   │   │   │       [640]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1187   │   │   │   │       [672]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1188   │   │   │   │       [704]  - - 
1189   │   │   │   │     }
1190   │   │   │   │     Allocated at {
1191   │   │   │   │       ^1: 0x1086A1: a (big.c:10)
1192   │   │   │   │       ^2: 0x1086BB: b1 (big.c:11)
1193   │   │   │   │       ^3: 0x1086D5: c1 (big.c:12)
1194   │   │   │   │       #4: 0x1086EF: d1 (big.c:13)
1195   │   │   │   │       #5: 0x108A43: main (big.c:38)
1196   │   │   │   │     }
1197   │   │   │   │   }
1198   │   │   │   └── AP 1.1.1.1.2/2 {
1199   │   │   │         Total:     5 bytes (0.5%, 19.74/Minstr)
1200   │   │   │         Allocated at {
1201   │   │   │           [1 insignificant]
1202   │   │   │         }
1203   │   │   │       }
1204   │   │   └── AP 1.1.1.2/2 {
1205   │   │         Total:     30 bytes (3%, 118.41/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 30 bytes, avg lifetime 7,910 instrs (3.12% of program duration)
1206   │   │         Max:       30 bytes in 1 blocks, avg size 30 bytes
1207   │   │         At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1208   │   │         At t-end:  30 bytes (10.2%) in 1 blocks (5.56%), avg size 30 bytes
1209   │   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
1210   │   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
1211   │   │         Accesses: {
1212   │   │           [  0]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1213   │   │         }
1214   │   │         Allocated at {
1215   │   │           ^1: 0x1086A1: a (big.c:10)
1216   │   │           ^2: 0x1086BB: b1 (big.c:11)
1217   │   │           #3: 0x108723: c2 (big.c:15)
1218   │   │           #4: 0x108A67: main (big.c:42)
1219   │   │         }
1220   │   │       }
1221   │   ├── AP 1.1.2/3 {
1222   │   │     Total:     20 bytes (2%, 78.94/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 20 bytes, avg lifetime 7,857 instrs (3.1% of program duration)
1223   │   │     Max:       20 bytes in 1 blocks, avg size 20 bytes
1224   │   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1225   │   │     At t-end:  20 bytes (6.8%) in 1 blocks (5.56%), avg size 20 bytes
1226   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1227   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1228   │   │     Accesses: {
1229   │   │       [  0]  - - - - - - - - - - - - - - - - - - - - 
1230   │   │     }
1231   │   │     Allocated at {
1232   │   │       ^1: 0x1086A1: a (big.c:10)
1233   │   │       #2: 0x10873D: b2 (big.c:16)
1234   │   │       #3: 0x108A71: main (big.c:43)
1235   │   │     }
1236   │   │   }
1237   │   └── AP 1.1.3/3 {
1238   │         Total:     10 bytes (1%, 39.47/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 10 bytes, avg lifetime 7,792 instrs (3.08% of program duration)
1239   │         Max:       10 bytes in 1 blocks, avg size 10 bytes
1240   │         At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1241   │         At t-end:  10 bytes (3.4%) in 1 blocks (5.56%), avg size 10 bytes
1242   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
1243   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
1244   │         Accesses: {
1245   │           [  0]  - - - - - - - - - - 
1246   │         }
1247   │         Allocated at {
1248   │           ^1: 0x1086A1: a (big.c:10)
1249   │           #2: 0x108757: b3 (big.c:17)
1250   │           #3: 0x108771: e (big.c:17)
1251   │           #4: 0x10878B: f (big.c:17)
1252   │           #5: 0x108A7B: main (big.c:44)
1253   │         }
1254   │       }
1255   ├─▼ AP 1.2/7 (3 children) {
1256   │     Total:     120 bytes (12%, 473.65/Minstr) in 5 blocks (26.32%, 19.74/Minstr), avg size 24 bytes, avg lifetime 7,536 instrs (2.97% of program duration)
1257   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1258   │     At t-end:  120 bytes (40.82%) in 5 blocks (27.78%), avg size 24 bytes
1259   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1260   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1261   │     Allocated at {
1262   │       #1: 0x1087A5: g (big.c:18)
1263   │       #2: 0x1087BF: h (big.c:18)
1264   │       #3: 0x1087D9: i (big.c:18)
1265   │     }
1266   │   }
1267   │   ├── AP 1.2.1/3 {
1268   │   │     Total:     60 bytes (6%, 236.82/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 60 bytes, avg lifetime 7,709 instrs (3.04% of program duration)
1269   │   │     Max:       60 bytes in 1 blocks, avg size 60 bytes
1270   │   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1271   │   │     At t-end:  60 bytes (20.41%) in 1 blocks (5.56%), avg size 60 bytes
1272   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1273   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1274   │   │     Accesses: {
1275   │   │       [  0]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1276   │   │       [ 32]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1277   │   │     }
1278   │   │     Allocated at {
1279   │   │       ^1: 0x1087A5: g (big.c:18)
1280   │   │       ^2: 0x1087BF: h (big.c:18)
1281   │   │       ^3: 0x1087D9: i (big.c:18)
1282   │   │       #4: 0x1087F3: j2 (big.c:19)
1283   │   │       #5: 0x10880D: k (big.c:19)
1284   │   │       #6: 0x108827: l (big.c:19)
1285   │   │       #7: 0x108A85: main (big.c:45)
1286   │   │     }
1287   │   │   }
1288   │   ├─▼ AP 1.2.2/3 (2 children) {
1289   │   │     Total:     50 bytes (5%, 197.35/Minstr) in 2 blocks (10.53%, 7.89/Minstr), avg size 25 bytes, avg lifetime 7,575 instrs (2.99% of program duration)
1290   │   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1291   │   │     At t-end:  50 bytes (17.01%) in 2 blocks (11.11%), avg size 25 bytes
1292   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1293   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1294   │   │     Allocated at {
1295   │   │       ^1: 0x1087A5: g (big.c:18)
1296   │   │       ^2: 0x1087BF: h (big.c:18)
1297   │   │       ^3: 0x1087D9: i (big.c:18)
1298   │   │       #4: 0x108841: j3 (big.c:20)
1299   │   │       #5: 0x10885B: m (big.c:20)
1300   │   │     }
1301   │   │   }
1302   │   │   ├── AP 1.2.2.1/2 {
1303   │   │   │     Total:     30 bytes (3%, 118.41/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 30 bytes, avg lifetime 7,622 instrs (3.01% of program duration)
1304   │   │   │     Max:       30 bytes in 1 blocks, avg size 30 bytes
1305   │   │   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1306   │   │   │     At t-end:  30 bytes (10.2%) in 1 blocks (5.56%), avg size 30 bytes
1307   │   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1308   │   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1309   │   │   │     Accesses: {
1310   │   │   │       [  0]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1311   │   │   │     }
1312   │   │   │     Allocated at {
1313   │   │   │       ^1: 0x1087A5: g (big.c:18)
1314   │   │   │       ^2: 0x1087BF: h (big.c:18)
1315   │   │   │       ^3: 0x1087D9: i (big.c:18)
1316   │   │   │       ^4: 0x108841: j3 (big.c:20)
1317   │   │   │       ^5: 0x10885B: m (big.c:20)
1318   │   │   │       #6: 0x108875: n1 (big.c:21)
1319   │   │   │       #7: 0x108A8F: main (big.c:46)
1320   │   │   │     }
1321   │   │   │   }
1322   │   │   └── AP 1.2.2.2/2 {
1323   │   │         Total:     20 bytes (2%, 78.94/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 20 bytes, avg lifetime 7,528 instrs (2.97% of program duration)
1324   │   │         Max:       20 bytes in 1 blocks, avg size 20 bytes
1325   │   │         At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1326   │   │         At t-end:  20 bytes (6.8%) in 1 blocks (5.56%), avg size 20 bytes
1327   │   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
1328   │   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
1329   │   │         Accesses: {
1330   │   │           [  0]  - - - - - - - - - - - - - - - - - - - - 
1331   │   │         }
1332   │   │         Allocated at {
1333   │   │           ^1: 0x1087A5: g (big.c:18)
1334   │   │           ^2: 0x1087BF: h (big.c:18)
1335   │   │           ^3: 0x1087D9: i (big.c:18)
1336   │   │           ^4: 0x108841: j3 (big.c:20)
1337   │   │           ^5: 0x10885B: m (big.c:20)
1338   │   │           #6: 0x10888F: n2 (big.c:22)
1339   │   │           #7: 0x1088A9: o (big.c:22)
1340   │   │           #8: 0x108A99: main (big.c:47)
1341   │   │         }
1342   │   │       }
1343   │   └── AP 1.2.3/3 {
1344   │         Total:     10 bytes (1%, 39.47/Minstr)
1345   │         Allocated at {
1346   │           [2 insignificant]
1347   │         }
1348   │       }
1349   ├── AP 1.3/7 {
1350   │     Total:     30 bytes (3%, 118.41/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 30 bytes, avg lifetime 7,299 instrs (2.88% of program duration)
1351   │     Max:       30 bytes in 1 blocks, avg size 30 bytes
1352   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1353   │     At t-end:  30 bytes (10.2%) in 1 blocks (5.56%), avg size 30 bytes
1354   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1355   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1356   │     Accesses: {
1357   │       [  0]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1358   │     }
1359   │     Allocated at {
1360   │       #1: 0x108911: s1 (big.c:25)
1361   │       #2: 0x10892B: s2 (big.c:25)
1362   │       #3: 0x108945: s3 (big.c:25)
1363   │       #4: 0x10895F: s4 (big.c:25)
1364   │       #5: 0x108979: s5 (big.c:25)
1365   │       #6: 0x108AB7: main (big.c:50)
1366   │     }
1367   │   }
1368   ├─▼ AP 1.4/7 (1 children) {
1369   │     Total:     30 bytes (3%, 118.41/Minstr) in 5 blocks (26.32%, 19.74/Minstr), avg size 6 bytes, avg lifetime 7,056 instrs (2.79% of program duration)
1370   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1371   │     At t-end:  30 bytes (10.2%) in 5 blocks (27.78%), avg size 6 bytes
1372   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1373   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1374   │     Allocated at {
1375   │       #1: 0x1089C7: v (big.c:28)
1376   │     }
1377   │   }
1378   │   └── AP 1.4.1/1 {
1379   │         Total:     30 bytes (3%, 118.41/Minstr)
1380   │         Allocated at {
1381   │           [4 insignificant]
1382   │         }
1383   │       }
1384   ├── AP 1.5/7 {
1385   │     Total:     20 bytes (2%, 78.94/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 20 bytes, avg lifetime 7,249 instrs (2.86% of program duration)
1386   │     Max:       20 bytes in 1 blocks, avg size 20 bytes
1387   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1388   │     At t-end:  20 bytes (6.8%) in 1 blocks (5.56%), avg size 20 bytes
1389   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1390   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1391   │     Accesses: {
1392   │       [  0]  - - - - - - - - - - - - - - - - - - - - 
1393   │     }
1394   │     Allocated at {
1395   │       #1: 0x108993: t (big.c:26)
1396   │       #2: 0x108AC1: main (big.c:51)
1397   │     }
1398   │   }
1399   ├── AP 1.6/7 {
1400   │     Total:     19 bytes (1.9%, 74.99/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 19 bytes, avg lifetime 7,207 instrs (2.84% of program duration)
1401   │     Max:       19 bytes in 1 blocks, avg size 19 bytes
1402   │     At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1403   │     At t-end:  19 bytes (6.46%) in 1 blocks (5.56%), avg size 19 bytes
1404   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1405   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1406   │     Accesses: {
1407   │       [  0]  - - - - - - - - - - - - - - - - - - - 
1408   │     }
1409   │     Allocated at {
1410   │       #1: 0x1089AD: u (big.c:27)
1411   │       #2: 0x108ACB: main (big.c:52)
1412   │     }
1413   │   }
1414   └── AP 1.7/7 {
1415         Total:     10 bytes (1%, 39.47/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 10 bytes, avg lifetime 6,917 instrs (2.73% of program duration)
1416         Max:       10 bytes in 1 blocks, avg size 10 bytes
1417         At t-gmax: 0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1418         At t-end:  10 bytes (3.4%) in 1 blocks (5.56%), avg size 10 bytes
1419         Reads:     0 bytes (0%, 0/Minstr), 0/byte
1420         Writes:    0 bytes (0%, 0/Minstr), 0/byte
1421         Accesses: {
1422           [  0]  - - - - - - - - - - 
1423         }
1424         Allocated at {
1425           #1: 0x108B07: main (big.c:60)
1426         }
1427       }
1429 AP significance threshold: total >= 10 bytes (1%)
1431 //---------------------------------------------------------------------------
1432     },
1433     {
1434       label: "Total (blocks), short-lived",
1435       expected:
1436 //---------------------------------------------------------------------------
1438 Invocation {
1439   Command: ./big
1440   PID:     3902
1443 Times {
1444   t-gmax: 245,281 instrs (96.81% of program duration)
1445   t-end:  253,354 instrs
1448 ▼ AP 1/1 (1 children) {
1449     Total:     19 blocks (100%, 74.99/Minstr), avg lifetime 7,037.16 instrs (2.78% of program duration)
1450     Allocated at {
1451       #0: [root]
1452     }
1453   }
1454   └── AP 1.1/1 {
1455         Total:     19 blocks (100%, 74.99/Minstr), avg lifetime 7,037.16 instrs (2.78% of program duration)
1456         Allocated at {
1457           [7 insignificant]
1458         }
1459       }
1461 AP significance threshold: (total >= 0.1 blocks (0.5%)) && (total avg lifetime <= 500 instrs)
1463 //---------------------------------------------------------------------------
1464     },
1465     {
1466       label: "At t-gmax (bytes)",
1467       expected:
1468 //---------------------------------------------------------------------------
1470 Invocation {
1471   Command: ./big
1472   PID:     3902
1475 Times {
1476   t-gmax: 245,281 instrs (96.81% of program duration)
1477   t-end:  253,354 instrs
1480 ▼ AP 1/1 (2 children) {
1481     Total:     1,000 bytes (100%, 3,947.05/Minstr) in 19 blocks (100%, 74.99/Minstr), avg size 52.63 bytes, avg lifetime 7,037.16 instrs (2.78% of program duration)
1482     At t-gmax: 706 bytes (100%) in 1 blocks (100%), avg size 706 bytes
1483     At t-end:  294 bytes (100%) in 18 blocks (100%), avg size 16.33 bytes
1484     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1485     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1486     Allocated at {
1487       #0: [root]
1488     }
1489   }
1490   ├─▼ AP 1.1/2 (2 children) {
1491   │     Total:     771 bytes (77.1%, 3,043.17/Minstr) in 5 blocks (26.32%, 19.74/Minstr), avg size 154.2 bytes, avg lifetime 6,414.8 instrs (2.53% of program duration)
1492   │     At t-gmax: 706 bytes (100%) in 1 blocks (100%), avg size 706 bytes
1493   │     At t-end:  65 bytes (22.11%) in 4 blocks (22.22%), avg size 16.25 bytes
1494   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1495   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1496   │     Allocated at {
1497   │       #1: 0x1086A1: a (big.c:10)
1498   │     }
1499   │   }
1500   │   ├─▼ AP 1.1.1/2 (2 children) {
1501   │   │     Total:     741 bytes (74.1%, 2,924.76/Minstr) in 3 blocks (15.79%, 11.84/Minstr), avg size 247 bytes, avg lifetime 5,475 instrs (2.16% of program duration)
1502   │   │     At t-gmax: 706 bytes (100%) in 1 blocks (100%), avg size 706 bytes
1503   │   │     At t-end:  35 bytes (11.9%) in 2 blocks (11.11%), avg size 17.5 bytes
1504   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1505   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1506   │   │     Allocated at {
1507   │   │       ^1: 0x1086A1: a (big.c:10)
1508   │   │       #2: 0x1086BB: b1 (big.c:11)
1509   │   │     }
1510   │   │   }
1511   │   │   ├─▼ AP 1.1.1.1/2 (2 children) {
1512   │   │   │     Total:     711 bytes (71.1%, 2,806.35/Minstr) in 2 blocks (10.53%, 7.89/Minstr), avg size 355.5 bytes, avg lifetime 4,257.5 instrs (1.68% of program duration)
1513   │   │   │     At t-gmax: 706 bytes (100%) in 1 blocks (100%), avg size 706 bytes
1514   │   │   │     At t-end:  5 bytes (1.7%) in 1 blocks (5.56%), avg size 5 bytes
1515   │   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1516   │   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1517   │   │   │     Allocated at {
1518   │   │   │       ^1: 0x1086A1: a (big.c:10)
1519   │   │   │       ^2: 0x1086BB: b1 (big.c:11)
1520   │   │   │       #3: 0x1086D5: c1 (big.c:12)
1521   │   │   │     }
1522   │   │   │   }
1523   │   │   │   ├── AP 1.1.1.1.1/2 {
1524   │   │   │   │     Total:     706 bytes (70.6%, 2,786.61/Minstr) in 1 blocks (5.26%, 3.95/Minstr), avg size 706 bytes, avg lifetime 543 instrs (0.21% of program duration)
1525   │   │   │   │     Max:       706 bytes in 1 blocks, avg size 706 bytes
1526   │   │   │   │     At t-gmax: 706 bytes (100%) in 1 blocks (100%), avg size 706 bytes
1527   │   │   │   │     At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
1528   │   │   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1529   │   │   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1530   │   │   │   │     Accesses: {
1531   │   │   │   │       [  0]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1532   │   │   │   │       [ 32]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1533   │   │   │   │       [ 64]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1534   │   │   │   │       [ 96]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1535   │   │   │   │       [128]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1536   │   │   │   │       [160]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1537   │   │   │   │       [192]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1538   │   │   │   │       [224]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1539   │   │   │   │       [256]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1540   │   │   │   │       [288]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1541   │   │   │   │       [320]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1542   │   │   │   │       [352]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1543   │   │   │   │       [384]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1544   │   │   │   │       [416]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1545   │   │   │   │       [448]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1546   │   │   │   │       [480]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1547   │   │   │   │       [512]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1548   │   │   │   │       [544]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1549   │   │   │   │       [576]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1550   │   │   │   │       [608]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1551   │   │   │   │       [640]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1552   │   │   │   │       [672]  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1553   │   │   │   │       [704]  - - 
1554   │   │   │   │     }
1555   │   │   │   │     Allocated at {
1556   │   │   │   │       ^1: 0x1086A1: a (big.c:10)
1557   │   │   │   │       ^2: 0x1086BB: b1 (big.c:11)
1558   │   │   │   │       ^3: 0x1086D5: c1 (big.c:12)
1559   │   │   │   │       #4: 0x1086EF: d1 (big.c:13)
1560   │   │   │   │       #5: 0x108A43: main (big.c:38)
1561   │   │   │   │     }
1562   │   │   │   │   }
1563   │   │   │   └── AP 1.1.1.1.2/2 {
1564   │   │   │         At t-gmax: 0 bytes (0%)
1565   │   │   │         Allocated at {
1566   │   │   │           [1 insignificant]
1567   │   │   │         }
1568   │   │   │       }
1569   │   │   └── AP 1.1.1.2/2 {
1570   │   │         At t-gmax: 0 bytes (0%)
1571   │   │         Allocated at {
1572   │   │           [1 insignificant]
1573   │   │         }
1574   │   │       }
1575   │   └── AP 1.1.2/2 {
1576   │         At t-gmax: 0 bytes (0%)
1577   │         Allocated at {
1578   │           [2 insignificant]
1579   │         }
1580   │       }
1581   └── AP 1.2/2 {
1582         At t-gmax: 0 bytes (0%)
1583         Allocated at {
1584           [6 insignificant]
1585         }
1586       }
1588 AP significance threshold: at-t-gmax >= 7.06 bytes (1%)
1590 //---------------------------------------------------------------------------
1591     }
1592   ]
1594 tests.push(big);
1596 //---------------------------------------------------------------------------
1597 // sig (corresponds to dhat/tests/sig.c)
1598 //---------------------------------------------------------------------------
1600 let sig = {
1601   name: "sig",
1602   input:
1603 //---------------------------------------------------------------------------
1604 {"dhatFileVersion":1
1605 ,"cmd":"./sig"
1606 ,"pid":21476
1607 ,"mi":1311861,"ei":1318783
1608 ,"aps":
1609  [{"tb":11,"tbk":1,"tli":1075941
1610   ,"mb":11,"mbk":1
1611   ,"gb":11,"gbk":1
1612   ,"fb":11,"fbk":1
1613   ,"rb":11,"wb":16489
1614   ,"acc":[-11,1500]
1615   ,"fs":[1,2]
1616   }
1617  ,{"tb":10,"tbk":1,"tli":880845
1618   ,"mb":10,"mbk":1
1619   ,"gb":10,"gbk":1
1620   ,"fb":10,"fbk":1
1621   ,"rb":10,"wb":14990
1622   ,"acc":[-10,1500]
1623   ,"fs":[1,3,4]
1624   }
1625  ,{"tb":5,"tbk":1,"tli":702250
1626   ,"mb":5,"mbk":1
1627   ,"gb":5,"gbk":1
1628   ,"fb":5,"fbk":1
1629   ,"rb":5,"wb":7495
1630   ,"acc":[-5,1500]
1631   ,"fs":[1,5,6]
1632   }
1633  ,{"tb":4,"tbk":1,"tli":606170
1634   ,"mb":4,"mbk":1
1635   ,"gb":4,"gbk":1
1636   ,"fb":4,"fbk":1
1637   ,"rb":4,"wb":5996
1638   ,"acc":[-4,1500]
1639   ,"fs":[1,5,7]
1640   }
1641  ,{"tb":10,"tbk":1,"tli":510097
1642   ,"mb":10,"mbk":1
1643   ,"gb":10,"gbk":1
1644   ,"fb":10,"fbk":1
1645   ,"rb":10,"wb":14990
1646   ,"acc":[-10,1500]
1647   ,"fs":[8,9]
1648   }
1649  ,{"tb":9,"tbk":1,"tli":331504
1650   ,"mb":9,"mbk":1
1651   ,"gb":9,"gbk":1
1652   ,"fb":9,"fbk":1
1653   ,"rb":9,"wb":13491
1654   ,"acc":[-9,1500]
1655   ,"fs":[8,10,11]
1656   }
1657  ,{"tb":5,"tbk":1,"tli":169412
1658   ,"mb":5,"mbk":1
1659   ,"gb":5,"gbk":1
1660   ,"fb":5,"fbk":1
1661   ,"rb":0,"wb":0
1662   ,"acc":[-5,0]
1663   ,"fs":[8,12,13]
1664   }
1665  ,{"tb":3,"tbk":1,"tli":169360
1666   ,"mb":3,"mbk":1
1667   ,"gb":3,"gbk":1
1668   ,"fb":3,"fbk":1
1669   ,"rb":0,"wb":0
1670   ,"acc":[-3,0]
1671   ,"fs":[8,12,14]
1672   }
1673  ,{"tb":9,"tbk":1,"tli":169315
1674   ,"mb":9,"mbk":1
1675   ,"gb":9,"gbk":1
1676   ,"fb":9,"fbk":1
1677   ,"rb":9,"wb":13491
1678   ,"acc":[-9,1500]
1679   ,"fs":[15,16]
1680   }
1681  ,{"tb":8,"tbk":1,"tli":7225
1682   ,"mb":8,"mbk":1
1683   ,"gb":8,"gbk":1
1684   ,"fb":8,"fbk":1
1685   ,"rb":0,"wb":0
1686   ,"acc":[-8,0]
1687   ,"fs":[15,17,18]
1688   }
1689  ,{"tb":4,"tbk":1,"tli":7173
1690   ,"mb":4,"mbk":1
1691   ,"gb":4,"gbk":1
1692   ,"fb":4,"fbk":1
1693   ,"rb":0,"wb":0
1694   ,"acc":[-4,0]
1695   ,"fs":[15,19,20]
1696   }
1697  ,{"tb":3,"tbk":1,"tli":7121
1698   ,"mb":3,"mbk":1
1699   ,"gb":3,"gbk":1
1700   ,"fb":3,"fbk":1
1701   ,"rb":0,"wb":0
1702   ,"acc":[-3,0]
1703   ,"fs":[15,19,21]
1704   }
1705  ,{"tb":8,"tbk":1,"tli":7076
1706   ,"mb":8,"mbk":1
1707   ,"gb":8,"gbk":1
1708   ,"fb":8,"fbk":1
1709   ,"rb":0,"wb":0
1710   ,"acc":[-8,0]
1711   ,"fs":[22,23]
1712   }
1713  ,{"tb":7,"tbk":1,"tli":7026
1714   ,"mb":7,"mbk":1
1715   ,"gb":7,"gbk":1
1716   ,"fb":7,"fbk":1
1717   ,"rb":0,"wb":0
1718   ,"acc":[-7,0]
1719   ,"fs":[22,24,25]
1720   }
1721  ,{"tb":4,"tbk":1,"tli":6974
1722   ,"mb":4,"mbk":1
1723   ,"gb":4,"gbk":1
1724   ,"fb":4,"fbk":1
1725   ,"rb":0,"wb":0
1726   ,"acc":[-4,0]
1727   ,"fs":[22,26,27]
1728   }
1729  ,{"tb":2,"tbk":1,"tli":6922
1730   ,"mb":2,"mbk":1
1731   ,"gb":2,"gbk":1
1732   ,"fb":2,"fbk":1
1733   ,"rb":0,"wb":0
1734   ,"acc":[-2,0]
1735   ,"fs":[22,26,28]
1736   }
1738 ,"ftbl":
1739  ["[root]"
1740  ,"0x108681: am (sig.c:9)"
1741  ,"0x10883C: main (sig.c:57)"
1742  ,"0x10869B: a2 (sig.c:11)"
1743  ,"0x10885B: main (sig.c:58)"
1744  ,"0x1086B5: a3 (sig.c:12)"
1745  ,"0x10887A: main (sig.c:59)"
1746  ,"0x108899: main (sig.c:60)"
1747  ,"0x1086CF: bm (sig.c:15)"
1748  ,"0x1088B8: main (sig.c:62)"
1749  ,"0x1086E9: b2 (sig.c:17)"
1750  ,"0x1088D7: main (sig.c:63)"
1751  ,"0x108703: b3 (sig.c:18)"
1752  ,"0x1088F6: main (sig.c:64)"
1753  ,"0x108904: main (sig.c:65)"
1754  ,"0x10871D: cm (sig.c:21)"
1755  ,"0x108912: main (sig.c:67)"
1756  ,"0x108737: c2 (sig.c:23)"
1757  ,"0x108931: main (sig.c:68)"
1758  ,"0x108751: c3 (sig.c:24)"
1759  ,"0x10893F: main (sig.c:69)"
1760  ,"0x10894D: main (sig.c:70)"
1761  ,"0x10876B: dm (sig.c:27)"
1762  ,"0x10895B: main (sig.c:72)"
1763  ,"0x108785: d2 (sig.c:29)"
1764  ,"0x108969: main (sig.c:73)"
1765  ,"0x10879F: d3 (sig.c:30)"
1766  ,"0x108977: main (sig.c:74)"
1767  ,"0x108985: main (sig.c:75)"
1770 //---------------------------------------------------------------------------
1771   ,
1772   outputs: [
1773     {
1774       label: "Total (bytes), zero reads or zero writes",
1775       expected:
1776 //---------------------------------------------------------------------------
1778 Invocation {
1779   Command: ./sig
1780   PID:     21476
1783 Times {
1784   t-gmax: 1,311,861 instrs (99.48% of program duration)
1785   t-end:  1,318,783 instrs
1788 ▼ AP 1/1 (4 children) {
1789     Total:     102 bytes (100%, 77.34/Minstr)
1790     Reads:     58 bytes (100%, 43.98/Minstr)
1791     Writes:    86,942 bytes (100%, 65,925.93/Minstr)
1792     Allocated at {
1793       #0: [root]
1794     }
1795   }
1796   ├── AP 1.1/4 {
1797   │     Total:     30 bytes (29.41%, 22.75/Minstr)
1798   │     Reads:     30 bytes (51.72%, 22.75/Minstr)
1799   │     Writes:    44,970 bytes (51.72%, 34,099.62/Minstr)
1800   │     Allocated at {
1801   │       [1 insignificant]
1802   │     }
1803   │   }
1804   ├─▼ AP 1.2/4 (2 children) {
1805   │     Total:     27 bytes (26.47%, 20.47/Minstr)
1806   │     Reads:     19 bytes (32.76%, 14.41/Minstr)
1807   │     Writes:    28,481 bytes (32.76%, 21,596.43/Minstr)
1808   │     Allocated at {
1809   │       #1: 0x1086CF: bm (sig.c:15)
1810   │     }
1811   │   }
1812   │   ├── AP 1.2.1/2 {
1813   │   │     Total:     19 bytes (18.63%, 14.41/Minstr)
1814   │   │     Reads:     19 bytes (32.76%, 14.41/Minstr)
1815   │   │     Writes:    28,481 bytes (32.76%, 21,596.43/Minstr)
1816   │   │     Allocated at {
1817   │   │       [2 insignificant]
1818   │   │     }
1819   │   │   }
1820   │   └─▼ AP 1.2.2/2 (2 children) {
1821   │         Total:     8 bytes (7.84%, 6.07/Minstr) in 2 blocks (12.5%, 1.52/Minstr), avg size 4 bytes, avg lifetime 169,386 instrs (12.84% of program duration)
1822   │         At t-gmax: 8 bytes (7.84%) in 2 blocks (12.5%), avg size 4 bytes
1823   │         At t-end:  8 bytes (7.84%) in 2 blocks (12.5%), avg size 4 bytes
1824   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
1825   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
1826   │         Allocated at {
1827   │           ^1: 0x1086CF: bm (sig.c:15)
1828   │           #2: 0x108703: b3 (sig.c:18)
1829   │         }
1830   │       }
1831   │       ├── AP 1.2.2.1/2 {
1832   │       │     Total:     5 bytes (4.9%, 3.79/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 5 bytes, avg lifetime 169,412 instrs (12.85% of program duration)
1833   │       │     Max:       5 bytes in 1 blocks, avg size 5 bytes
1834   │       │     At t-gmax: 5 bytes (4.9%) in 1 blocks (6.25%), avg size 5 bytes
1835   │       │     At t-end:  5 bytes (4.9%) in 1 blocks (6.25%), avg size 5 bytes
1836   │       │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1837   │       │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1838   │       │     Accesses: {
1839   │       │       [  0]  - - - - - 
1840   │       │     }
1841   │       │     Allocated at {
1842   │       │       ^1: 0x1086CF: bm (sig.c:15)
1843   │       │       ^2: 0x108703: b3 (sig.c:18)
1844   │       │       #3: 0x1088F6: main (sig.c:64)
1845   │       │     }
1846   │       │   }
1847   │       └── AP 1.2.2.2/2 {
1848   │             Total:     3 bytes (2.94%, 2.27/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 3 bytes, avg lifetime 169,360 instrs (12.84% of program duration)
1849   │             Max:       3 bytes in 1 blocks, avg size 3 bytes
1850   │             At t-gmax: 3 bytes (2.94%) in 1 blocks (6.25%), avg size 3 bytes
1851   │             At t-end:  3 bytes (2.94%) in 1 blocks (6.25%), avg size 3 bytes
1852   │             Reads:     0 bytes (0%, 0/Minstr), 0/byte
1853   │             Writes:    0 bytes (0%, 0/Minstr), 0/byte
1854   │             Accesses: {
1855   │               [  0]  - - - 
1856   │             }
1857   │             Allocated at {
1858   │               ^1: 0x1086CF: bm (sig.c:15)
1859   │               ^2: 0x108703: b3 (sig.c:18)
1860   │               #3: 0x108904: main (sig.c:65)
1861   │             }
1862   │           }
1863   ├─▼ AP 1.3/4 (3 children) {
1864   │     Total:     24 bytes (23.53%, 18.2/Minstr)
1865   │     Reads:     9 bytes (15.52%, 6.82/Minstr)
1866   │     Writes:    13,491 bytes (15.52%, 10,229.89/Minstr)
1867   │     Allocated at {
1868   │       #1: 0x10871D: cm (sig.c:21)
1869   │     }
1870   │   }
1871   │   ├── AP 1.3.1/3 {
1872   │   │     Total:     9 bytes (8.82%, 6.82/Minstr)
1873   │   │     Reads:     9 bytes (15.52%, 6.82/Minstr)
1874   │   │     Writes:    13,491 bytes (15.52%, 10,229.89/Minstr)
1875   │   │     Allocated at {
1876   │   │       [1 insignificant]
1877   │   │     }
1878   │   │   }
1879   │   ├── AP 1.3.2/3 {
1880   │   │     Total:     8 bytes (7.84%, 6.07/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 8 bytes, avg lifetime 7,225 instrs (0.55% of program duration)
1881   │   │     Max:       8 bytes in 1 blocks, avg size 8 bytes
1882   │   │     At t-gmax: 8 bytes (7.84%) in 1 blocks (6.25%), avg size 8 bytes
1883   │   │     At t-end:  8 bytes (7.84%) in 1 blocks (6.25%), avg size 8 bytes
1884   │   │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1885   │   │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1886   │   │     Accesses: {
1887   │   │       [  0]  - - - - - - - - 
1888   │   │     }
1889   │   │     Allocated at {
1890   │   │       ^1: 0x10871D: cm (sig.c:21)
1891   │   │       #2: 0x108737: c2 (sig.c:23)
1892   │   │       #3: 0x108931: main (sig.c:68)
1893   │   │     }
1894   │   │   }
1895   │   └─▼ AP 1.3.3/3 (2 children) {
1896   │         Total:     7 bytes (6.86%, 5.31/Minstr) in 2 blocks (12.5%, 1.52/Minstr), avg size 3.5 bytes, avg lifetime 7,147 instrs (0.54% of program duration)
1897   │         At t-gmax: 7 bytes (6.86%) in 2 blocks (12.5%), avg size 3.5 bytes
1898   │         At t-end:  7 bytes (6.86%) in 2 blocks (12.5%), avg size 3.5 bytes
1899   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
1900   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
1901   │         Allocated at {
1902   │           ^1: 0x10871D: cm (sig.c:21)
1903   │           #2: 0x108751: c3 (sig.c:24)
1904   │         }
1905   │       }
1906   │       ├── AP 1.3.3.1/2 {
1907   │       │     Total:     4 bytes (3.92%, 3.03/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 4 bytes, avg lifetime 7,173 instrs (0.54% of program duration)
1908   │       │     Max:       4 bytes in 1 blocks, avg size 4 bytes
1909   │       │     At t-gmax: 4 bytes (3.92%) in 1 blocks (6.25%), avg size 4 bytes
1910   │       │     At t-end:  4 bytes (3.92%) in 1 blocks (6.25%), avg size 4 bytes
1911   │       │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1912   │       │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1913   │       │     Accesses: {
1914   │       │       [  0]  - - - - 
1915   │       │     }
1916   │       │     Allocated at {
1917   │       │       ^1: 0x10871D: cm (sig.c:21)
1918   │       │       ^2: 0x108751: c3 (sig.c:24)
1919   │       │       #3: 0x10893F: main (sig.c:69)
1920   │       │     }
1921   │       │   }
1922   │       └── AP 1.3.3.2/2 {
1923   │             Total:     3 bytes (2.94%, 2.27/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 3 bytes, avg lifetime 7,121 instrs (0.54% of program duration)
1924   │             Max:       3 bytes in 1 blocks, avg size 3 bytes
1925   │             At t-gmax: 3 bytes (2.94%) in 1 blocks (6.25%), avg size 3 bytes
1926   │             At t-end:  3 bytes (2.94%) in 1 blocks (6.25%), avg size 3 bytes
1927   │             Reads:     0 bytes (0%, 0/Minstr), 0/byte
1928   │             Writes:    0 bytes (0%, 0/Minstr), 0/byte
1929   │             Accesses: {
1930   │               [  0]  - - - 
1931   │             }
1932   │             Allocated at {
1933   │               ^1: 0x10871D: cm (sig.c:21)
1934   │               ^2: 0x108751: c3 (sig.c:24)
1935   │               #3: 0x10894D: main (sig.c:70)
1936   │             }
1937   │           }
1938   └─▼ AP 1.4/4 (3 children) {
1939         Total:     21 bytes (20.59%, 15.92/Minstr) in 4 blocks (25%, 3.03/Minstr), avg size 5.25 bytes, avg lifetime 6,999.5 instrs (0.53% of program duration)
1940         At t-gmax: 21 bytes (20.59%) in 4 blocks (25%), avg size 5.25 bytes
1941         At t-end:  21 bytes (20.59%) in 4 blocks (25%), avg size 5.25 bytes
1942         Reads:     0 bytes (0%, 0/Minstr), 0/byte
1943         Writes:    0 bytes (0%, 0/Minstr), 0/byte
1944         Allocated at {
1945           #1: 0x10876B: dm (sig.c:27)
1946         }
1947       }
1948       ├── AP 1.4.1/3 {
1949       │     Total:     8 bytes (7.84%, 6.07/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 8 bytes, avg lifetime 7,076 instrs (0.54% of program duration)
1950       │     Max:       8 bytes in 1 blocks, avg size 8 bytes
1951       │     At t-gmax: 8 bytes (7.84%) in 1 blocks (6.25%), avg size 8 bytes
1952       │     At t-end:  8 bytes (7.84%) in 1 blocks (6.25%), avg size 8 bytes
1953       │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1954       │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1955       │     Accesses: {
1956       │       [  0]  - - - - - - - - 
1957       │     }
1958       │     Allocated at {
1959       │       ^1: 0x10876B: dm (sig.c:27)
1960       │       #2: 0x10895B: main (sig.c:72)
1961       │     }
1962       │   }
1963       ├── AP 1.4.2/3 {
1964       │     Total:     7 bytes (6.86%, 5.31/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 7 bytes, avg lifetime 7,026 instrs (0.53% of program duration)
1965       │     Max:       7 bytes in 1 blocks, avg size 7 bytes
1966       │     At t-gmax: 7 bytes (6.86%) in 1 blocks (6.25%), avg size 7 bytes
1967       │     At t-end:  7 bytes (6.86%) in 1 blocks (6.25%), avg size 7 bytes
1968       │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1969       │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1970       │     Accesses: {
1971       │       [  0]  - - - - - - - 
1972       │     }
1973       │     Allocated at {
1974       │       ^1: 0x10876B: dm (sig.c:27)
1975       │       #2: 0x108785: d2 (sig.c:29)
1976       │       #3: 0x108969: main (sig.c:73)
1977       │     }
1978       │   }
1979       └─▼ AP 1.4.3/3 (2 children) {
1980             Total:     6 bytes (5.88%, 4.55/Minstr) in 2 blocks (12.5%, 1.52/Minstr), avg size 3 bytes, avg lifetime 6,948 instrs (0.53% of program duration)
1981             At t-gmax: 6 bytes (5.88%) in 2 blocks (12.5%), avg size 3 bytes
1982             At t-end:  6 bytes (5.88%) in 2 blocks (12.5%), avg size 3 bytes
1983             Reads:     0 bytes (0%, 0/Minstr), 0/byte
1984             Writes:    0 bytes (0%, 0/Minstr), 0/byte
1985             Allocated at {
1986               ^1: 0x10876B: dm (sig.c:27)
1987               #2: 0x10879F: d3 (sig.c:30)
1988             }
1989           }
1990           ├── AP 1.4.3.1/2 {
1991           │     Total:     4 bytes (3.92%, 3.03/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 4 bytes, avg lifetime 6,974 instrs (0.53% of program duration)
1992           │     Max:       4 bytes in 1 blocks, avg size 4 bytes
1993           │     At t-gmax: 4 bytes (3.92%) in 1 blocks (6.25%), avg size 4 bytes
1994           │     At t-end:  4 bytes (3.92%) in 1 blocks (6.25%), avg size 4 bytes
1995           │     Reads:     0 bytes (0%, 0/Minstr), 0/byte
1996           │     Writes:    0 bytes (0%, 0/Minstr), 0/byte
1997           │     Accesses: {
1998           │       [  0]  - - - - 
1999           │     }
2000           │     Allocated at {
2001           │       ^1: 0x10876B: dm (sig.c:27)
2002           │       ^2: 0x10879F: d3 (sig.c:30)
2003           │       #3: 0x108977: main (sig.c:74)
2004           │     }
2005           │   }
2006           └── AP 1.4.3.2/2 {
2007                 Total:     2 bytes (1.96%, 1.52/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 2 bytes, avg lifetime 6,922 instrs (0.52% of program duration)
2008                 Max:       2 bytes in 1 blocks, avg size 2 bytes
2009                 At t-gmax: 2 bytes (1.96%) in 1 blocks (6.25%), avg size 2 bytes
2010                 At t-end:  2 bytes (1.96%) in 1 blocks (6.25%), avg size 2 bytes
2011                 Reads:     0 bytes (0%, 0/Minstr), 0/byte
2012                 Writes:    0 bytes (0%, 0/Minstr), 0/byte
2013                 Accesses: {
2014                   [  0]  - - 
2015                 }
2016                 Allocated at {
2017                   ^1: 0x10876B: dm (sig.c:27)
2018                   ^2: 0x10879F: d3 (sig.c:30)
2019                   #3: 0x108985: main (sig.c:75)
2020                 }
2021               }
2023 AP significance threshold: (total >= 0.51 bytes (0.5%)) && ((reads == 0 bytes) || (writes == 0 bytes))
2025 //---------------------------------------------------------------------------
2026     },
2027     {
2028       label: "Total (blocks), low-access",
2029       expected:
2030 //---------------------------------------------------------------------------
2032 Invocation {
2033   Command: ./sig
2034   PID:     21476
2037 Times {
2038   t-gmax: 1,311,861 instrs (99.48% of program duration)
2039   t-end:  1,318,783 instrs
2042 ▼ AP 1/1 (2 children) {
2043     Total:     16 blocks (100%, 12.13/Minstr)
2044     Reads:     0.57/byte
2045     Writes:    852.37/byte
2046     Allocated at {
2047       #0: [root]
2048     }
2049   }
2050   ├── AP 1.1/2 {
2051   │     Total:     12 blocks (75%, 9.1/Minstr)
2052   │     Reads:     0.63/byte
2053   │     Writes:    941.68/byte
2054   │     Allocated at {
2055   │       [3 insignificant]
2056   │     }
2057   │   }
2058   └─▼ AP 1.2/2 (1 children) {
2059         Total:     24 bytes (23.53%, 18.2/Minstr) in 4 blocks (25%, 3.03/Minstr), avg size 6 bytes, avg lifetime 47,708.5 instrs (3.62% of program duration)
2060         At t-gmax: 24 bytes (23.53%) in 4 blocks (25%), avg size 6 bytes
2061         At t-end:  24 bytes (23.53%) in 4 blocks (25%), avg size 6 bytes
2062         Reads:     9 bytes (15.52%, 6.82/Minstr), 0.38/byte
2063         Writes:    13,491 bytes (15.52%, 10,229.89/Minstr), 562.13/byte
2064         Allocated at {
2065           #1: 0x10871D: cm (sig.c:21)
2066         }
2067       }
2068       └── AP 1.2.1/1 {
2069             Total:     4 blocks (25%, 3.03/Minstr)
2070             Reads:     0.38/byte
2071             Writes:    562.13/byte
2072             Allocated at {
2073               [3 insignificant]
2074             }
2075           }
2077 AP significance threshold: (total >= 0.08 blocks (0.5%)) && (reads != 0 bytes) && (writes != 0 bytes) && ((reads <= 0.4/byte) || (writes <= 0.4/byte))
2079 //---------------------------------------------------------------------------
2080     },
2081     {
2082       label: "Writes (bytes), high-access",
2083       expected:
2084 //---------------------------------------------------------------------------
2086 Invocation {
2087   Command: ./sig
2088   PID:     21476
2091 Times {
2092   t-gmax: 1,311,861 instrs (99.48% of program duration)
2093   t-end:  1,318,783 instrs
2096 ▼ AP 1/1 (4 children) {
2097     Writes:    86,942 bytes (100%, 65,925.93/Minstr), 852.37/byte
2098     Allocated at {
2099       #0: [root]
2100     }
2101   }
2102   ├─▼ AP 1.1/4 (3 children) {
2103   │     Total:     30 bytes (29.41%, 22.75/Minstr) in 4 blocks (25%, 3.03/Minstr), avg size 7.5 bytes, avg lifetime 816,301.5 instrs (61.9% of program duration)
2104   │     At t-gmax: 30 bytes (29.41%) in 4 blocks (25%), avg size 7.5 bytes
2105   │     At t-end:  30 bytes (29.41%) in 4 blocks (25%), avg size 7.5 bytes
2106   │     Reads:     30 bytes (51.72%, 22.75/Minstr), 1/byte
2107   │     Writes:    44,970 bytes (51.72%, 34,099.62/Minstr), 1,499/byte
2108   │     Allocated at {
2109   │       #1: 0x108681: am (sig.c:9)
2110   │     }
2111   │   }
2112   │   ├── AP 1.1.1/3 {
2113   │   │     Total:     11 bytes (10.78%, 8.34/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 11 bytes, avg lifetime 1,075,941 instrs (81.59% of program duration)
2114   │   │     Max:       11 bytes in 1 blocks, avg size 11 bytes
2115   │   │     At t-gmax: 11 bytes (10.78%) in 1 blocks (6.25%), avg size 11 bytes
2116   │   │     At t-end:  11 bytes (10.78%) in 1 blocks (6.25%), avg size 11 bytes
2117   │   │     Reads:     11 bytes (18.97%, 8.34/Minstr), 1/byte
2118   │   │     Writes:    16,489 bytes (18.97%, 12,503.19/Minstr), 1,499/byte
2119   │   │     Accesses: {
2120   │   │       [  0]  1500 〃 〃 〃 〃 〃 〃 〃 〃 〃 〃 
2121   │   │     }
2122   │   │     Allocated at {
2123   │   │       ^1: 0x108681: am (sig.c:9)
2124   │   │       #2: 0x10883C: main (sig.c:57)
2125   │   │     }
2126   │   │   }
2127   │   ├── AP 1.1.2/3 {
2128   │   │     Total:     10 bytes (9.8%, 7.58/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 10 bytes, avg lifetime 880,845 instrs (66.79% of program duration)
2129   │   │     Max:       10 bytes in 1 blocks, avg size 10 bytes
2130   │   │     At t-gmax: 10 bytes (9.8%) in 1 blocks (6.25%), avg size 10 bytes
2131   │   │     At t-end:  10 bytes (9.8%) in 1 blocks (6.25%), avg size 10 bytes
2132   │   │     Reads:     10 bytes (17.24%, 7.58/Minstr), 1/byte
2133   │   │     Writes:    14,990 bytes (17.24%, 11,366.54/Minstr), 1,499/byte
2134   │   │     Accesses: {
2135   │   │       [  0]  1500 〃 〃 〃 〃 〃 〃 〃 〃 〃 
2136   │   │     }
2137   │   │     Allocated at {
2138   │   │       ^1: 0x108681: am (sig.c:9)
2139   │   │       #2: 0x10869B: a2 (sig.c:11)
2140   │   │       #3: 0x10885B: main (sig.c:58)
2141   │   │     }
2142   │   │   }
2143   │   └─▼ AP 1.1.3/3 (2 children) {
2144   │         Total:     9 bytes (8.82%, 6.82/Minstr) in 2 blocks (12.5%, 1.52/Minstr), avg size 4.5 bytes, avg lifetime 654,210 instrs (49.61% of program duration)
2145   │         At t-gmax: 9 bytes (8.82%) in 2 blocks (12.5%), avg size 4.5 bytes
2146   │         At t-end:  9 bytes (8.82%) in 2 blocks (12.5%), avg size 4.5 bytes
2147   │         Reads:     9 bytes (15.52%, 6.82/Minstr), 1/byte
2148   │         Writes:    13,491 bytes (15.52%, 10,229.89/Minstr), 1,499/byte
2149   │         Allocated at {
2150   │           ^1: 0x108681: am (sig.c:9)
2151   │           #2: 0x1086B5: a3 (sig.c:12)
2152   │         }
2153   │       }
2154   │       ├── AP 1.1.3.1/2 {
2155   │       │     Total:     5 bytes (4.9%, 3.79/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 5 bytes, avg lifetime 702,250 instrs (53.25% of program duration)
2156   │       │     Max:       5 bytes in 1 blocks, avg size 5 bytes
2157   │       │     At t-gmax: 5 bytes (4.9%) in 1 blocks (6.25%), avg size 5 bytes
2158   │       │     At t-end:  5 bytes (4.9%) in 1 blocks (6.25%), avg size 5 bytes
2159   │       │     Reads:     5 bytes (8.62%, 3.79/Minstr), 1/byte
2160   │       │     Writes:    7,495 bytes (8.62%, 5,683.27/Minstr), 1,499/byte
2161   │       │     Accesses: {
2162   │       │       [  0]  1500 〃 〃 〃 〃 
2163   │       │     }
2164   │       │     Allocated at {
2165   │       │       ^1: 0x108681: am (sig.c:9)
2166   │       │       ^2: 0x1086B5: a3 (sig.c:12)
2167   │       │       #3: 0x10887A: main (sig.c:59)
2168   │       │     }
2169   │       │   }
2170   │       └── AP 1.1.3.2/2 {
2171   │             Total:     4 bytes (3.92%, 3.03/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 4 bytes, avg lifetime 606,170 instrs (45.96% of program duration)
2172   │             Max:       4 bytes in 1 blocks, avg size 4 bytes
2173   │             At t-gmax: 4 bytes (3.92%) in 1 blocks (6.25%), avg size 4 bytes
2174   │             At t-end:  4 bytes (3.92%) in 1 blocks (6.25%), avg size 4 bytes
2175   │             Reads:     4 bytes (6.9%, 3.03/Minstr), 1/byte
2176   │             Writes:    5,996 bytes (6.9%, 4,546.62/Minstr), 1,499/byte
2177   │             Accesses: {
2178   │               [  0]  1500 〃 〃 〃 
2179   │             }
2180   │             Allocated at {
2181   │               ^1: 0x108681: am (sig.c:9)
2182   │               ^2: 0x1086B5: a3 (sig.c:12)
2183   │               #3: 0x108899: main (sig.c:60)
2184   │             }
2185   │           }
2186   ├─▼ AP 1.2/4 (3 children) {
2187   │     Total:     27 bytes (26.47%, 20.47/Minstr) in 4 blocks (25%, 3.03/Minstr), avg size 6.75 bytes, avg lifetime 295,093.25 instrs (22.38% of program duration)
2188   │     At t-gmax: 27 bytes (26.47%) in 4 blocks (25%), avg size 6.75 bytes
2189   │     At t-end:  27 bytes (26.47%) in 4 blocks (25%), avg size 6.75 bytes
2190   │     Reads:     19 bytes (32.76%, 14.41/Minstr), 0.7/byte
2191   │     Writes:    28,481 bytes (32.76%, 21,596.43/Minstr), 1,054.85/byte
2192   │     Allocated at {
2193   │       #1: 0x1086CF: bm (sig.c:15)
2194   │     }
2195   │   }
2196   │   ├── AP 1.2.1/3 {
2197   │   │     Total:     10 bytes (9.8%, 7.58/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 10 bytes, avg lifetime 510,097 instrs (38.68% of program duration)
2198   │   │     Max:       10 bytes in 1 blocks, avg size 10 bytes
2199   │   │     At t-gmax: 10 bytes (9.8%) in 1 blocks (6.25%), avg size 10 bytes
2200   │   │     At t-end:  10 bytes (9.8%) in 1 blocks (6.25%), avg size 10 bytes
2201   │   │     Reads:     10 bytes (17.24%, 7.58/Minstr), 1/byte
2202   │   │     Writes:    14,990 bytes (17.24%, 11,366.54/Minstr), 1,499/byte
2203   │   │     Accesses: {
2204   │   │       [  0]  1500 〃 〃 〃 〃 〃 〃 〃 〃 〃 
2205   │   │     }
2206   │   │     Allocated at {
2207   │   │       ^1: 0x1086CF: bm (sig.c:15)
2208   │   │       #2: 0x1088B8: main (sig.c:62)
2209   │   │     }
2210   │   │   }
2211   │   ├── AP 1.2.2/3 {
2212   │   │     Total:     9 bytes (8.82%, 6.82/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 9 bytes, avg lifetime 331,504 instrs (25.14% of program duration)
2213   │   │     Max:       9 bytes in 1 blocks, avg size 9 bytes
2214   │   │     At t-gmax: 9 bytes (8.82%) in 1 blocks (6.25%), avg size 9 bytes
2215   │   │     At t-end:  9 bytes (8.82%) in 1 blocks (6.25%), avg size 9 bytes
2216   │   │     Reads:     9 bytes (15.52%, 6.82/Minstr), 1/byte
2217   │   │     Writes:    13,491 bytes (15.52%, 10,229.89/Minstr), 1,499/byte
2218   │   │     Accesses: {
2219   │   │       [  0]  1500 〃 〃 〃 〃 〃 〃 〃 〃 
2220   │   │     }
2221   │   │     Allocated at {
2222   │   │       ^1: 0x1086CF: bm (sig.c:15)
2223   │   │       #2: 0x1086E9: b2 (sig.c:17)
2224   │   │       #3: 0x1088D7: main (sig.c:63)
2225   │   │     }
2226   │   │   }
2227   │   └── AP 1.2.3/3 {
2228   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
2229   │         Allocated at {
2230   │           [1 insignificant]
2231   │         }
2232   │       }
2233   ├─▼ AP 1.3/4 (2 children) {
2234   │     Writes:    13,491 bytes (15.52%, 10,229.89/Minstr), 562.13/byte
2235   │     Allocated at {
2236   │       #1: 0x10871D: cm (sig.c:21)
2237   │     }
2238   │   }
2239   │   ├── AP 1.3.1/2 {
2240   │   │     Total:     9 bytes (8.82%, 6.82/Minstr) in 1 blocks (6.25%, 0.76/Minstr), avg size 9 bytes, avg lifetime 169,315 instrs (12.84% of program duration)
2241   │   │     Max:       9 bytes in 1 blocks, avg size 9 bytes
2242   │   │     At t-gmax: 9 bytes (8.82%) in 1 blocks (6.25%), avg size 9 bytes
2243   │   │     At t-end:  9 bytes (8.82%) in 1 blocks (6.25%), avg size 9 bytes
2244   │   │     Reads:     9 bytes (15.52%, 6.82/Minstr), 1/byte
2245   │   │     Writes:    13,491 bytes (15.52%, 10,229.89/Minstr), 1,499/byte
2246   │   │     Accesses: {
2247   │   │       [  0]  1500 〃 〃 〃 〃 〃 〃 〃 〃 
2248   │   │     }
2249   │   │     Allocated at {
2250   │   │       ^1: 0x10871D: cm (sig.c:21)
2251   │   │       #2: 0x108912: main (sig.c:67)
2252   │   │     }
2253   │   │   }
2254   │   └── AP 1.3.2/2 {
2255   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
2256   │         Allocated at {
2257   │           [2 insignificant]
2258   │         }
2259   │       }
2260   └── AP 1.4/4 {
2261         Writes:    0 bytes (0%, 0/Minstr), 0/byte
2262         Allocated at {
2263           [1 insignificant]
2264         }
2265       }
2267 AP significance threshold: (writes >= 434.71 bytes (0.5%)) && ((reads >= 1,000/byte) || (writes >= 1,000/byte))
2269 //---------------------------------------------------------------------------
2270     }
2271   ]
2273 tests.push(sig);
2275 //---------------------------------------------------------------------------
2276 // sig2 (doesn't corresponds to a .c file)
2277 //---------------------------------------------------------------------------
2279 let sig2 = {
2280   name: "sig2",
2281   input:
2282 //---------------------------------------------------------------------------
2283 {"dhatFileVersion":1
2284 ,"cmd":"subseqs"
2285 ,"pid":0
2286 ,"mi":10000,"ei":20000
2287 ,"aps":
2288  [{"tb":100,"tbk":1,"tli":1000
2289   ,"mb":100,"mbk":1
2290   ,"gb":100,"gbk":1
2291   ,"fb":0,"fbk":0
2292   ,"rb":0,"wb":0
2293   ,"acc":[-10,0]
2294   ,"fs":[1]
2295   }
2296  ,{"tb":101,"tbk":1,"tli":1000
2297   ,"mb":101,"mbk":1
2298   ,"gb":101,"gbk":1
2299   ,"fb":0,"fbk":0
2300   ,"rb":0,"wb":0
2301   ,"acc":[-10,0]
2302   ,"fs":[2]
2303   }
2304  ,{"tb":102,"tbk":1,"tli":1000
2305   ,"mb":102,"mbk":1
2306   ,"gb":102,"gbk":1
2307   ,"fb":0,"fbk":0
2308   ,"rb":0,"wb":0
2309   ,"acc":[-10,0]
2310   ,"fs":[3,4]
2311   }
2312  ,{"tb":103,"tbk":1,"tli":1000
2313   ,"mb":103,"mbk":1
2314   ,"gb":103,"gbk":1
2315   ,"fb":0,"fbk":0
2316   ,"rb":0,"wb":0
2317   ,"acc":[-10,0]
2318   ,"fs":[3,5]
2319   }
2320  ,{"tb":104,"tbk":1,"tli":1000
2321   ,"mb":104,"mbk":1
2322   ,"gb":104,"gbk":1
2323   ,"fb":0,"fbk":0
2324   ,"rb":0,"wb":0
2325   ,"acc":[-10,0]
2326   ,"fs":[3,6,7]
2327   }
2328  ,{"tb":105,"tbk":1,"tli":1000
2329   ,"mb":105,"mbk":1
2330   ,"gb":105,"gbk":1
2331   ,"fb":0,"fbk":0
2332   ,"rb":0,"wb":0
2333   ,"acc":[-10,0]
2334   ,"fs":[3,6,8]
2335   }
2336  ,{"tb":10,"tbk":1,"tli":1000
2337   ,"mb":10,"mbk":1
2338   ,"gb":10,"gbk":1
2339   ,"fb":0,"fbk":0
2340   ,"rb":0,"wb":0
2341   ,"acc":[-10,0]
2342   ,"fs":[3,6,9,10]
2343   }
2344  ,{"tb":106,"tbk":1,"tli":1000
2345   ,"mb":106,"mbk":1
2346   ,"gb":106,"gbk":1
2347   ,"fb":0,"fbk":0
2348   ,"rb":0,"wb":0
2349   ,"acc":[-10,0]
2350   ,"fs":[3,6,9,11]
2351   }
2352  ,{"tb":107,"tbk":1,"tli":1000
2353   ,"mb":107,"mbk":1
2354   ,"gb":107,"gbk":1
2355   ,"fb":0,"fbk":0
2356   ,"rb":0,"wb":0
2357   ,"acc":[-10,0]
2358   ,"fs":[3,6,9,12]
2359   }
2361 ,"ftbl":
2362  ["[root]"
2363  ,"a1()"
2364  ,"a2()"
2365  ,"a3()"
2366  ,"b1()"
2367  ,"b2()"
2368  ,"b3()"
2369  ,"c1()"
2370  ,"c2()"
2371  ,"c3()"
2372  ,"d1()"
2373  ,"d2()"
2374  ,"d3()"
2377 //---------------------------------------------------------------------------
2378   ,
2379   outputs: [
2380     {
2381       label: "Total (blocks), tiny",
2382       expected:
2383 //---------------------------------------------------------------------------
2385 Invocation {
2386   Command: subseqs
2387   PID:     0
2390 Times {
2391   t-gmax: 10,000 instrs (50% of program duration)
2392   t-end:  20,000 instrs
2395 ▼ AP 1/1 (2 children) {
2396     Total:     9 blocks (100%, 450/Minstr), avg size 93.11 bytes
2397     Allocated at {
2398       #0: [root]
2399     }
2400   }
2401   ├─▼ AP 1.1/2 (2 children) {
2402   │     Total:     7 blocks (77.78%, 350/Minstr), avg size 91 bytes
2403   │     Allocated at {
2404   │       #1: a3()
2405   │     }
2406   │   }
2407   │   ├─▼ AP 1.1.1/2 (2 children) {
2408   │   │     Total:     5 blocks (55.56%, 250/Minstr), avg size 86.4 bytes
2409   │   │     Allocated at {
2410   │   │       #2: b3()
2411   │   │     }
2412   │   │   }
2413   │   │   ├─▼ AP 1.1.1.1/2 (2 children) {
2414   │   │   │     Total:     3 blocks (33.33%, 150/Minstr), avg size 74.33 bytes
2415   │   │   │     Allocated at {
2416   │   │   │       #3: c3()
2417   │   │   │     }
2418   │   │   │   }
2419   │   │   │   ├── AP 1.1.1.1.1/2 {
2420   │   │   │   │     Total:     2 blocks (22.22%, 100/Minstr), avg size 106.5 bytes
2421   │   │   │   │     Allocated at {
2422   │   │   │   │       [2 insignificant]
2423   │   │   │   │     }
2424   │   │   │   │   }
2425   │   │   │   └── AP 1.1.1.1.2/2 {
2426   │   │   │         Total:     10 bytes (1.19%, 500/Minstr) in 1 blocks (11.11%, 50/Minstr), avg size 10 bytes, avg lifetime 1,000 instrs (5% of program duration)
2427   │   │   │         Max:       10 bytes in 1 blocks, avg size 10 bytes
2428   │   │   │         At t-gmax: 10 bytes (1.19%) in 1 blocks (11.11%), avg size 10 bytes
2429   │   │   │         At t-end:  0 bytes (0%) in 0 blocks (0%), avg size 0 bytes
2430   │   │   │         Reads:     0 bytes (0%, 0/Minstr), 0/byte
2431   │   │   │         Writes:    0 bytes (0%, 0/Minstr), 0/byte
2432   │   │   │         Accesses: {
2433   │   │   │           [  0]  - - - - - - - - - - 
2434   │   │   │         }
2435   │   │   │         Allocated at {
2436   │   │   │           ^1: a3()
2437   │   │   │           ^2: b3()
2438   │   │   │           ^3: c3()
2439   │   │   │           #4: d1()
2440   │   │   │         }
2441   │   │   │       }
2442   │   │   └── AP 1.1.1.2/2 {
2443   │   │         Total:     2 blocks (22.22%, 100/Minstr), avg size 104.5 bytes
2444   │   │         Allocated at {
2445   │   │           [2 insignificant]
2446   │   │         }
2447   │   │       }
2448   │   └── AP 1.1.2/2 {
2449   │         Total:     2 blocks (22.22%, 100/Minstr), avg size 102.5 bytes
2450   │         Allocated at {
2451   │           [2 insignificant]
2452   │         }
2453   │       }
2454   └── AP 1.2/2 {
2455         Total:     2 blocks (22.22%, 100/Minstr), avg size 100.5 bytes
2456         Allocated at {
2457           [2 insignificant]
2458         }
2459       }
2461 AP significance threshold: (total >= 0.05 blocks (0.5%)) && (total avg size <= 16 bytes)
2463 //---------------------------------------------------------------------------
2464     }
2465   ]
2467 tests.push(sig2);
2469 //---------------------------------------------------------------------------
2470 // Code
2471 //---------------------------------------------------------------------------
2473 function runTests() {
2474   let pre = appendElement(gTestingDiv, "pre");
2476   for (let [i, test] of tests.entries()) {
2477     let name = test.name;
2478     gData = test.input;
2480     for (let output of test.outputs) {
2481       // Set the sort metric.
2482       let label = output.label;
2483       let j = 0;
2484       let labelFound = false;
2485       for (let opt of gSelect.options) {
2486         if (gSelectData[opt.value].label == label) {
2487           gSelect.selectedIndex = j;
2488           labelFound = true;
2489           break;
2490         }
2491         j++;
2492       }
2493       assert(labelFound, "test label not found in gSelectData");
2495       // Build and display the tree.
2496       tryFunc(() => {
2497         gFilename = "TEST MODE";
2498         buildTree();
2499         displayTree();
2500       });
2502       // Compare actual text output against expected.
2503       let expected = output.expected;
2504       let actual = gMainDiv.textContent;
2506       let id = `Test ${i} - ${test.name} - ${label}`;
2508       if (expected !== actual) {
2509         // Test failed. Do a crude diff: find the line and column of the first
2510         // char that differs.
2511         let j = 0, line = 1, col = 1;
2512         while (expected[j] === actual[j]) {
2513           if (expected[j] === "\n") {
2514             line++;
2515             col = 1;
2516           } else {
2517             col++;
2518           }
2519           j++;
2520         }
2522         let s = `\
2523 FAIL - ${id}
2525 Expected length: ${expected.length}, actual length: ${actual.length}
2526 First differing char at ${line}:${col}
2528 EXPECTED OUTPUT
2532         // Print line numbers for the expected output, because it makes it much
2533         // easier to find the first differing char.
2534         for (let [n, line] of expected.split('\n').entries()) {
2535           s += `${(n + 1).toString().padStart(3)} ${line}\n`;
2536         }
2538         s += ">>>";
2540         appendElementWithText(pre, "div", s);
2541         return;  // stop on the first failure
2542       }
2544       // Test passed.
2545       appendElementWithText(pre, "div", `PASS - ${id}`);
2546     }
2547   }
2549   clearMainDivWithText("All tests passed");
2552 runTests();