Index: test/js-perf-test/Iterators/forof.js |
diff --git a/test/js-perf-test/Iterators/forof.js b/test/js-perf-test/Iterators/forof.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..94bc9e1403b116db21a40fe7700b2a06cd7fc686 |
--- /dev/null |
+++ b/test/js-perf-test/Iterators/forof.js |
@@ -0,0 +1,88 @@ |
+// 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; |
+ } |
+} |