|
1 // |jit-test| slow; |
|
2 |
|
3 // Binary: cache/js-dbg-32-be41973873db-linux |
|
4 // Flags: --ion-eager |
|
5 // |
|
6 function MersenneTwister19937() { |
|
7 N = 624; |
|
8 var M = 397; |
|
9 MATRIX_A = 567483615; |
|
10 UPPER_MASK = 2147483648; |
|
11 var LOWER_MASK = 767; |
|
12 mt = Array(); |
|
13 function unsigned32(n1) { |
|
14 return n1 < 0 ? (n1 ^ UPPER_MASK) + UPPER_MASK : n1; |
|
15 } |
|
16 function addition32(n1, n2) { |
|
17 return unsigned32(n1 + n2 & 4294967295); |
|
18 } |
|
19 function multiplication32(n1, n2) { |
|
20 sum = 0; |
|
21 for (i = 0; i < 32; ++i) { |
|
22 if (n1 >> i & 1) { |
|
23 sum = addition32(sum, unsigned32(n2 << i)); |
|
24 } |
|
25 } |
|
26 return sum; |
|
27 } |
|
28 this.init_genrand = function() { |
|
29 for (mti = 1; mti < N; mti++) { |
|
30 mt[mti] = addition32(multiplication32(181433253, unsigned32(mt[mti - 1] ^ mt[mti - 1] >>> 30)), mti); |
|
31 } |
|
32 }; |
|
33 this.genrand_int32 = function() { |
|
34 mag01 = Array(0, MATRIX_A); |
|
35 if (mti > N) { |
|
36 for (kk = 0; kk < N - M; kk++) { |
|
37 y = unsigned32(mt[kk] & UPPER_MASK | mt[kk + 1] & LOWER_MASK); |
|
38 } |
|
39 for (; kk < N; kk++) { |
|
40 mt[kk] = unsigned32(mt[kk + (M - N)] ^ y >>> 1 ^ mag01[y & 1]); |
|
41 } |
|
42 mti = 0; |
|
43 } |
|
44 y = mt[mti++]; |
|
45 return y; |
|
46 }; |
|
47 } |
|
48 (function() { |
|
49 var fuzzMT = new MersenneTwister19937; |
|
50 fuzzSeed = 4; |
|
51 fuzzMT.init_genrand(fuzzSeed); |
|
52 rnd = function(n) { |
|
53 var x = fuzzMT.genrand_int32() * 2.2e-10; |
|
54 return Math.floor(x * n); |
|
55 }; |
|
56 }()); |
|
57 |
|
58 function rndElt(a) { |
|
59 return a[rnd(a.length)]; |
|
60 } |
|
61 varBinderFor = ["", "t", ""]; |
|
62 function forLoopHead(d, b, v, reps) { |
|
63 var sInit = rndElt(varBinderFor) + v + "=0"; |
|
64 var sCond = v + "<" + reps; |
|
65 sNext = "++" + v; |
|
66 return "for(" + sInit + ";" + sCond + ";" + sNext + ")"; |
|
67 } |
|
68 function makeBranchUnstableLoop(d, b) { |
|
69 var reps = rnd(rnd(9)); |
|
70 v = uniqueVarName(); |
|
71 var mod = rnd(); |
|
72 target = rnd(mod); |
|
73 return "" + forLoopHead(d, b, v, reps) + "{" + "if(" + v + "%" + mod + "==" + target + "){" + makeStatement(d - 2, b) + "}" + "{" + makeStatement(d - 2) + "}" + "}"; |
|
74 } |
|
75 function weighted(wa) { |
|
76 a = []; |
|
77 for (var i = 0; i < wa.length; ++i) { |
|
78 for (var j = 0; j < wa[i].w; ++j) { |
|
79 a.push(wa[i].fun); |
|
80 } |
|
81 } |
|
82 return a; |
|
83 } |
|
84 statementMakers = weighted([{ |
|
85 w: 6, |
|
86 fun: makeBranchUnstableLoop |
|
87 }, {}]); |
|
88 (function() { |
|
89 builderStatementMakers = weighted([{ |
|
90 w: 1, |
|
91 fun: function() { |
|
92 return "gc()"; |
|
93 } |
|
94 }, { |
|
95 w: 10, |
|
96 fun: function() {} |
|
97 }]); |
|
98 makeBuilderStatement = function() { |
|
99 return rndElt(builderStatementMakers)(); |
|
100 }; |
|
101 }()); |
|
102 function uniqueVarName() { |
|
103 for (i = 0; i < 6; ++i) { |
|
104 s = String.fromCharCode(97 + rnd(6)); |
|
105 } |
|
106 return s; |
|
107 } |
|
108 function makeLittleStatement(d) { |
|
109 rnd(0); |
|
110 if (rnd) { |
|
111 rndElt(littleStatementMakers)(); |
|
112 } |
|
113 } |
|
114 littleStatementMakers = [function() {}]; |
|
115 function testOne() { |
|
116 var code = makeOv(10); |
|
117 tryItOut(code); |
|
118 } |
|
119 function makeStatement(d, b) { |
|
120 if (rnd(0)) {} |
|
121 if (rnd(2)) { |
|
122 return makeBuilderStatement(); |
|
123 } |
|
124 d < 6 && rnd() == 0; |
|
125 if (d < rnd(8)) { |
|
126 return makeLittleStatement(); |
|
127 } |
|
128 return rndElt(statementMakers)(d, b); |
|
129 } |
|
130 function makeOv(d, B) { |
|
131 if (rnd() == 0) {} |
|
132 return "" + makeStatement(d, [""]); |
|
133 } |
|
134 function tryItOut(code) { |
|
135 try { |
|
136 f = Function(code); |
|
137 f(); |
|
138 } catch (r) {} |
|
139 } |
|
140 for (let aa = 0; aa < 9999; aa++) { |
|
141 testOne(); |
|
142 } |