Add js-perf-test benchmark for generators.
BUG=v8:4907 Review-Url: https://codereview.chromium.org/2026503002 Cr-Commit-Position: refs/heads/master@{#36583}
This commit is contained in:
parent
143b3d167d
commit
20e43a3a93
131
test/js-perf-test/Generators/generators.js
Normal file
131
test/js-perf-test/Generators/generators.js
Normal file
@ -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";
|
||||
}
|
26
test/js-perf-test/Generators/run.js
Normal file
26
test/js-perf-test/Generators/run.js
Normal file
@ -0,0 +1,26 @@
|
||||
// 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.
|
||||
|
||||
|
||||
load('../base.js');
|
||||
load('generators.js');
|
||||
|
||||
var success = true;
|
||||
|
||||
function PrintResult(name, result) {
|
||||
print(name + '-Generators(Score): ' + result);
|
||||
}
|
||||
|
||||
|
||||
function PrintError(name, error) {
|
||||
PrintResult(name, error);
|
||||
success = false;
|
||||
}
|
||||
|
||||
|
||||
BenchmarkSuite.config.doWarmup = undefined;
|
||||
BenchmarkSuite.config.doDeterministic = undefined;
|
||||
|
||||
BenchmarkSuite.RunSuites({ NotifyResult: PrintResult,
|
||||
NotifyError: PrintError });
|
@ -8,6 +8,40 @@
|
||||
"total": true,
|
||||
"resources": ["base.js"],
|
||||
"tests": [
|
||||
{
|
||||
"name": "Generators",
|
||||
"path": ["Generators"],
|
||||
"main": "run.js",
|
||||
"resources": ["generators.js"],
|
||||
"flags": ["--harmony-function-sent"],
|
||||
"results_regexp": "^%s\\-Generators\\(Score\\): (.+)$"
|
||||
},
|
||||
{
|
||||
"name": "GeneratorsIgnition",
|
||||
"path": ["Generators"],
|
||||
"main": "run.js",
|
||||
"resources": ["generators.js"],
|
||||
"flags": [
|
||||
"--harmony-function-sent",
|
||||
"--ignition",
|
||||
"--ignition-generators"
|
||||
],
|
||||
"results_regexp": "^%s\\-Generators\\(Score\\): (.+)$"
|
||||
},
|
||||
{
|
||||
"name": "GeneratorsIgnitionTurbofan",
|
||||
"path": ["Generators"],
|
||||
"main": "run.js",
|
||||
"resources": ["generators.js"],
|
||||
"flags": [
|
||||
"--harmony-function-sent",
|
||||
"--ignition",
|
||||
"--ignition-generators",
|
||||
"--turbo",
|
||||
"--turbo-from-bytecode"
|
||||
],
|
||||
"results_regexp": "^%s\\-Generators\\(Score\\): (.+)$"
|
||||
},
|
||||
{
|
||||
"name": "RestParameters",
|
||||
"path": ["RestParameters"],
|
||||
|
Loading…
Reference in New Issue
Block a user