FloatComparison.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
  6. // This tests the fast path for cmxx where either src is type specialized to float
  7. var tests = [
  8. {
  9. name: "NaN equality test",
  10. body: function() {
  11. assert.isTrue(NaN !== NaN);
  12. assert.isTrue(NaN !== 0.5);
  13. assert.isTrue(0.5 !== NaN);
  14. assert.isTrue(NaN != NaN);
  15. assert.isTrue(NaN != 0.5);
  16. assert.isTrue(0.5 != NaN);
  17. assert.isFalse(NaN === NaN);
  18. assert.isFalse(NaN === 0.5);
  19. assert.isFalse(0.5 === NaN);
  20. assert.isFalse(NaN == NaN);
  21. assert.isFalse(NaN == 0.5);
  22. assert.isFalse(0.5 == NaN);
  23. assert.isFalse(NaN > 0.5);
  24. assert.isFalse(NaN >= 0.5);
  25. assert.isFalse(NaN < 0.5);
  26. assert.isFalse(NaN <= 0.5);
  27. }
  28. },
  29. {
  30. name: "Type coercion test",
  31. body: function() {
  32. assert.isTrue('0.5' == 0.5);
  33. assert.isFalse('0.5' === 0.5);
  34. assert.isFalse('NaN' == NaN);
  35. assert.isTrue('NaN' != NaN);
  36. }
  37. },
  38. {
  39. name: "int vs. float",
  40. body: function() {
  41. assert.isFalse(5 == 0.5);
  42. assert.isTrue(5 != 0.5);
  43. assert.isFalse(5 === 0.5);
  44. assert.isTrue(5 !== 0.5);
  45. }
  46. },
  47. {
  48. name: "object vs. float",
  49. body: function() {
  50. assert.isFalse({} == 0.5);
  51. assert.isFalse({} === 0.5);
  52. assert.isTrue({} != 0.5);
  53. assert.isTrue({} !== 0.5);
  54. assert.isFalse({} > 0.5);
  55. assert.isFalse({} >= 0.5);
  56. assert.isFalse({} < 0.5);
  57. assert.isFalse({} <= 0.5);
  58. }
  59. },
  60. {
  61. name: "No float type specialization when operands are not number",
  62. body: function() {
  63. function test0() {
  64. var func2 = function () {
  65. return f32[1];
  66. };
  67. var f32 = new Float32Array();
  68. var f = 100;
  69. for (let i = 0; i < f; i++) {
  70. var id41 = 'caller';
  71. ({ 18: func2() === 'caller' });
  72. }
  73. }
  74. test0();
  75. }
  76. },
  77. {
  78. name: "Bail out on not number, #1",
  79. body: function() {
  80. var f32 = new Float32Array(256);
  81. assert.isTrue(f32[1] !== (typeof 1 != 'number'));
  82. }
  83. },
  84. {
  85. name: "Bail out on not number, #2",
  86. body: function() {
  87. var obj0 = {};
  88. var obj1 = {};
  89. var func3 = function () {
  90. ary = [];
  91. test = function (list1, list2) {
  92. return list1.splice.apply(list1, [
  93. a,
  94. 0
  95. ].concat(list2));
  96. };
  97. test(ary, c === a);
  98. };
  99. var func4 = function () {
  100. return func3();
  101. };
  102. obj1.method1 = func4;
  103. var c = -0;
  104. a = obj0 === 1;
  105. var __loopvar2 = 0;
  106. do {
  107. if (__loopvar2 > 7) {
  108. break;
  109. }
  110. __loopvar2 += 2;
  111. obj1.method1();
  112. } while (obj0);
  113. assert.areEqual(ary, [false]);
  114. }
  115. },
  116. {
  117. name: "Bail out on not number, #3",
  118. body: function() {
  119. function test0() {
  120. var GiantPrintArray = [];
  121. var obj1 = {};
  122. var f64 = new Float64Array(1);
  123. function _callback1tmp() {
  124. return function () {
  125. function v0(arg0, arg1, arg2) {
  126. this.v3 = arg2;
  127. }
  128. function v4() {
  129. var v5 = new v0(test0, test0, obj1 <= 1 !== f64[obj1.prop0 & 1]);
  130. GiantPrintArray.push(v5.v3);
  131. }
  132. v4();
  133. v4();
  134. v4();
  135. };
  136. }
  137. _callback1tmp()();
  138. return GiantPrintArray;
  139. }
  140. assert.areEqual(test0(), [true, true, true]);
  141. assert.areEqual(test0(), [true, true, true]);
  142. assert.areEqual(test0(), [true, true, true]);
  143. }
  144. },
  145. ];
  146. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });