// Copyright 2016 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. new BenchmarkSuite('Entries', [1000], [ new Benchmark('Basic', false, false, 0, Basic, BasicSetup, BasicTearDown) ]); var object; var expected; var result; var symbol1; function Basic() { result = Object.entries(object); } function BasicSetup() { result = undefined; symbol1 = Symbol('test'); object = { a: 10 }; object[26.0] = 'third'; object.b = 72; object[symbol1] = 'TEST'; Object.defineProperty(object, 'not-enumerable', { enumerable: false, value: 'nope', writable: true, configurable: true }); } function BasicTearDown() { result = result.map(entry => `[${[String(entry[0]), String(entry[1])]}]`); return result.length === 3 && result.join(', ') === '[a, 10], [26.0, third], [b, 72]'; } // ---------------------------------------------------------------------------- new BenchmarkSuite('EntriesMegamorphic', [1000], [ new Benchmark('BasicMegamorphic', false, false, 0, BasicMegamorphic, BasicMegamorphicSetup, BasicMegamorphicTearDown) ]); function BasicMegamorphic() { for (var i = 0; i < object.length; ++i) { result[i] = Object.entries(object[i]); } } function BasicMegamorphicSetup() { // Create 1k objects with different maps. object = []; expected = []; result = []; for (var i=0; i<1000; i++) { var obj = {}; var exp = []; for (var j=0; j<10; j++) { obj['key-'+i+'-'+j] = 'property-'+i+'-'+j; exp[j] = ['key-'+i+'-'+j, 'property-'+i+'-'+j]; } object[i] = obj; expected[i] = exp; } } function BasicMegamorphicTearDown() { if (JSON.stringify(expected) !== JSON.stringify(result)) { throw new Error("FAILURE"); } object = result = expected = undefined; return true; }