| // 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; |
| } |