load("./driver/driver.js"); function hasDifferentSizeNodes(nodes) { let seenSize = nodes[0].size; for (let node of nodes) { if (node.size !== seenSize) return true; } return false; } function hasAllInternalNodes(nodes) { for (let node of nodes) { if (!node.internal) return false; } return true; } function sorted(nodes) { return nodes.sort((a, b) => a.id - b.id); } let simpleObject1NodeId; let simpleObject2NodeId; (function() { let snapshot = createCheapHeapSnapshot(); assert(snapshot.nodesWithClassName("global").length === 1, "Snapshot should contain a single 'global' node"); assert(snapshot.nodesWithClassName("Structure").length > 0, "Snapshot should contain 'Structure' nodes"); assert(snapshot.nodesWithClassName("ThisClassNameDoesNotExist").length === 0, "Snapshot should not contain 'ThisClassNameDoesNotExist' nodes"); let strings = snapshot.nodesWithClassName("string"); assert(strings.length > 0, "Snapshot should contain 'string' nodes"); assert(hasDifferentSizeNodes(strings), "'string' nodes should have different sizes"); let nativeExecutables = snapshot.nodesWithClassName("NativeExecutable"); assert(nativeExecutables.length > 0, "Snapshot should contain 'NativeExecutable' nodes"); assert(!hasDifferentSizeNodes(nativeExecutables), "'NativeExecutable' nodes should all be the same size"); assert(hasAllInternalNodes(nativeExecutables), "'NativeExecutable' nodes should all be internal"); assert(snapshot.nodesWithClassName("SimpleObject").length === 0, "Snapshot should not contain a 'SimpleObject' instance"); })(); let simpleObject1 = new SimpleObject; (function() { let snapshot = createCheapHeapSnapshot(); let nodes = sorted(snapshot.nodesWithClassName("SimpleObject")); let [simpleObject1Node] = nodes; simpleObject1NodeId = nodes[0].id; assert(nodes.length === 1, "Snapshot should contain 1 'SimpleObject' instance"); assert(simpleObject1Node.outgoingEdges.length === 1, "'simpleObject1' should only reference its structure"); assert(simpleObject1Node.outgoingEdges[0].to.className === "Structure", "'simpleObject1' should reference a Structure"); })(); let simpleObjectList = []; for (let i = 0; i < 1234; ++i) simpleObjectList.push(new SimpleObject); (function() { let snapshot = createCheapHeapSnapshot(); let nodes = sorted(snapshot.nodesWithClassName("SimpleObject")); simpleObject1NodeId = nodes[0].id; simpleObject2NodeId = nodes[1].id; assert(nodes.length === 1235, "Snapshot should contain 1235 'SimpleObject' instances"); assert(nodes[0].id === simpleObject1NodeId, "'simpleObject1' should maintain the same identifier"); assert(simpleObject1NodeId < simpleObject2NodeId, "node identifiers should always increase across snapshots"); })(); simpleObject1 = null; simpleObjectList.fill(null); (function() { let snapshot = createCheapHeapSnapshot(); let nodes = snapshot.nodesWithClassName("SimpleObject"); assert(nodes.length === 0, "Snapshot should not contain a 'SimpleObject' instance"); })();