fieldhoist_sideeffect.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  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 o = {};
  6. function Ctor() {};
  7. Ctor.prototype.valueOf = function() { return o.x++; }
  8. var c = new Ctor();
  9. var test_add = function(o, c)
  10. {
  11. var n = 0;
  12. for (var i = 0; i < 2; i++)
  13. {
  14. n = o.x + c;
  15. }
  16. return n;
  17. }
  18. test_add.test_result1 = 4;
  19. var test_add_assign = function() {
  20. for (var i = 0 ; i < 1 ; i++){
  21. var obj={ x:1.23, z:1 }
  22. for (var j = 0 ; j < 1 ; j++){
  23. obj.x += obj.z
  24. }
  25. }
  26. return obj.x;
  27. }
  28. test_add_assign.test_result1 = 2.23;
  29. var test_sub = function(o, c)
  30. {
  31. var n = 0;
  32. for (var i = 0; i < 2; i++)
  33. {
  34. n = o.x - c;
  35. }
  36. return n;
  37. }
  38. test_sub.test_result1 = 0;
  39. var test_mul = function(o, c)
  40. {
  41. var n = 0;
  42. for (var i = 0; i < 2; i++)
  43. {
  44. n = o.x * c;
  45. }
  46. return n;
  47. }
  48. test_mul.test_result1 = 4;
  49. var test_div = function(o, c)
  50. {
  51. var n = 0;
  52. for (var i = 0; i < 2; i++)
  53. {
  54. n = o.x / c;
  55. }
  56. return n;
  57. }
  58. test_div.test_result1 = 1;
  59. var test_mod = function(o, c)
  60. {
  61. var n = 0;
  62. for (var i = 0; i < 2; i++)
  63. {
  64. n = o.x % c;
  65. }
  66. return n;
  67. }
  68. test_mod.test_result1 = 0;
  69. var test_neg = function(o, c)
  70. {
  71. var n = 0;
  72. for (var i = 0; i < 2; i++)
  73. {
  74. n = -c;
  75. n += o.x;
  76. }
  77. return n;
  78. }
  79. test_neg.test_result1 = 1;
  80. var test_bitand = function(o, c)
  81. {
  82. var n = 0;
  83. for (var i = 0; i < 2; i++)
  84. {
  85. n += o.x & c;
  86. }
  87. return n;
  88. }
  89. test_bitand.test_result1 = 3;
  90. var test_bitor = function(o, c)
  91. {
  92. var n = 0;
  93. for (var i = 0; i < 2; i++)
  94. {
  95. n += o.x | c;
  96. }
  97. return n;
  98. }
  99. test_bitor.test_result1 = 3;
  100. var test_bitxor = function(o, c)
  101. {
  102. var n = 0;
  103. for (var i = 0; i < 2; i++)
  104. {
  105. n += o.x ^ c;
  106. }
  107. return n;
  108. }
  109. test_bitxor.test_result1 = 0;
  110. var test_bitnot = function(o, c)
  111. {
  112. var n = 0;
  113. for (var i = 0; i < 2; i++)
  114. {
  115. n += o.x;
  116. n += ~c;
  117. }
  118. return n;
  119. }
  120. test_bitnot.test_result1 = -2;
  121. var test_bitshiftleft = function(o, c)
  122. {
  123. var n = 0;
  124. for (var i = 0; i < 2; i++)
  125. {
  126. n += o.x << c;
  127. }
  128. return n;
  129. }
  130. test_bitshiftleft.test_result1 = 10;
  131. var test_bitshiftright = function(o, c)
  132. {
  133. var n = 0;
  134. for (var i = 0; i < 2; i++)
  135. {
  136. n += (o.x << 10) >> c;
  137. }
  138. return n;
  139. }
  140. test_bitshiftright.test_result1 = 1024;
  141. var test_unsignedbitshiftright = function(o, c)
  142. {
  143. var n = 0;
  144. for (var i = 0; i < 2; i++)
  145. {
  146. n += (-o.x << 10) >>> c;
  147. }
  148. return n;
  149. }
  150. test_unsignedbitshiftright.test_result1 = 3221224448;
  151. var test_less = function(o, c)
  152. {
  153. var n = 0;
  154. for (var i = 0; i < 2; i++)
  155. {
  156. if (o.x < c)
  157. {
  158. n += o.x;
  159. }
  160. else
  161. {
  162. n -= o.x;
  163. }
  164. }
  165. return n;
  166. }
  167. test_less.test_result1 = -5;
  168. var test_less_equal = function(o, c)
  169. {
  170. var n = 0;
  171. for (var i = 0; i < 2; i++)
  172. {
  173. if (o.x <= c)
  174. {
  175. n += o.x;
  176. }
  177. else
  178. {
  179. n -= o.x;
  180. }
  181. }
  182. return n;
  183. }
  184. test_less_equal.test_result1 = 5;
  185. var test_greater = function(o, c)
  186. {
  187. var n = 0;
  188. for (var i = 0; i < 2; i++)
  189. {
  190. if (o.x > c)
  191. {
  192. n += o.x;
  193. }
  194. else
  195. {
  196. n -= o.x;
  197. }
  198. }
  199. return n;
  200. }
  201. test_greater.test_result1 = -5;
  202. var test_greater_equal = function(o, c)
  203. {
  204. var n = 0;
  205. for (var i = 0; i < 2; i++)
  206. {
  207. if (o.x >= c)
  208. {
  209. n += o.x;
  210. }
  211. else
  212. {
  213. n -= o.x;
  214. }
  215. }
  216. return n;
  217. }
  218. test_greater_equal.test_result1 = 5;
  219. var test_equal = function(o, c)
  220. {
  221. var n = 0;
  222. for (var i = 0; i < 2; i++)
  223. {
  224. if (o.x == c)
  225. {
  226. n += o.x;
  227. }
  228. else
  229. {
  230. n -= o.x;
  231. }
  232. }
  233. return n;
  234. }
  235. test_equal.test_result1 = 5;
  236. var test_not_equal = function(o, c)
  237. {
  238. var n = 0;
  239. for (var i = 0; i < 2; i++)
  240. {
  241. if (o.x != c)
  242. {
  243. n += o.x;
  244. }
  245. else
  246. {
  247. n -= o.x;
  248. }
  249. }
  250. return n;
  251. }
  252. test_not_equal.test_result1 = -5;
  253. var test_compare_less = function(o, c)
  254. {
  255. var n = 0;
  256. for (var i = 0; i < 2; i++)
  257. {
  258. var b = o.x < c;
  259. if (b)
  260. {
  261. n += o.x;
  262. }
  263. else
  264. {
  265. n -= o.x;
  266. }
  267. }
  268. return n;
  269. }
  270. test_compare_less.test_result1 = -5;
  271. var test_compare_less_equal = function(o, c)
  272. {
  273. var n = 0;
  274. for (var i = 0; i < 2; i++)
  275. {
  276. var b = o.x <= c;
  277. if (b)
  278. {
  279. n += o.x;
  280. }
  281. else
  282. {
  283. n -= o.x;
  284. }
  285. }
  286. return n;
  287. }
  288. test_compare_less_equal.test_result1 = 5;
  289. var test_compare_greater = function(o, c)
  290. {
  291. var n = 0;
  292. for (var i = 0; i < 2; i++)
  293. {
  294. var b = o.x > c;
  295. if (b)
  296. {
  297. n += o.x;
  298. }
  299. else
  300. {
  301. n -= o.x;
  302. }
  303. }
  304. return n;
  305. }
  306. test_compare_greater.test_result1 = -5;
  307. var test_compare_greater_equal = function(o, c)
  308. {
  309. var n = 0;
  310. for (var i = 0; i < 2; i++)
  311. {
  312. var b = o.x >= c;
  313. if (b)
  314. {
  315. n += o.x;
  316. }
  317. else
  318. {
  319. n -= o.x;
  320. }
  321. }
  322. return n;
  323. }
  324. test_compare_greater_equal.test_result1 = 5;
  325. var test_compare_equal = function(o, c)
  326. {
  327. var n = 0;
  328. for (var i = 0; i < 2; i++)
  329. {
  330. var b = (o.x == c);
  331. if (b)
  332. {
  333. n += o.x;
  334. }
  335. else
  336. {
  337. n -= o.x;
  338. }
  339. }
  340. return n;
  341. }
  342. test_compare_equal.test_result1 = 5;
  343. var test_compare_not_equal = function(o, c)
  344. {
  345. var n = 0;
  346. for (var i = 0; i < 2; i++)
  347. {
  348. var b = (o.x != c);
  349. if (b)
  350. {
  351. n += o.x;
  352. }
  353. else
  354. {
  355. n -= o.x;
  356. }
  357. }
  358. return n;
  359. }
  360. test_compare_not_equal.test_result1 = -5;
  361. Object.defineProperty(this, "getme", {get: function() { WScript.Echo('no!')}});
  362. (function() {
  363. // Try to hoist a property with a getter to verify that we can safely avoid executing the getter in the header.
  364. for (var i = 0; i < 10; i++) {
  365. if (this.undefined) {
  366. var g = getme;
  367. g.x;
  368. }
  369. }
  370. })();
  371. for (var test in this)
  372. {
  373. if (typeof this[test] == "function" && test != "Ctor" && this[test].test_result1 != undefined)
  374. {
  375. o.x = 1;
  376. var ret = this[test](o,c);
  377. if (ret == this[test].test_result1)
  378. {
  379. WScript.Echo("PASS: " + test);
  380. }
  381. else
  382. {
  383. WScript.Echo("FAIL: " + test + ": expected " + this[test].test_result1 + ", got " + ret);
  384. }
  385. }
  386. }