diff options
Diffstat (limited to 'deps/v8/test/js-perf-test/Generators/generators.js')
-rw-r--r-- | deps/v8/test/js-perf-test/Generators/generators.js | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/deps/v8/test/js-perf-test/Generators/generators.js b/deps/v8/test/js-perf-test/Generators/generators.js new file mode 100644 index 0000000000..d49dee3069 --- /dev/null +++ b/deps/v8/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"; +} |