// Check byte counts produced by takeCensus.

const g = newGlobal();
g.eval("setLazyParsingDisabled(true)");
g.eval("setJitCompilerOption('ion.warmup.trigger', 1000)");

const dbg = new Debugger(g);

g.evaluate("function one() {}", { fileName: "one.js" });
g.evaluate(`function two1() {}
            function two2() {}`,
           { fileName: "two.js" });
g.evaluate(`function three1() {}
            function three2() {}
            function three3() {}`,
           { fileName: "three.js" });

const report = dbg.memory.takeCensus({
  breakdown: {
    by: "coarseType",
    scripts: {
      by: "filename",
      then: { by: "count", count: true, bytes: false },
      noFilename: {
        by: "internalType",
        then: { by: "count", count: true, bytes: false }
      }
    },

    // Not really interested in these, but they're here for completeness.
    objects: { by: "count", count: true, byte: false },
    strings: { by: "count", count: true, byte: false },
    other:   { by: "count", count: true, byte: false },
  }
});

print(JSON.stringify(report, null, 4));

assertEq(report.scripts["one.js"].count, 1);
assertEq(report.scripts["two.js"].count, 2);
assertEq(report.scripts["three.js"].count, 3);

const noFilename = report.scripts.noFilename;
assertEq(!!noFilename, true);
assertEq(typeof noFilename, "object");