Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: test/js-perf-test/Generators/generators.js

Issue 2026503002: Add js-perf-test benchmark for generators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/js-perf-test/Generators/run.js » ('j') | test/js-perf-test/JSTests.json » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/js-perf-test/Generators/generators.js
diff --git a/test/js-perf-test/Generators/generators.js b/test/js-perf-test/Generators/generators.js
new file mode 100644
index 0000000000000000000000000000000000000000..d49dee3069cf8fc396acf10d4d022e755a97e550
--- /dev/null
+++ b/test/js-perf-test/Generators/generators.js
@@ -0,0 +1,131 @@
+// 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('Generators', [1000], [
+ new Benchmark('Basic', false, false, 0, Basic),
+ new Benchmark('Loop', false, false, 0, Loop),
+ new Benchmark('Input', false, false, 0, Input),
+ new Benchmark('YieldStar', false, false, 0, YieldStar),
+]);
+
+
+// ----------------------------------------------------------------------------
+// Benchmark: Basic
+// ----------------------------------------------------------------------------
+
+function* five() {
+ yield 1;
+ yield 2;
+ yield 3;
+ yield 4;
+ yield 5;
+}
+
+function Basic() {
+ let g = five();
+ let sum = 0;
+ sum += g.next().value;
+ sum += g.next().value;
+ sum += g.next().value;
+ sum += g.next().value;
+ sum += g.next().value;
+ if (sum != 15 || !g.next().done) throw "wrong";
+}
+
+
+// ----------------------------------------------------------------------------
+// Benchmark: Loop
+// ----------------------------------------------------------------------------
+
+function* fibonacci() {
+ let x = 0;
+ let y = 1;
+ yield x;
+ while (true) {
+ yield y;
+ let tmp = x;
+ x = y;
+ y += tmp;
+ }
+}
+
+function Loop() {
+ let n = 0;
+ let x;
+ for (x of fibonacci()) {
+ if (++n === 42) break;
+ }
+ if (x != 165580141) throw "wrong";
+}
+
+
+
+// ----------------------------------------------------------------------------
+// Benchmark: Input
+// ----------------------------------------------------------------------------
+
+function* multiples(x) {
+ let skip = function.sent || 0;
+ let next = 0;
+ while (true) {
+ if (skip === 0) {
+ skip = yield next;
+ } else {
+ skip--;
+ }
+ next += x;
+ }
+}
+
+function Input() {
+ let g = multiples(3);
+ results = [g.next(2), g.next(0), g.next(5), g.next(10)];
+ if (results.slice(-1)[0].value != 60) throw "wrong";
+}
+
+
+// ----------------------------------------------------------------------------
+// Benchmark: YieldStar
+// ----------------------------------------------------------------------------
+
+function* infix(node) {
+ if (node) {
+ yield* infix(node.left);
+ yield node.label;
+ yield* infix(node.right);
+ }
+}
+
+class Node {
+ constructor(label, left, right) {
+ this.label = label;
+ this.left = left;
+ this.right = right;
+ }
+}
+
+function YieldStar() {
+ let tree = new Node(1,
+ new Node(2,
+ new Node(3,
+ new Node(4,
+ new Node(16,
+ new Node(5,
+ new Node(23,
+ new Node(0),
+ new Node(17)),
+ new Node(44, new Node(20)))),
+ new Node(7,
+ undefined,
+ new Node(23,
+ new Node(0),
+ new Node(41, undefined, new Node(11))))),
+ new Node(8)),
+ new Node(5)),
+ new Node(6, undefined, new Node(7)));
+ let labels = [...(infix(tree))];
+ // 0,23,17,5,20,44,16,4,7,0,23,41,11,3,8,2,5,1,6,7
+ if (labels[0] != 0) throw "wrong";
+}
« no previous file with comments | « no previous file | test/js-perf-test/Generators/run.js » ('j') | test/js-perf-test/JSTests.json » ('J')

Powered by Google App Engine
This is Rietveld 408576698