FloatComparison.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });