1'use strict';
2require('../common');
3const assert = require('assert');
4const v8 = require('v8');
5
6const s = v8.getHeapStatistics();
7const keys = [
8  'does_zap_garbage',
9  'external_memory',
10  'heap_size_limit',
11  'malloced_memory',
12  'number_of_detached_contexts',
13  'number_of_native_contexts',
14  'peak_malloced_memory',
15  'total_available_size',
16  'total_global_handles_size',
17  'total_heap_size',
18  'total_heap_size_executable',
19  'total_physical_size',
20  'used_global_handles_size',
21  'used_heap_size'];
22assert.deepStrictEqual(Object.keys(s).sort(), keys);
23keys.forEach(function(key) {
24  assert.strictEqual(typeof s[key], 'number');
25});
26
27
28const heapCodeStatistics = v8.getHeapCodeStatistics();
29const heapCodeStatisticsKeys = [
30  'bytecode_and_metadata_size',
31  'code_and_metadata_size',
32  'cpu_profiler_metadata_size',
33  'external_script_source_size'];
34assert.deepStrictEqual(Object.keys(heapCodeStatistics).sort(),
35                       heapCodeStatisticsKeys);
36heapCodeStatisticsKeys.forEach(function(key) {
37  assert.strictEqual(typeof heapCodeStatistics[key], 'number');
38});
39
40
41const expectedHeapSpaces = [
42  'code_large_object_space',
43  'code_space',
44  'large_object_space',
45  'map_space',
46  'new_large_object_space',
47  'new_space',
48  'old_space',
49  'read_only_space',
50];
51const heapSpaceStatistics = v8.getHeapSpaceStatistics();
52const actualHeapSpaceNames = heapSpaceStatistics.map((s) => s.space_name);
53assert.deepStrictEqual(actualHeapSpaceNames.sort(), expectedHeapSpaces.sort());
54heapSpaceStatistics.forEach((heapSpace) => {
55  assert.strictEqual(typeof heapSpace.space_name, 'string');
56  assert.strictEqual(typeof heapSpace.space_size, 'number');
57  assert.strictEqual(typeof heapSpace.space_used_size, 'number');
58  assert.strictEqual(typeof heapSpace.space_available_size, 'number');
59  assert.strictEqual(typeof heapSpace.physical_space_size, 'number');
60});
61