[ARM,MIPS] Skip slow tests
[WebKit-https.git] / JSTests / stress / async-function-declaration-sinking-osrexit.js
1 function shouldBe(expected, actual, msg = "") {
2     if (msg)
3         msg = " for " + msg;
4     if (actual !== expected)
5         throw new Error("bad value" + msg + ": " + actual + ". Expected " + expected);
6 }
7
8 function shouldBeAsync(expected, promise, msg) {
9     let actual;
10     var hadError = false;
11     promise.then(function(value) { actual = value; },
12                  function(error) { hadError = true; actual = error; });
13     drainMicrotasks();
14
15     if (hadError)
16         throw actual;
17
18     shouldBe(expected, actual, msg);
19 }
20
21 var AsyncFunctionPrototype = async function(){}.__proto__;
22
23 function sink (p, q) {
24     async function g(x) { return x; };
25     if (p) { if (q) OSRExit(); return g; }
26     async function f(x) { return x; };
27     return f;
28 }
29 noInline(sink);
30
31 for (var i = 0; i < 10000; ++i) {
32     var f = sink(true, false);
33     shouldBe(f.__proto__, AsyncFunctionPrototype);
34     shouldBeAsync(42, f(42));
35 }
36
37 // At this point, the function should be compiled down to the FTL
38
39 // Check that the function is properly allocated on OSR exit
40 var f = sink(true, true);
41 shouldBe(f.__proto__, AsyncFunctionPrototype);
42 shouldBeAsync(42, f(42));