/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";

// Test basic functionality of `CensusUtils.getCensusIndividuals`.

function run_test() {
  const stack1 = saveStack(1);
  const stack2 = saveStack(1);
  const stack3 = saveStack(1);

  const COUNT = { by: "count", count: true, bytes: true };
  const INTERNAL_TYPE = { by: "internalType", then: COUNT };

  const BREAKDOWN = {
    by: "allocationStack",
    then: INTERNAL_TYPE,
    noStack: INTERNAL_TYPE,
  };

  const MOCK_SNAPSHOT = {
    takeCensus: ({ breakdown }) => {
      assertStructurallyEquivalent(
        breakdown,
        CensusUtils.countToBucketBreakdown(BREAKDOWN)
      );

      //                                DFS Index
      // prettier-ignore
      return new Map([               // 0
        [stack1, {                   // 1
          JSObject: [101, 102, 103], // 2
          JSString: [111, 112, 113], // 3
        }],
        [stack2, {                   // 4
          JSObject: [201, 202, 203], // 5
          JSString: [211, 212, 213], // 6
        }],
        [stack3, {                   // 7
          JSObject: [301, 302, 303], // 8
          JSString: [311, 312, 313], // 9
        }],
        ["noStack", {                // 10
          JSObject: [401, 402, 403], // 11
          JSString: [411, 412, 413], // 12
        }],
      ]);
    },
  };

  const INDICES = new Set([3, 5, 9]);

  const EXPECTED = new Set([111, 112, 113, 201, 202, 203, 311, 312, 313]);

  const actual = new Set(
    CensusUtils.getCensusIndividuals(INDICES, BREAKDOWN, MOCK_SNAPSHOT)
  );

  assertStructurallyEquivalent(EXPECTED, actual);
}
