Math.unit.hx 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. // constants
  2. var zero = 0.0;
  3. var one = 1.0;
  4. //1.0 / zero == Math.POSITIVE_INFINITY;
  5. //-1.0 / zero == Math.NEGATIVE_INFINITY;
  6. (Math.NaN == Math.NaN) == false;
  7. Math.isNaN(Math.NaN) == true;
  8. Math.isNaN(Math.sqrt( -1)) == true;
  9. Math.NEGATIVE_INFINITY == Math.NEGATIVE_INFINITY;
  10. Math.POSITIVE_INFINITY == Math.POSITIVE_INFINITY;
  11. // +
  12. Math.POSITIVE_INFINITY + Math.POSITIVE_INFINITY == Math.POSITIVE_INFINITY;
  13. Math.NEGATIVE_INFINITY + Math.NEGATIVE_INFINITY == Math.NEGATIVE_INFINITY;
  14. Math.POSITIVE_INFINITY + one == Math.POSITIVE_INFINITY;
  15. Math.NEGATIVE_INFINITY + one == Math.NEGATIVE_INFINITY;
  16. Math.isNaN(Math.POSITIVE_INFINITY + Math.NEGATIVE_INFINITY) == true;
  17. Math.isNaN(Math.POSITIVE_INFINITY + Math.NaN) == true;
  18. Math.isNaN(Math.NEGATIVE_INFINITY + Math.NaN) == true;
  19. // -
  20. one - Math.POSITIVE_INFINITY == Math.NEGATIVE_INFINITY;
  21. one - Math.NEGATIVE_INFINITY == Math.POSITIVE_INFINITY;
  22. -Math.POSITIVE_INFINITY == Math.NEGATIVE_INFINITY;
  23. -Math.NEGATIVE_INFINITY == Math.POSITIVE_INFINITY;
  24. Math.POSITIVE_INFINITY - one == Math.POSITIVE_INFINITY;
  25. Math.NEGATIVE_INFINITY - one == Math.NEGATIVE_INFINITY;
  26. Math.isNaN(Math.POSITIVE_INFINITY - Math.POSITIVE_INFINITY ) == true;
  27. Math.isNaN(Math.NEGATIVE_INFINITY - Math.NEGATIVE_INFINITY) == true;
  28. Math.POSITIVE_INFINITY - Math.NEGATIVE_INFINITY == Math.POSITIVE_INFINITY;
  29. Math.NEGATIVE_INFINITY - Math.POSITIVE_INFINITY == Math.NEGATIVE_INFINITY;
  30. Math.isNaN(Math.POSITIVE_INFINITY - Math.NaN) == true;
  31. Math.isNaN(Math.NEGATIVE_INFINITY - Math.NaN) == true;
  32. Math.isNaN(Math.NaN - Math.POSITIVE_INFINITY) == true;
  33. Math.isNaN(Math.NaN - Math.NEGATIVE_INFINITY) == true;
  34. // *
  35. Math.POSITIVE_INFINITY * one == Math.POSITIVE_INFINITY;
  36. Math.NEGATIVE_INFINITY * one == Math.NEGATIVE_INFINITY;
  37. Math.isNaN(Math.POSITIVE_INFINITY * zero) == true;
  38. Math.isNaN(Math.NEGATIVE_INFINITY * zero) == true;
  39. Math.POSITIVE_INFINITY * Math.POSITIVE_INFINITY == Math.POSITIVE_INFINITY;
  40. Math.NEGATIVE_INFINITY * Math.NEGATIVE_INFINITY == Math.POSITIVE_INFINITY;
  41. Math.POSITIVE_INFINITY * Math.NEGATIVE_INFINITY == Math.NEGATIVE_INFINITY;
  42. Math.isNaN(Math.POSITIVE_INFINITY * Math.NaN) == true;
  43. Math.isNaN(Math.NEGATIVE_INFINITY * Math.NaN) == true;
  44. // /
  45. Math.POSITIVE_INFINITY / one == Math.POSITIVE_INFINITY;
  46. Math.NEGATIVE_INFINITY / one == Math.NEGATIVE_INFINITY;
  47. //Math.POSITIVE_INFINITY / zero == Math.POSITIVE_INFINITY;
  48. //Math.NEGATIVE_INFINITY / zero == Math.NEGATIVE_INFINITY;
  49. Math.isNaN(Math.POSITIVE_INFINITY / Math.POSITIVE_INFINITY);
  50. Math.isNaN(Math.POSITIVE_INFINITY / Math.NEGATIVE_INFINITY);
  51. Math.isNaN(Math.NEGATIVE_INFINITY / Math.POSITIVE_INFINITY);
  52. Math.isNaN(Math.NEGATIVE_INFINITY / Math.NEGATIVE_INFINITY);
  53. Math.isNaN(Math.NaN / Math.POSITIVE_INFINITY);
  54. Math.isNaN(Math.POSITIVE_INFINITY / Math.NaN);
  55. Math.isNaN(Math.NaN / Math.POSITIVE_INFINITY);
  56. Math.isNaN(Math.NEGATIVE_INFINITY / Math.NaN);
  57. // abs
  58. Math.abs(-1.223) == 1.223;
  59. Math.abs(1.223) == 1.223;
  60. Math.abs(0) == 0;
  61. Math.isNaN(Math.abs(Math.NaN)) == true;
  62. Math.abs(Math.NEGATIVE_INFINITY) == Math.POSITIVE_INFINITY;
  63. Math.abs(Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
  64. // min
  65. Math.min(0.0, 1.0) == 0.0;
  66. Math.min(0.0, -1.0) == -1.0;
  67. Math.min(0.0, 0.0) == 0.0;
  68. Math.min(1.0, 1.0) == 1.0;
  69. Math.min(Math.NEGATIVE_INFINITY, Math.NEGATIVE_INFINITY) == Math.NEGATIVE_INFINITY;
  70. Math.min(Math.NEGATIVE_INFINITY, Math.POSITIVE_INFINITY) == Math.NEGATIVE_INFINITY;
  71. Math.min(Math.POSITIVE_INFINITY, Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
  72. Math.min(Math.POSITIVE_INFINITY, zero) == zero;
  73. Math.min(Math.NEGATIVE_INFINITY, zero) == Math.NEGATIVE_INFINITY;
  74. Math.isNaN(Math.min(Math.NEGATIVE_INFINITY, Math.NaN)) == true;
  75. Math.isNaN(Math.min(Math.POSITIVE_INFINITY, Math.NaN)) == true;
  76. Math.isNaN(Math.min(Math.NaN, Math.NaN)) == true;
  77. Math.isNaN(Math.min(one, Math.NaN)) == true;
  78. Math.isNaN(Math.min(zero, Math.NaN)) == true;
  79. Math.isNaN(Math.min(Math.NaN, Math.NEGATIVE_INFINITY)) == true;
  80. Math.isNaN(Math.min(Math.NaN,Math.POSITIVE_INFINITY)) == true;
  81. Math.isNaN(Math.min(Math.NaN, one)) == true;
  82. Math.isNaN(Math.min(Math.NaN, zero)) == true;
  83. // max
  84. Math.max(0.0, 1.0) == 1.0;
  85. Math.max(0.0, -1.0) == 0.0;
  86. Math.max(0.0, 0.0) == 0.0;
  87. Math.max(1.0, 1.0) == 1.0;
  88. Math.max(Math.NEGATIVE_INFINITY, Math.NEGATIVE_INFINITY) == Math.NEGATIVE_INFINITY;
  89. Math.max(Math.NEGATIVE_INFINITY, Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
  90. Math.max(Math.POSITIVE_INFINITY, Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
  91. Math.max(Math.POSITIVE_INFINITY, zero) == Math.POSITIVE_INFINITY;
  92. Math.max(Math.NEGATIVE_INFINITY, zero) == 0;
  93. Math.isNaN(Math.max(Math.NEGATIVE_INFINITY, Math.NaN)) == true;
  94. Math.isNaN(Math.max(Math.POSITIVE_INFINITY, Math.NaN)) == true;
  95. Math.isNaN(Math.max(Math.NaN, Math.NaN)) == true;
  96. Math.isNaN(Math.max(one, Math.NaN)) == true;
  97. Math.isNaN(Math.max(zero, Math.NaN)) == true;
  98. Math.isNaN(Math.max(Math.NaN, Math.NEGATIVE_INFINITY)) == true;
  99. Math.isNaN(Math.max(Math.NaN,Math.POSITIVE_INFINITY)) == true;
  100. Math.isNaN(Math.max(Math.NaN, one)) == true;
  101. Math.isNaN(Math.max(Math.NaN, zero)) == true;
  102. // sin
  103. Math.sin(0.0) == 0.0;
  104. Math.sin(Math.PI / 2) == 1.0;
  105. Math.sin(Math.PI) == 0.0;
  106. Math.sin(Math.PI * 3 / 2) == -1.0;
  107. Math.isNaN(Math.sin(Math.POSITIVE_INFINITY)) == true;
  108. Math.isNaN(Math.sin(Math.NEGATIVE_INFINITY)) == true;
  109. Math.isNaN(Math.sin(Math.NaN)) == true;
  110. // cos
  111. Math.cos(0.0) == 1.0;
  112. Math.cos(Math.PI / 2) == 0.0;
  113. Math.cos(Math.PI) == -1.0;
  114. Math.cos(Math.PI * 3 / 2) == 0.0;
  115. Math.isNaN(Math.cos(Math.POSITIVE_INFINITY)) == true;
  116. Math.isNaN(Math.cos(Math.NEGATIVE_INFINITY)) == true;
  117. Math.isNaN(Math.cos(Math.NaN)) == true;
  118. // exp
  119. Math.exp(0.0) == 1.0;
  120. Math.exp(1.0) == 2.7182818284590452353602874713527;
  121. Math.exp(Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
  122. Math.exp(Math.NEGATIVE_INFINITY) == 0.0;
  123. Math.isNaN(Math.exp(Math.NaN)) == true;
  124. // log
  125. Math.log(0.0) == Math.NEGATIVE_INFINITY;
  126. Math.log(2.7182818284590452353602874713527) == 1.0;
  127. Math.isNaN(Math.log( -1.0)) == true;
  128. Math.isNaN(Math.log(Math.NaN)) == true;
  129. Math.isNaN(Math.log(Math.NEGATIVE_INFINITY)) == true;
  130. Math.log(Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
  131. // exp + log
  132. var floats = [1.33, 39232.911, 12.0, -112.999992, 99999.99999, 0.0, Math.NEGATIVE_INFINITY, Math.POSITIVE_INFINITY];
  133. for (f in floats) {
  134. Math.log(Math.exp(f)) == f;
  135. }
  136. // sqrt
  137. Math.sqrt(4.0) == 2;
  138. Math.sqrt(0.0) == 0.0;
  139. Math.sqrt(Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
  140. Math.isNaN(Math.sqrt(Math.NEGATIVE_INFINITY)) == true;
  141. Math.isNaN(Math.sqrt(Math.NaN)) == true;
  142. Math.isNaN(Math.sqrt( -1.0)) == true;
  143. // round
  144. Math.round(0.0) == 0;
  145. Math.round(0.1) == 0;
  146. Math.round(0.4999) == 0;
  147. Math.round(0.5) == 1;
  148. Math.round(1.0) == 1;
  149. Math.round(1.499) == 1;
  150. Math.round(-0.1) == 0;
  151. Math.round(-0.4999) == 0;
  152. Math.round(-0.5) == 0;
  153. Math.round(-0.50001) == -1;
  154. Math.round(-1.0) == -1;
  155. Math.round(-1.499) == -1;
  156. Math.round(-1.5) == -1;
  157. Math.round( -1.50001) == -2;
  158. Math.fround(Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
  159. Math.fround(Math.NEGATIVE_INFINITY) == Math.NEGATIVE_INFINITY;
  160. Math.isNaN(Math.fround(Math.NaN)) == true;
  161. // floor
  162. Math.floor(0.0) == 0;
  163. Math.floor(0.9999) == 0;
  164. Math.floor(1.0) == 1;
  165. Math.floor( -0.0001) == -1;
  166. Math.floor( -1.0) == -1;
  167. Math.floor( -1.0001) == -2;
  168. Math.ffloor(Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
  169. Math.ffloor(Math.NEGATIVE_INFINITY) == Math.NEGATIVE_INFINITY;
  170. Math.isNaN(Math.ffloor(Math.NaN)) == true;
  171. // ceil
  172. Math.ceil(0.0) == 0;
  173. Math.ceil(-0.9999) == 0;
  174. Math.ceil(-1.0) == -1;
  175. Math.ceil( 0.0001) == 1;
  176. Math.ceil( 1.0) == 1;
  177. Math.ceil( 1.0001) == 2;
  178. Math.fceil(Math.POSITIVE_INFINITY) == Math.POSITIVE_INFINITY;
  179. Math.fceil(Math.NEGATIVE_INFINITY) == Math.NEGATIVE_INFINITY;
  180. Math.isNaN(Math.fceil(Math.NaN)) == true;
  181. // random
  182. // not much to test here...
  183. // isFinite
  184. Math.isFinite(Math.POSITIVE_INFINITY) == false;
  185. Math.isFinite(Math.NEGATIVE_INFINITY) == false;
  186. Math.isFinite(Math.NaN) == false;
  187. Math.isFinite(0.0) == true;
  188. // isNaN
  189. Math.isNaN(Math.POSITIVE_INFINITY) == false;
  190. Math.isNaN(Math.NEGATIVE_INFINITY) == false;
  191. Math.isNaN(Math.NaN) == true;
  192. Math.isNaN(0.0) == false;