|  | // 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. | 
|  |  | 
|  | const input = { | 
|  | a: 1, | 
|  | b: 2, | 
|  | c: 3, | 
|  | ['d']: 4, | 
|  | 1: 5 | 
|  | }; | 
|  |  | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  | // Benchmark: Babel | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  | function _extends(target) { | 
|  | for (var i = 1; i < arguments.length; i++) { | 
|  | var source = arguments[i]; | 
|  | for (var key in source) { | 
|  | if (Object.prototype.hasOwnProperty.call(source, key)) { | 
|  | target[key] = source[key]; | 
|  | } | 
|  | } | 
|  | } | 
|  | return target; | 
|  | }; | 
|  |  | 
|  | function Babel() { | 
|  | const result = _extends({}, input); | 
|  | if (Object.keys(result).length != 5) throw 666; | 
|  | } | 
|  |  | 
|  | function BabelAndOverwrite() { | 
|  | const result = _extends({}, input, {a: 6}); | 
|  | if (Object.keys(result).length != 5) throw 666; | 
|  | } | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  | // Benchmark: Object.assign | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  |  | 
|  | function ObjectAssign() { | 
|  | const result = Object.assign({}, input); | 
|  | if (Object.keys(result).length != 5) throw 666; | 
|  | } | 
|  |  | 
|  | function ObjectAssignAndOverwrite() { | 
|  | const result = Object.assign({}, input, {a : 6}); | 
|  | if (Object.keys(result).length != 5) throw 666; | 
|  | } | 
|  |  | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  | // Benchmark: Object.assign | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  |  | 
|  | function ObjectSpread() { | 
|  | const result = { ...input }; | 
|  | if (Object.keys(result).length != 5) throw 666; | 
|  | } | 
|  |  | 
|  | function ObjectSpreadAndOverwrite() { | 
|  | const result = { ...input, a: 6 }; | 
|  | if (Object.keys(result).length != 5) throw 666; | 
|  | } | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  | // Setup and Run | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  | load('../base.js'); | 
|  |  | 
|  | var success = true; | 
|  |  | 
|  | function PrintResult(name, result) { | 
|  | print(name + '-ObjectLiteralSpread(Score): ' + result); | 
|  | } | 
|  |  | 
|  | function PrintError(name, error) { | 
|  | PrintResult(name, error); | 
|  | success = false; | 
|  | } | 
|  |  | 
|  | function CreateBenchmark(name, f) { | 
|  | new BenchmarkSuite(name, [100], [ new Benchmark(name, false, false, 0, f) ]); | 
|  | } | 
|  |  | 
|  | CreateBenchmark('Babel', Babel); | 
|  | CreateBenchmark('BabelAndOverwrite', BabelAndOverwrite); | 
|  | CreateBenchmark('ObjectAssign', ObjectAssign); | 
|  | CreateBenchmark('ObjectAssignAndOverwrite', ObjectAssignAndOverwrite); | 
|  | CreateBenchmark('ObjectSpread', ObjectSpread); | 
|  | CreateBenchmark('ObjectSpreadAndOverwrite', ObjectSpreadAndOverwrite); | 
|  |  | 
|  | BenchmarkSuite.config.doWarmup = undefined; | 
|  | BenchmarkSuite.config.doDeterministic = undefined; | 
|  | BenchmarkSuite.RunSuites({NotifyResult: PrintResult, NotifyError: PrintError}); |