|  | // Copyright 2018 the V8 project authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // Comparing different iterating schemes against spread initial literals. | 
|  | // Benchmarks for large smi maps. | 
|  |  | 
|  | var keys = Array.from(Array(1e4).keys()); | 
|  | var keyValuePairs = keys.map((value) => [value, value + 1]); | 
|  | var map = new Map(keyValuePairs); | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  | // Benchmark: SpreadKeys | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  | function SpreadKeys() { | 
|  | var newArr = [...map.keys()]; | 
|  | // basic sanity check | 
|  | if (newArr.length != map.size) throw 666; | 
|  | return newArr; | 
|  | } | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  | // Benchmark: SpreadValues | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  | function SpreadValues() { | 
|  | var newArr = [...map.values()]; | 
|  | // basic sanity check | 
|  | if (newArr.length != map.size) throw 666; | 
|  | return newArr; | 
|  | } | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  | // Benchmark: ForOfKeys | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  | function ForOfKeys() { | 
|  | var newArr = new Array(map.size); | 
|  | var i = 0; | 
|  | for (let x of map.keys()) { | 
|  | newArr[i] = x; | 
|  | i++; | 
|  | } | 
|  | if (newArr.length != map.size) throw 666; | 
|  | return newArr; | 
|  | } | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  | // Benchmark: ForOfValues | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  | function ForOfValues() { | 
|  | var newArr = new Array(map.size); | 
|  | var i = 0; | 
|  | for (let x of map.values()) { | 
|  | newArr[i] = x; | 
|  | i++; | 
|  | } | 
|  | if (newArr.length != map.size) throw 666; | 
|  | return newArr; | 
|  | } | 
|  |  | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  | // Setup and Run | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  | load('../base.js'); | 
|  |  | 
|  | var success = true; | 
|  |  | 
|  | function PrintResult(name, result) { | 
|  | print(name + '-ArrayLiteralInitialSpreadLargeSmiMap(Score): ' + result); | 
|  | } | 
|  |  | 
|  | function PrintError(name, error) { | 
|  | PrintResult('Error: ' + name, error); | 
|  | success = false; | 
|  | } | 
|  |  | 
|  | function CreateBenchmark(name, f) { | 
|  | new BenchmarkSuite(name, [1000], [ new Benchmark(name, false, false, 0, f) ]); | 
|  | } | 
|  |  | 
|  | CreateBenchmark('ForOfKeys', ForOfKeys); | 
|  | CreateBenchmark('ForOfValues', ForOfValues); | 
|  | CreateBenchmark('SpreadKeys', SpreadKeys); | 
|  | CreateBenchmark('SpreadValues', SpreadValues); | 
|  |  | 
|  |  | 
|  | BenchmarkSuite.config.doWarmup = true; | 
|  | BenchmarkSuite.config.doDeterministic = false; | 
|  | BenchmarkSuite.RunSuites({NotifyResult: PrintResult, NotifyError: PrintError}); |