| // |reftest| skip |
| /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
| /* |
| * Any copyright is dedicated to the Public Domain. |
| * http://creativecommons.org/licenses/publicdomain/ |
| * Contributor: Jason Orendorff |
| */ |
| |
| //----------------------------------------------------------------------------- |
| |
| var summary = "Create a tree of threads"; |
| |
| var N = 50; // number of threads to create |
| |
| printStatus (summary); |
| |
| function range(start, stop) { |
| var a = []; |
| for (var i = start; i < stop; i++) |
| a.push(i); |
| return a; |
| } |
| |
| function tree(start, stop) { |
| sleep(0.001); |
| |
| if (start >= stop) |
| return []; |
| else if (start + 1 >= stop) |
| return [start]; |
| |
| sleep(0.001); |
| |
| let mid = start + Math.floor((stop - start) / 2); |
| let halves = scatter([function () { return tree(start, mid); }, |
| function () { return tree(mid, stop); }]); |
| sleep(0.001); |
| return Array.prototype.concat.apply([], halves); |
| } |
| |
| var expect; |
| var actual; |
| |
| if (typeof scatter == 'undefined' || typeof sleep == 'undefined') { |
| print('Test skipped. scatter or sleep not defined.'); |
| expect = actual = 'Test skipped.'; |
| } else { |
| expect = range(0, N).toSource(); |
| actual = tree(0, N).toSource(); |
| } |
| |
| reportCompare(expect, actual, summary); |