89 lines
2.1 KiB
JavaScript
89 lines
2.1 KiB
JavaScript
|
// Copyright 2014 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('ForOf', [1000], [
|
||
|
new Benchmark('ArrayValues', false, false, 0, ForOf, ForOfArraySetup, ForOfTearDown),
|
||
|
new Benchmark('ArrayKeys', false, false, 0, ForOf, ForOfArrayKeysSetup, ForOfTearDown),
|
||
|
new Benchmark('ArrayEntries', false, false, 0, ForOf, ForOfArrayEntriesSetup, ForOfTearDown),
|
||
|
new Benchmark('Uint8Array', false, false, 0, ForOf, ForOfUint8ArraySetup, ForOfTearDown),
|
||
|
new Benchmark('Float64Array', false, false, 0, ForOf, ForOfFloat64ArraySetup, ForOfTearDown),
|
||
|
new Benchmark('String', false, false, 0, ForOf, ForOfStringSetup, ForOfTearDown),
|
||
|
]);
|
||
|
|
||
|
|
||
|
var iterable;
|
||
|
var N = 100;
|
||
|
var expected, result;
|
||
|
|
||
|
|
||
|
function ForOfArraySetupHelper(constructor) {
|
||
|
iterable = new constructor(N);
|
||
|
for (var i = 0; i < N; i++) iterable[i] = i;
|
||
|
expected = N - 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
function ForOfArraySetup() {
|
||
|
ForOfArraySetupHelper(Array);
|
||
|
// Default iterator is values().
|
||
|
}
|
||
|
|
||
|
|
||
|
function ForOfArrayKeysSetup() {
|
||
|
ForOfArraySetupHelper(Array);
|
||
|
iterable = iterable.keys();
|
||
|
}
|
||
|
|
||
|
|
||
|
function ForOfArrayEntriesSetup() {
|
||
|
ForOfArraySetupHelper(Array);
|
||
|
iterable = iterable.entries();
|
||
|
expected = [N-1, N-1];
|
||
|
}
|
||
|
|
||
|
|
||
|
function ForOfUint8ArraySetup() {
|
||
|
ForOfArraySetupHelper(Uint8Array);
|
||
|
}
|
||
|
|
||
|
|
||
|
function ForOfFloat64ArraySetup() {
|
||
|
ForOfArraySetupHelper(Float64Array);
|
||
|
}
|
||
|
|
||
|
|
||
|
function ForOfStringSetup() {
|
||
|
iterable = "abcdefhijklmnopqrstuvwxyzABCDEFHIJKLMNOPQRSTUVWXYZ0123456789";
|
||
|
expected = "9";
|
||
|
}
|
||
|
|
||
|
|
||
|
function Equals(expected, actual) {
|
||
|
if (expected === actual) return true;
|
||
|
if (typeof expected !== typeof actual) return false;
|
||
|
if (typeof expected !== 'object') return false;
|
||
|
for (var k of Object.keys(expected)) {
|
||
|
if (!(k in actual)) return false;
|
||
|
if (!Equals(expected[k], actual[k])) return false;
|
||
|
}
|
||
|
for (var k of Object.keys(actual)) {
|
||
|
if (!(k in expected)) return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function ForOfTearDown() {
|
||
|
iterable = null;
|
||
|
if (!Equals(expected, result)) {
|
||
|
throw new Error("Bad result: " + result);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
function ForOf() {
|
||
|
for (var x of iterable) {
|
||
|
result = x;
|
||
|
}
|
||
|
}
|