Chromium Code Reviews| Index: test/js-perf-test/Object/entries.js |
| diff --git a/test/js-perf-test/Object/entries.js b/test/js-perf-test/Object/entries.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0658b7983d77bfac6e96e6f98514d2fe1a051c75 |
| --- /dev/null |
| +++ b/test/js-perf-test/Object/entries.js |
| @@ -0,0 +1,75 @@ |
| +// 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)) { |
|
Camillo Bruni
2016/03/07 08:21:54
Right, this seems like a good solution to prevent
|
| + throw new Error("FAILURE"); |
| + } |
| + object = result = expected = undefined; |
| + return true; |
| +} |