bug6.shrua-3.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. var shouldBailout = false;
  6. var runningJITtedCode = false;
  7. var reuseObjects = false;
  8. var randomGenerator = function(inputseed) {
  9. var seed = inputseed;
  10. return function() {
  11. // Robert Jenkins' 32 bit integer hash function.
  12. // This hash is public domain. (http://burtleburtle.net/bob/hash/integer.html)
  13. seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff;
  14. seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff;
  15. seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff;
  16. seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;
  17. seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff;
  18. seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff;
  19. return (seed & 0xfffffff) / 0x10000000;
  20. };
  21. };;
  22. var intArrayCreatorCount = 0;
  23. function GenerateArray(seed, arrayType, arraySize, missingValuePercent, typeOfDeclaration) {
  24. Math.random = randomGenerator(seed);
  25. var result, codeToExecute, thisArrayName, maxMissingValues = Math.floor(arraySize * missingValuePercent), noOfMissingValuesAdded = 0;
  26. var contents = [];
  27. var isVarArray = arrayType == 'var';
  28. function IsMissingValue(allowedMissingValues) {
  29. return Math.floor(Math.random() * 100) < allowedMissingValues
  30. }
  31. thisArrayName = 'tempIntArr' + intArrayCreatorCount++;
  32. for (var arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) {
  33. if (isVarArray && arrayIndex != 0) {
  34. arrayType = Math.floor(Math.random() * 100) < 50 ? 'int' : 'float';
  35. }
  36. if(noOfMissingValuesAdded < maxMissingValues && IsMissingValue(missingValuePercent)) {
  37. noOfMissingValuesAdded++;
  38. contents.push('');
  39. } else {
  40. var randomValueGenerated;
  41. if (arrayType == 'int') {
  42. randomValueGenerated = Math.floor(Math.random() * seed);
  43. } else if (arrayType == 'float') {
  44. randomValueGenerated = Math.random() * seed;
  45. } else if (arrayType == 'var') {
  46. randomValueGenerated = '\'' + (Math.random() * seed).toString(36) + '\'';
  47. }
  48. contents.push(randomValueGenerated);
  49. }
  50. }
  51. if(contents.length == 1 && typeOfDeclaration == 'constructor') {
  52. contents.push(Math.floor(Math.random() * seed));
  53. }
  54. if(typeOfDeclaration == 'literal') {
  55. codeToExecute = 'var ' + thisArrayName + ' = [' + contents.join() + '];';
  56. } else {
  57. codeToExecute = 'var ' + thisArrayName + ' = new Array(' + contents.join() + ');';
  58. }
  59. codeToExecute += 'result = ' + thisArrayName + ';';
  60. eval(codeToExecute);
  61. return result;
  62. }
  63. ;
  64. function getRoundValue(n) {
  65. if(n % 1 == 0) // int number
  66. return n % 2147483647;
  67. else // float number
  68. return n.toFixed(8);
  69. return n;
  70. };
  71. var print = WScript.Echo;
  72. WScript.Echo = function(n) { if(!n) print(n); else print(formatOutput(n.toString())); };
  73. function formatOutput(n) {{
  74. return n.replace(/[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/g, function(match) {{return getRoundValue(parseFloat(match));}} );
  75. }};
  76. function sumOfArrayElements(prev, curr, index, array) {
  77. return (typeof prev == "number" && typeof curr == "number") ? curr + prev : 0
  78. }
  79. ;
  80. var __counter = 0;
  81. function test0(){
  82. var loopInvariant = shouldBailout ? 12 : 10;
  83. var GiantPrintArray = [];
  84. __counter++;;
  85. function makeArrayLength(x) { if(x < 1 || x > 4294967295 || x != x || isNaN(x) || !isFinite(x)) return 100; else return Math.floor(x) & 0xffff; };;
  86. function leaf() { return 100; };
  87. var obj0 = {};
  88. var arrObj0 = {};
  89. var litObj0 = {prop1: 3.14159265358979};
  90. var arrObj0 = {};
  91. var func0 = function(){
  92. d = (++ obj0.prop0);
  93. d = ((test0.caller) - ((a - a) * (4294967295, a) - 2108033774));
  94. obj0.prop0 = (- ((- -1414475580) * (test0.caller) - (p ^ 1595238567.1)));
  95. return leaf.call(arrObj0 );
  96. };
  97. var func1 = function(){
  98. a <<=func0.call(aliasOfobj0 );
  99. (function(argMath0, argObj1, argMath2){
  100. d |=(obj0.prop0 = (- k));
  101. d <<=(typeof(a) != 'string') ;
  102. a = ((! func0.call(aliasOfobj0 )) * (test0.caller) - (((a === p)&&(k >= a)) - (- argObj1.prop0)));
  103. obj0.prop0 =157225836;
  104. a -=((- (-2067422549 >>> -1636353152.9)) >> ((d &= argObj1.length) * (-2067422549 >>> -1636353152.9) + (k + k)));
  105. })(p,arrObj0,(~ 2147483647));
  106. this.prop0=(- (test0.caller));
  107. return (- (ary.push((k * p + 552020892)))
  108. );
  109. };
  110. var func2 = function(){
  111. return -125;
  112. };
  113. var func3 = function(argArr3,argObj4,argObj5,argArrObj6){
  114. a = func1.call(argObj4 );
  115. obj0.prop0 +=(argArr3.unshift(153045429, func1.call(argObj4 ), (! (typeof(-1410448513) == 'string') ), (argArr3.reverse()), (test0.caller), ((-4.64733614747003E+18, p) & func1.call(argObj4 )), (argArr3.reverse()), (! (-2080272368.9 >> -1073741824)), (- (test0.caller)), (test0.caller), (! (-2080272368.9 >> -1073741824)), ((p ^ argObj4.prop0) + (- 153)), obj0.prop0, ((a ^ k) * ((test0.caller) - 1178228778.1))));
  116. d = (- ((obj0.prop0 -= k) * (-8.20260457466577E+18 + (- k))));
  117. return (leaf.call(arrObj0 ) + (- (p + -9.50122264758276E+16)));
  118. };
  119. var func4 = function(){
  120. aliasOfobj0.prop4=a;
  121. aliasOfobj0.prop4 -=(~ (-- aliasOfobj0.prop4));
  122. var uniqobj0 = [''];
  123. var uniqobj1 = uniqobj0[__counter%uniqobj0.length];
  124. uniqobj1.toString();
  125. return (test0.caller);
  126. };
  127. obj0.method0 = func0;
  128. obj0.method1 = obj0.method0;
  129. arrObj0.method0 = obj0.method1;
  130. arrObj0.method1 = obj0.method1;
  131. var ary = new Array(10);
  132. var i8 = new Int8Array(256);
  133. var i16 = new Int16Array(256);
  134. var i32 = new Int32Array(256);
  135. var ui8 = new Uint8Array(256);
  136. var ui16 = new Uint16Array(256);
  137. var ui32 = new Uint32Array(256);
  138. var f32 = new Float32Array(256);
  139. var f64 = new Float64Array(256);
  140. var uic8 = new Uint8ClampedArray(256);
  141. var IntArr0 = [];
  142. var IntArr1 = new Array(968398749,213,-2147483647);
  143. var FloatArr0 = [31,-65142194,688927696,251979442];
  144. var VarArr0 = new Array(arrObj0,-28,580282652,74274812,615692735,498133449,-2,-170);
  145. var a = 7.18833214492778E+17;
  146. var b = 2;
  147. var c = -7.40943319632701E+18;
  148. var d = -163914637;
  149. var e = 1767600395;
  150. var f = 3.67258722953737E+18;
  151. var g = 5.20382937941989E+18;
  152. var h = 57;
  153. var i = -9.90282939910018E+17;
  154. var j = -156825025;
  155. var k = -1179658900.9;
  156. var l = 243;
  157. var m = 1266801686;
  158. var n = -9.00984088258652E+18;
  159. var o = -3.18287498070513E+18;
  160. var p = -4.64827628003843E+18;
  161. var q = -2147483649;
  162. var r = -1118727838.9;
  163. arrObj0[0] = 6.36672072818147E+18;
  164. arrObj0[1] = 135;
  165. arrObj0[2] = -929029250;
  166. arrObj0[3] = 1245041367;
  167. arrObj0[4] = -5.26701184552884E+18;
  168. arrObj0[5] = 2146462342.1;
  169. arrObj0[6] = 2.94930445871878E+16;
  170. arrObj0[7] = -10;
  171. arrObj0[8] = -2147483647;
  172. arrObj0[9] = -227;
  173. arrObj0[10] = 71865530;
  174. arrObj0[11] = 2147483647;
  175. arrObj0[12] = -1918718448.9;
  176. arrObj0[13] = 2.88409576756109E+17;
  177. arrObj0[14] = -796492977;
  178. arrObj0[arrObj0.length-1] = 315591605.1;
  179. arrObj0.length = makeArrayLength(-2147483647);
  180. ary[0] = 180224827;
  181. ary[1] = -252;
  182. ary[2] = 43;
  183. ary[3] = 761200964;
  184. ary[4] = -149924584;
  185. ary[5] = 357066928;
  186. ary[6] = -1029007725;
  187. ary[7] = 65536;
  188. ary[8] = -104;
  189. ary[9] = -1584655723.9;
  190. ary[10] = 2147483650;
  191. ary[11] = -1850992516.9;
  192. ary[12] = -1.73690935785342E+18;
  193. ary[13] = 194;
  194. ary[14] = -220;
  195. ary[ary.length-1] = 1047975887;
  196. ary.length = makeArrayLength(1022565544.1);
  197. var aliasOfobj0 = obj0;;
  198. var aliasOfVarArr0 = VarArr0;;
  199. this.prop0 = 186;
  200. obj0.prop0 = 170;
  201. obj0.length = makeArrayLength(4294967297);
  202. aliasOfobj0.prop0 = 4.1347939449402E+18;
  203. aliasOfobj0.length = makeArrayLength(639922501);
  204. arrObj0.prop0 = -103;
  205. arrObj0.length = makeArrayLength(0);
  206. aliasOfobj0.prop4 = -430662160.9;
  207. IntArr0[IntArr0.length] = 774590552;
  208. IntArr0[6] = 215;
  209. IntArr0[0] = 8.2967774148005E+18;
  210. IntArr0[5] = 54835619;
  211. IntArr0[4] = 1;
  212. IntArr0[2] = 1003589260;
  213. IntArr0[3] = -85;
  214. IntArr1[5] = -1389274251;
  215. IntArr1[4] = 3;
  216. IntArr1[3] = 60;
  217. f = (typeof(k) != 'undefined') ;
  218. var uniqobj2 = [arrObj0, obj0, obj0, obj0];
  219. var uniqobj3 = uniqobj2[__counter%uniqobj2.length];
  220. uniqobj3.method0();
  221. d = (p - (test0.caller));
  222. a +=(((leaf.call(arrObj0 ) + (- (p + -9.50122264758276E+16))) | (a * (k + k))) >> (a ^= (typeof(k) != 'number') ));
  223. obj0.prop0 -=(typeof(p) != 'boolean') ;
  224. aliasOfobj0.prop4 = (typeof(a) == 'boolean') ;
  225. a +=(typeof(k) != 'object') ;
  226. aliasOfobj0.prop4 = ((((leaf.call(arrObj0 ) + (- (p + -9.50122264758276E+16))) | (a * (k + k))) >> (a ^= (typeof(k) != 'number') )) ^ (typeof(a) == 'boolean') );
  227. obj0.prop0 = ((- (-657539943 << 114)) | (typeof(k) == 'undefined') );
  228. obj0.prop0 -=(- ((k == k)||(a !== p)));
  229. if(((- ((k != a)&&(k <= p))) === ((k << k) * ((obj0.prop0 -= p) - (obj0.prop0 += -4.93175485795449E+18))))) {
  230. a = p;
  231. obj0.method0.call(obj0 );
  232. function func5 () {
  233. this.prop0 = (ary.push())
  234. ;
  235. }
  236. var uniqobj4 = new func5();
  237. d -=(332129343 >> (- (ary.push())
  238. ));
  239. uniqobj4.prop1=func4;
  240. obj0.prop0 = arrObj0.method0.call(obj0 );
  241. ary0 = arguments;
  242. obj0.prop0 >>=(((-- d)) & arrObj0.method0.call(obj0 ));
  243. obj0.prop3 = (typeof(k) == 'string') ;
  244. d = obj0.method1.call(uniqobj4 );
  245. arrObj0.method1.call(obj0 );
  246. var uniqobj5 = [''];
  247. uniqobj5[__counter%uniqobj5.length].toString();
  248. a +=((IntArr1.shift()) - 51);
  249. obj0.prop4 = ((-- d) * ((~ (- -710887009)) + (~ obj0.method0.call(aliasOfobj0 ))));
  250. uniqobj4.prop0 =((f32[(49) & 255] + (typeof(m) != 'number') ), (- (~ k)));
  251. d >>=((obj0.prop0 > l)||(uniqobj4.prop0 == obj0.prop4));
  252. obj0.prop0 &=func0.call(aliasOfobj0 );
  253. aliasOfobj0.prop0 <<=(~ k);
  254. }
  255. else {
  256. d = (obj0.prop0 -= ((test0.caller) | -232));
  257. a <<=810624396;
  258. a -=(((test0.caller) & (IntArr1.reverse())) * (func1.call(litObj0 ) + (- e)));
  259. a = (((typeof(aliasOfobj0.prop4) != null) * (-240 - d) + (a |= p)) + (j === f));
  260. d |=(test0.caller);
  261. obj0.prop0 |=(-- d);
  262. a -=obj0.prop0;
  263. obj0.prop0 -=(test0.caller);
  264. d = (77784693 + ((- -1710585.9) + (obj0.prop0 + 1777722759.1)));
  265. a >>=((typeof(f) == 'undefined') * ((- (~ 4294967297)) + (typeof(f) == 'string') ));
  266. this.prop2 = (((f + f) * ((d++ ) + (232 * f + obj0.prop0))) | (- (~ arrObj0.length)));
  267. litObj0.prop0={15: (~ arrObj0.length), 18: (parseInt("-0x72016C28") * (obj0.prop0 - (3.25814039531148E+18 - 880653562))), prop0: 166, prop1: ((~ 809498557), (f === arrObj0.length), (test0.caller), (arrObj0.length * (obj0.prop0 + f)), (- 92), (2147483647 - obj0.prop0)), prop2: (- (~ arrObj0.length)), prop3: ((typeof(arrObj0.length) == 'undefined') + (- obj0.prop0)), prop5: (-863285653 + (- -80)), prop6: (parseInt("-0x72016C28") * (obj0.prop0 - (3.25814039531148E+18 - 880653562)))};
  268. arrObj0.prop3 = ((- (typeof(c) == 'number') ) - (arrObj0.length <= f));
  269. litObj0.prop0.prop1 +=obj0.method0.call(this );
  270. arrObj0.prop3 = (~ (- 4294967295));
  271. m = (~ (- 4294967295));
  272. m = (((- -242) - (c * 2025680025.1 + c)) + (func3.call(aliasOfobj0 , VarArr0, aliasOfobj0, litObj0, arrObj0) ^ (842191728 < arrObj0.length)));
  273. litObj0.prop0.prop6 &=((test0.caller) - (-- litObj0.prop0.prop2));
  274. var uniqobj6 = [''];
  275. uniqobj6[__counter%uniqobj6.length].toString();
  276. }
  277. g +=(- ((k != a)&&(k <= p)));
  278. this.prop3 = ((((c == c)&&(c === arrObj0.length)) + (201 + 963281167)) - 5.91645921888607E+18);
  279. litObj0.prop2 = ((test0.caller) - (typeof(f) == 'number') );
  280. var uniqobj7 = [''];
  281. var uniqobj8 = uniqobj7[__counter%uniqobj7.length];
  282. uniqobj8.toString();
  283. m <<=(f === obj0.prop0);
  284. arrObj0.prop0 = (((3 ^ arrObj0.length) * -9.01970240007522E+18 + (test0.caller)) - ((- f) + ((arrObj0.length > arrObj0.length)||(c == arrObj0.length))));
  285. g = ((c == c)&&(c < c));
  286. g ^=func4.call(arrObj0 );
  287. arrObj0.prop0 = (test0.caller);
  288. WScript.Echo('a = ' + (a|0));
  289. WScript.Echo('b = ' + (b|0));
  290. WScript.Echo('c = ' + (c|0));
  291. WScript.Echo('d = ' + (d|0));
  292. WScript.Echo('e = ' + (e|0));
  293. WScript.Echo('f = ' + (f|0));
  294. WScript.Echo('g = ' + (g|0));
  295. WScript.Echo('h = ' + (h|0));
  296. WScript.Echo('i = ' + (i|0));
  297. WScript.Echo('j = ' + (j|0));
  298. WScript.Echo('k = ' + (k|0));
  299. WScript.Echo('l = ' + (l|0));
  300. WScript.Echo('m = ' + (m|0));
  301. WScript.Echo('n = ' + (n|0));
  302. WScript.Echo('o = ' + (o|0));
  303. WScript.Echo('p = ' + (p|0));
  304. WScript.Echo('q = ' + (q|0));
  305. WScript.Echo('r = ' + (r|0));
  306. WScript.Echo('this.prop0 = ' + (this.prop0|0));
  307. WScript.Echo('obj0.prop0 = ' + (obj0.prop0|0));
  308. WScript.Echo('obj0.length = ' + (obj0.length|0));
  309. WScript.Echo('aliasOfobj0.prop0 = ' + (aliasOfobj0.prop0|0));
  310. WScript.Echo('aliasOfobj0.length = ' + (aliasOfobj0.length|0));
  311. WScript.Echo('arrObj0.prop0 = ' + (arrObj0.prop0|0));
  312. WScript.Echo('arrObj0.length = ' + (arrObj0.length|0));
  313. WScript.Echo('aliasOfobj0.prop4 = ' + (aliasOfobj0.prop4|0));
  314. WScript.Echo('this.prop2 = ' + (this.prop2|0));
  315. WScript.Echo('this.prop3 = ' + (this.prop3|0));
  316. WScript.Echo('litObj0.prop2 = ' + (litObj0.prop2|0));
  317. WScript.Echo('arrObj0[0] = ' + (arrObj0[0]|0));
  318. WScript.Echo('arrObj0[1] = ' + (arrObj0[1]|0));
  319. WScript.Echo('arrObj0[2] = ' + (arrObj0[2]|0));
  320. WScript.Echo('arrObj0[3] = ' + (arrObj0[3]|0));
  321. WScript.Echo('arrObj0[4] = ' + (arrObj0[4]|0));
  322. WScript.Echo('arrObj0[5] = ' + (arrObj0[5]|0));
  323. WScript.Echo('arrObj0[6] = ' + (arrObj0[6]|0));
  324. WScript.Echo('arrObj0[7] = ' + (arrObj0[7]|0));
  325. WScript.Echo('arrObj0[8] = ' + (arrObj0[8]|0));
  326. WScript.Echo('arrObj0[9] = ' + (arrObj0[9]|0));
  327. WScript.Echo('arrObj0[10] = ' + (arrObj0[10]|0));
  328. WScript.Echo('arrObj0[11] = ' + (arrObj0[11]|0));
  329. WScript.Echo('arrObj0[12] = ' + (arrObj0[12]|0));
  330. WScript.Echo('arrObj0[13] = ' + (arrObj0[13]|0));
  331. WScript.Echo('arrObj0[14] = ' + (arrObj0[14]|0));
  332. WScript.Echo('arrObj0[arrObj0.length-1] = ' + (arrObj0[arrObj0.length-1]|0));
  333. WScript.Echo('arrObj0.length = ' + (arrObj0.length|0));
  334. WScript.Echo('ary[0] = ' + (ary[0]|0));
  335. WScript.Echo('ary[1] = ' + (ary[1]|0));
  336. WScript.Echo('ary[2] = ' + (ary[2]|0));
  337. WScript.Echo('ary[3] = ' + (ary[3]|0));
  338. WScript.Echo('ary[4] = ' + (ary[4]|0));
  339. WScript.Echo('ary[5] = ' + (ary[5]|0));
  340. WScript.Echo('ary[6] = ' + (ary[6]|0));
  341. WScript.Echo('ary[7] = ' + (ary[7]|0));
  342. WScript.Echo('ary[8] = ' + (ary[8]|0));
  343. WScript.Echo('ary[9] = ' + (ary[9]|0));
  344. WScript.Echo('ary[10] = ' + (ary[10]|0));
  345. WScript.Echo('ary[11] = ' + (ary[11]|0));
  346. WScript.Echo('ary[12] = ' + (ary[12]|0));
  347. WScript.Echo('ary[13] = ' + (ary[13]|0));
  348. WScript.Echo('ary[14] = ' + (ary[14]|0));
  349. WScript.Echo('ary[ary.length-1] = ' + (ary[ary.length-1]|0));
  350. WScript.Echo('ary.length = ' + (ary.length|0));
  351. for(var i =0;i<GiantPrintArray.length;i++){
  352. WScript.Echo(GiantPrintArray[i]);
  353. };
  354. WScript.Echo('sumOfary = ' + ary.slice(0, 23).reduce(function(prev, curr) {{ return prev + curr; }},0));
  355. WScript.Echo('subset_of_ary = ' + ary.slice(0, 11));;
  356. WScript.Echo('sumOfIntArr0 = ' + IntArr0.slice(0, 23).reduce(function(prev, curr) {{ return prev + curr; }},0));
  357. WScript.Echo('subset_of_IntArr0 = ' + IntArr0.slice(0, 11));;
  358. WScript.Echo('sumOfIntArr1 = ' + IntArr1.slice(0, 23).reduce(function(prev, curr) {{ return prev + curr; }},0));
  359. WScript.Echo('subset_of_IntArr1 = ' + IntArr1.slice(0, 11));;
  360. WScript.Echo('sumOfFloatArr0 = ' + FloatArr0.slice(0, 23).reduce(function(prev, curr) {{ return prev + curr; }},0));
  361. WScript.Echo('subset_of_FloatArr0 = ' + FloatArr0.slice(0, 11));;
  362. WScript.Echo('sumOfVarArr0 = ' + VarArr0.slice(0, 23).reduce(function(prev, curr) {{ return prev + curr; }},0));
  363. WScript.Echo('subset_of_VarArr0 = ' + VarArr0.slice(0, 11));;
  364. WScript.Echo('sumOfaliasOfVarArr0 = ' + aliasOfVarArr0.slice(0, 23).reduce(function(prev, curr) {{ return prev + curr; }},0));
  365. WScript.Echo('subset_of_aliasOfVarArr0 = ' + aliasOfVarArr0.slice(0, 11));;
  366. };
  367. // generate profile
  368. test0();
  369. // Run Simple JIT
  370. test0();
  371. test0();
  372. // run JITted code
  373. runningJITtedCode = true;
  374. test0();