選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

TestMathX.java 32KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. /*
  18. * Created on May 23, 2005
  19. *
  20. */
  21. package org.apache.poi.ss.formula.functions;
  22. import java.lang.reflect.Constructor;
  23. import org.apache.poi.ss.formula.functions.XYNumericFunction.Accumulator;
  24. /**
  25. * @author Amol S. Deshmukh < amolweb at ya hoo dot com >
  26. *
  27. */
  28. public class TestMathX extends AbstractNumericTestCase {
  29. public void testAcosh() {
  30. double d = 0;
  31. d = MathX.acosh(0);
  32. assertTrue("Acosh 0 is NaN", Double.isNaN(d));
  33. d = MathX.acosh(1);
  34. assertEquals("Acosh 1 ", 0, d);
  35. d = MathX.acosh(-1);
  36. assertTrue("Acosh -1 is NaN", Double.isNaN(d));
  37. d = MathX.acosh(100);
  38. assertEquals("Acosh 100 ", 5.298292366d, d);
  39. d = MathX.acosh(101.001);
  40. assertEquals("Acosh 101.001 ", 5.308253091d, d);
  41. d = MathX.acosh(200000);
  42. assertEquals("Acosh 200000 ", 12.89921983d, d);
  43. }
  44. public void testAsinh() {
  45. double d = 0;
  46. d = MathX.asinh(0);
  47. assertEquals("asinh 0", d, 0);
  48. d = MathX.asinh(1);
  49. assertEquals("asinh 1 ", 0.881373587, d);
  50. d = MathX.asinh(-1);
  51. assertEquals("asinh -1 ", -0.881373587, d);
  52. d = MathX.asinh(-100);
  53. assertEquals("asinh -100 ", -5.298342366, d);
  54. d = MathX.asinh(100);
  55. assertEquals("asinh 100 ", 5.298342366, d);
  56. d = MathX.asinh(200000);
  57. assertEquals("asinh 200000", 12.899219826096400, d);
  58. d = MathX.asinh(-200000);
  59. assertEquals("asinh -200000 ", -12.899223853137, d);
  60. }
  61. public void testAtanh() {
  62. double d = 0;
  63. d = MathX.atanh(0);
  64. assertEquals("atanh 0", d, 0);
  65. d = MathX.atanh(1);
  66. assertEquals("atanh 1 ", Double.POSITIVE_INFINITY, d);
  67. d = MathX.atanh(-1);
  68. assertEquals("atanh -1 ", Double.NEGATIVE_INFINITY, d);
  69. d = MathX.atanh(-100);
  70. assertEquals("atanh -100 ", Double.NaN, d);
  71. d = MathX.atanh(100);
  72. assertEquals("atanh 100 ", Double.NaN, d);
  73. d = MathX.atanh(200000);
  74. assertEquals("atanh 200000", Double.NaN, d);
  75. d = MathX.atanh(-200000);
  76. assertEquals("atanh -200000 ", Double.NaN, d);
  77. d = MathX.atanh(0.1);
  78. assertEquals("atanh 0.1", 0.100335348, d);
  79. d = MathX.atanh(-0.1);
  80. assertEquals("atanh -0.1 ", -0.100335348, d);
  81. }
  82. public void testCosh() {
  83. double d = 0;
  84. d = MathX.cosh(0);
  85. assertEquals("cosh 0", 1, d);
  86. d = MathX.cosh(1);
  87. assertEquals("cosh 1 ", 1.543080635, d);
  88. d = MathX.cosh(-1);
  89. assertEquals("cosh -1 ", 1.543080635, d);
  90. d = MathX.cosh(-100);
  91. assertEquals("cosh -100 ", 1.344058570908070E+43, d);
  92. d = MathX.cosh(100);
  93. assertEquals("cosh 100 ", 1.344058570908070E+43, d);
  94. d = MathX.cosh(15);
  95. assertEquals("cosh 15", 1634508.686, d);
  96. d = MathX.cosh(-15);
  97. assertEquals("cosh -15 ", 1634508.686, d);
  98. d = MathX.cosh(0.1);
  99. assertEquals("cosh 0.1", 1.005004168, d);
  100. d = MathX.cosh(-0.1);
  101. assertEquals("cosh -0.1 ", 1.005004168, d);
  102. }
  103. public void testTanh() {
  104. double d = 0;
  105. d = MathX.tanh(0);
  106. assertEquals("tanh 0", 0, d);
  107. d = MathX.tanh(1);
  108. assertEquals("tanh 1 ", 0.761594156, d);
  109. d = MathX.tanh(-1);
  110. assertEquals("tanh -1 ", -0.761594156, d);
  111. d = MathX.tanh(-100);
  112. assertEquals("tanh -100 ", -1, d);
  113. d = MathX.tanh(100);
  114. assertEquals("tanh 100 ", 1, d);
  115. d = MathX.tanh(15);
  116. assertEquals("tanh 15", 1, d);
  117. d = MathX.tanh(-15);
  118. assertEquals("tanh -15 ", -1, d);
  119. d = MathX.tanh(0.1);
  120. assertEquals("tanh 0.1", 0.099667995, d);
  121. d = MathX.tanh(-0.1);
  122. assertEquals("tanh -0.1 ", -0.099667995, d);
  123. }
  124. public void testMax() {
  125. double[] d = new double[100];
  126. d[0] = 1.1; d[1] = 2.1; d[2] = 3.1; d[3] = 4.1;
  127. d[4] = 5.1; d[5] = 6.1; d[6] = 7.1; d[7] = 8.1;
  128. d[8] = 9.1; d[9] = 10.1; d[10] = 11.1; d[11] = 12.1;
  129. d[12] = 13.1; d[13] = 14.1; d[14] = 15.1; d[15] = 16.1;
  130. d[16] = 17.1; d[17] = 18.1; d[18] = 19.1; d[19] = 20.1;
  131. double m = MathX.max(d);
  132. assertEquals("Max ", 20.1, m);
  133. d = new double[1000];
  134. m = MathX.max(d);
  135. assertEquals("Max ", 0, m);
  136. d[0] = -1.1; d[1] = 2.1; d[2] = -3.1; d[3] = 4.1;
  137. d[4] = -5.1; d[5] = 6.1; d[6] = -7.1; d[7] = 8.1;
  138. d[8] = -9.1; d[9] = 10.1; d[10] = -11.1; d[11] = 12.1;
  139. d[12] = -13.1; d[13] = 14.1; d[14] = -15.1; d[15] = 16.1;
  140. d[16] = -17.1; d[17] = 18.1; d[18] = -19.1; d[19] = 20.1;
  141. m = MathX.max(d);
  142. assertEquals("Max ", 20.1, m);
  143. d = new double[20];
  144. d[0] = -1.1; d[1] = -2.1; d[2] = -3.1; d[3] = -4.1;
  145. d[4] = -5.1; d[5] = -6.1; d[6] = -7.1; d[7] = -8.1;
  146. d[8] = -9.1; d[9] = -10.1; d[10] = -11.1; d[11] = -12.1;
  147. d[12] = -13.1; d[13] = -14.1; d[14] = -15.1; d[15] = -16.1;
  148. d[16] = -17.1; d[17] = -18.1; d[18] = -19.1; d[19] = -20.1;
  149. m = MathX.max(d);
  150. assertEquals("Max ", -1.1, m);
  151. }
  152. public void testMin() {
  153. double[] d = new double[100];
  154. d[0] = 1.1; d[1] = 2.1; d[2] = 3.1; d[3] = 4.1;
  155. d[4] = 5.1; d[5] = 6.1; d[6] = 7.1; d[7] = 8.1;
  156. d[8] = 9.1; d[9] = 10.1; d[10] = 11.1; d[11] = 12.1;
  157. d[12] = 13.1; d[13] = 14.1; d[14] = 15.1; d[15] = 16.1;
  158. d[16] = 17.1; d[17] = 18.1; d[18] = 19.1; d[19] = 20.1;
  159. double m = MathX.min(d);
  160. assertEquals("Min ", 0, m);
  161. d = new double[20];
  162. d[0] = 1.1; d[1] = 2.1; d[2] = 3.1; d[3] = 4.1;
  163. d[4] = 5.1; d[5] = 6.1; d[6] = 7.1; d[7] = 8.1;
  164. d[8] = 9.1; d[9] = 10.1; d[10] = 11.1; d[11] = 12.1;
  165. d[12] = 13.1; d[13] = 14.1; d[14] = 15.1; d[15] = 16.1;
  166. d[16] = 17.1; d[17] = 18.1; d[18] = 19.1; d[19] = 20.1;
  167. m = MathX.min(d);
  168. assertEquals("Min ", 1.1, m);
  169. d = new double[1000];
  170. m = MathX.min(d);
  171. assertEquals("Min ", 0, m);
  172. d[0] = -1.1; d[1] = 2.1; d[2] = -3.1; d[3] = 4.1;
  173. d[4] = -5.1; d[5] = 6.1; d[6] = -7.1; d[7] = 8.1;
  174. d[8] = -9.1; d[9] = 10.1; d[10] = -11.1; d[11] = 12.1;
  175. d[12] = -13.1; d[13] = 14.1; d[14] = -15.1; d[15] = 16.1;
  176. d[16] = -17.1; d[17] = 18.1; d[18] = -19.1; d[19] = 20.1;
  177. m = MathX.min(d);
  178. assertEquals("Min ", -19.1, m);
  179. d = new double[20];
  180. d[0] = -1.1; d[1] = -2.1; d[2] = -3.1; d[3] = -4.1;
  181. d[4] = -5.1; d[5] = -6.1; d[6] = -7.1; d[7] = -8.1;
  182. d[8] = -9.1; d[9] = -10.1; d[10] = -11.1; d[11] = -12.1;
  183. d[12] = -13.1; d[13] = -14.1; d[14] = -15.1; d[15] = -16.1;
  184. d[16] = -17.1; d[17] = -18.1; d[18] = -19.1; d[19] = -20.1;
  185. m = MathX.min(d);
  186. assertEquals("Min ", -20.1, m);
  187. }
  188. public void testProduct() {
  189. assertEquals("Product ", 0, MathX.product(null));
  190. assertEquals("Product ", 0, MathX.product(new double[] {}));
  191. assertEquals("Product ", 0, MathX.product(new double[] {1, 0}));
  192. assertEquals("Product ", 1, MathX.product(new double[] { 1 }));
  193. assertEquals("Product ", 1, MathX.product(new double[] { 1, 1 }));
  194. assertEquals("Product ", 10, MathX.product(new double[] { 10, 1 }));
  195. assertEquals("Product ", -2, MathX.product(new double[] { 2, -1 }));
  196. assertEquals("Product ", 99988000209999d, MathX.product(new double[] { 99999, 99999, 9999 }));
  197. double[] d = new double[100];
  198. d[0] = 1.1; d[1] = 2.1; d[2] = 3.1; d[3] = 4.1;
  199. d[4] = 5.1; d[5] = 6.1; d[6] = 7.1; d[7] = 8.1;
  200. d[8] = 9.1; d[9] = 10.1; d[10] = 11.1; d[11] = 12.1;
  201. d[12] = 13.1; d[13] = 14.1; d[14] = 15.1; d[15] = 16.1;
  202. d[16] = 17.1; d[17] = 18.1; d[18] = 19.1; d[19] = 20.1;
  203. double m = MathX.product(d);
  204. assertEquals("Product ", 0, m);
  205. d = new double[20];
  206. d[0] = 1.1; d[1] = 2.1; d[2] = 3.1; d[3] = 4.1;
  207. d[4] = 5.1; d[5] = 6.1; d[6] = 7.1; d[7] = 8.1;
  208. d[8] = 9.1; d[9] = 10.1; d[10] = 11.1; d[11] = 12.1;
  209. d[12] = 13.1; d[13] = 14.1; d[14] = 15.1; d[15] = 16.1;
  210. d[16] = 17.1; d[17] = 18.1; d[18] = 19.1; d[19] = 20.1;
  211. m = MathX.product(d);
  212. assertEquals("Product ", 3459946360003355534d, m);
  213. d = new double[1000];
  214. m = MathX.product(d);
  215. assertEquals("Product ", 0, m);
  216. d = new double[20];
  217. d[0] = -1.1; d[1] = -2.1; d[2] = -3.1; d[3] = -4.1;
  218. d[4] = -5.1; d[5] = -6.1; d[6] = -7.1; d[7] = -8.1;
  219. d[8] = -9.1; d[9] = -10.1; d[10] = -11.1; d[11] = -12.1;
  220. d[12] = -13.1; d[13] = -14.1; d[14] = -15.1; d[15] = -16.1;
  221. d[16] = -17.1; d[17] = -18.1; d[18] = -19.1; d[19] = -20.1;
  222. m = MathX.product(d);
  223. assertEquals("Product ", 3459946360003355534d, m);
  224. }
  225. public void testMod() {
  226. //example from Excel help
  227. assertEquals(1.0, MathX.mod(3, 2));
  228. assertEquals(1.0, MathX.mod(-3, 2));
  229. assertEquals(-1.0, MathX.mod(3, -2));
  230. assertEquals(-1.0, MathX.mod(-3, -2));
  231. assertEquals(0.0, MathX.mod(0, 2));
  232. assertEquals(Double.NaN, MathX.mod(3, 0));
  233. assertEquals((double) 1.4, MathX.mod(3.4, 2));
  234. assertEquals((double) -1.4, MathX.mod(-3.4, -2));
  235. assertEquals((double) 0.6000000000000001, MathX.mod(-3.4, 2.0));// should actually be 0.6
  236. assertEquals((double) -0.6000000000000001, MathX.mod(3.4, -2.0));// should actually be -0.6
  237. assertEquals(3.0, MathX.mod(3, Double.MAX_VALUE));
  238. assertEquals(2.0, MathX.mod(Double.MAX_VALUE, 3));
  239. // Bugzilla 50033
  240. assertEquals(1.0, MathX.mod(13, 12));
  241. }
  242. public void testNChooseK() {
  243. int n=100;
  244. int k=50;
  245. double d = MathX.nChooseK(n, k);
  246. assertEquals("NChooseK ", 1.00891344545564E29, d);
  247. n = -1; k = 1;
  248. d = MathX.nChooseK(n, k);
  249. assertEquals("NChooseK ", Double.NaN, d);
  250. n = 1; k = -1;
  251. d = MathX.nChooseK(n, k);
  252. assertEquals("NChooseK ", Double.NaN, d);
  253. n = 0; k = 1;
  254. d = MathX.nChooseK(n, k);
  255. assertEquals("NChooseK ", Double.NaN, d);
  256. n = 1; k = 0;
  257. d = MathX.nChooseK(n, k);
  258. assertEquals("NChooseK ", 1, d);
  259. n = 10; k = 9;
  260. d = MathX.nChooseK(n, k);
  261. assertEquals("NChooseK ", 10, d);
  262. n = 10; k = 10;
  263. d = MathX.nChooseK(n, k);
  264. assertEquals("NChooseK ", 1, d);
  265. n = 10; k = 1;
  266. d = MathX.nChooseK(n, k);
  267. assertEquals("NChooseK ", 10, d);
  268. n = 1000; k = 1;
  269. d = MathX.nChooseK(n, k);
  270. assertEquals("NChooseK ", 1000, d); // awesome ;)
  271. n = 1000; k = 2;
  272. d = MathX.nChooseK(n, k);
  273. assertEquals("NChooseK ", 499500, d); // awesome ;)
  274. n = 13; k = 7;
  275. d = MathX.nChooseK(n, k);
  276. assertEquals("NChooseK ", 1716, d);
  277. }
  278. public void testSign() {
  279. final short minus = -1;
  280. final short zero = 0;
  281. final short plus = 1;
  282. double d = 0;
  283. assertEquals("Sign ", minus, MathX.sign(minus));
  284. assertEquals("Sign ", plus, MathX.sign(plus));
  285. assertEquals("Sign ", zero, MathX.sign(zero));
  286. d = 0;
  287. assertEquals("Sign ", zero, MathX.sign(d));
  288. d = -1.000001;
  289. assertEquals("Sign ", minus, MathX.sign(d));
  290. d = -.000001;
  291. assertEquals("Sign ", minus, MathX.sign(d));
  292. d = -1E-200;
  293. assertEquals("Sign ", minus, MathX.sign(d));
  294. d = Double.NEGATIVE_INFINITY;
  295. assertEquals("Sign ", minus, MathX.sign(d));
  296. d = -200.11;
  297. assertEquals("Sign ", minus, MathX.sign(d));
  298. d = -2000000000000.11;
  299. assertEquals("Sign ", minus, MathX.sign(d));
  300. d = 1.000001;
  301. assertEquals("Sign ", plus, MathX.sign(d));
  302. d = .000001;
  303. assertEquals("Sign ", plus, MathX.sign(d));
  304. d = 1E-200;
  305. assertEquals("Sign ", plus, MathX.sign(d));
  306. d = Double.POSITIVE_INFINITY;
  307. assertEquals("Sign ", plus, MathX.sign(d));
  308. d = 200.11;
  309. assertEquals("Sign ", plus, MathX.sign(d));
  310. d = 2000000000000.11;
  311. assertEquals("Sign ", plus, MathX.sign(d));
  312. }
  313. public void testSinh() {
  314. double d = 0;
  315. d = MathX.sinh(0);
  316. assertEquals("sinh 0", 0, d);
  317. d = MathX.sinh(1);
  318. assertEquals("sinh 1 ", 1.175201194, d);
  319. d = MathX.sinh(-1);
  320. assertEquals("sinh -1 ", -1.175201194, d);
  321. d = MathX.sinh(-100);
  322. assertEquals("sinh -100 ", -1.344058570908070E+43, d);
  323. d = MathX.sinh(100);
  324. assertEquals("sinh 100 ", 1.344058570908070E+43, d);
  325. d = MathX.sinh(15);
  326. assertEquals("sinh 15", 1634508.686, d);
  327. d = MathX.sinh(-15);
  328. assertEquals("sinh -15 ", -1634508.686, d);
  329. d = MathX.sinh(0.1);
  330. assertEquals("sinh 0.1", 0.10016675, d);
  331. d = MathX.sinh(-0.1);
  332. assertEquals("sinh -0.1 ", -0.10016675, d);
  333. }
  334. public void testSum() {
  335. double[] d = new double[100];
  336. d[0] = 1.1; d[1] = 2.1; d[2] = 3.1; d[3] = 4.1;
  337. d[4] = 5.1; d[5] = 6.1; d[6] = 7.1; d[7] = 8.1;
  338. d[8] = 9.1; d[9] = 10.1; d[10] = 11.1; d[11] = 12.1;
  339. d[12] = 13.1; d[13] = 14.1; d[14] = 15.1; d[15] = 16.1;
  340. d[16] = 17.1; d[17] = 18.1; d[18] = 19.1; d[19] = 20.1;
  341. double s = MathX.sum(d);
  342. assertEquals("Sum ", 212, s);
  343. d = new double[1000];
  344. s = MathX.sum(d);
  345. assertEquals("Sum ", 0, s);
  346. d[0] = -1.1; d[1] = 2.1; d[2] = -3.1; d[3] = 4.1;
  347. d[4] = -5.1; d[5] = 6.1; d[6] = -7.1; d[7] = 8.1;
  348. d[8] = -9.1; d[9] = 10.1; d[10] = -11.1; d[11] = 12.1;
  349. d[12] = -13.1; d[13] = 14.1; d[14] = -15.1; d[15] = 16.1;
  350. d[16] = -17.1; d[17] = 18.1; d[18] = -19.1; d[19] = 20.1;
  351. s = MathX.sum(d);
  352. assertEquals("Sum ", 10, s);
  353. d[0] = -1.1; d[1] = -2.1; d[2] = -3.1; d[3] = -4.1;
  354. d[4] = -5.1; d[5] = -6.1; d[6] = -7.1; d[7] = -8.1;
  355. d[8] = -9.1; d[9] = -10.1; d[10] = -11.1; d[11] = -12.1;
  356. d[12] = -13.1; d[13] = -14.1; d[14] = -15.1; d[15] = -16.1;
  357. d[16] = -17.1; d[17] = -18.1; d[18] = -19.1; d[19] = -20.1;
  358. s = MathX.sum(d);
  359. assertEquals("Sum ", -212, s);
  360. }
  361. public void testSumsq() {
  362. double[] d = new double[100];
  363. d[0] = 1.1; d[1] = 2.1; d[2] = 3.1; d[3] = 4.1;
  364. d[4] = 5.1; d[5] = 6.1; d[6] = 7.1; d[7] = 8.1;
  365. d[8] = 9.1; d[9] = 10.1; d[10] = 11.1; d[11] = 12.1;
  366. d[12] = 13.1; d[13] = 14.1; d[14] = 15.1; d[15] = 16.1;
  367. d[16] = 17.1; d[17] = 18.1; d[18] = 19.1; d[19] = 20.1;
  368. double s = MathX.sumsq(d);
  369. assertEquals("Sumsq ", 2912.2, s);
  370. d = new double[1000];
  371. s = MathX.sumsq(d);
  372. assertEquals("Sumsq ", 0, s);
  373. d[0] = -1.1; d[1] = 2.1; d[2] = -3.1; d[3] = 4.1;
  374. d[4] = -5.1; d[5] = 6.1; d[6] = -7.1; d[7] = 8.1;
  375. d[8] = -9.1; d[9] = 10.1; d[10] = -11.1; d[11] = 12.1;
  376. d[12] = -13.1; d[13] = 14.1; d[14] = -15.1; d[15] = 16.1;
  377. d[16] = -17.1; d[17] = 18.1; d[18] = -19.1; d[19] = 20.1;
  378. s = MathX.sumsq(d);
  379. assertEquals("Sumsq ", 2912.2, s);
  380. d[0] = -1.1; d[1] = -2.1; d[2] = -3.1; d[3] = -4.1;
  381. d[4] = -5.1; d[5] = -6.1; d[6] = -7.1; d[7] = -8.1;
  382. d[8] = -9.1; d[9] = -10.1; d[10] = -11.1; d[11] = -12.1;
  383. d[12] = -13.1; d[13] = -14.1; d[14] = -15.1; d[15] = -16.1;
  384. d[16] = -17.1; d[17] = -18.1; d[18] = -19.1; d[19] = -20.1;
  385. s = MathX.sumsq(d);
  386. assertEquals("Sumsq ", 2912.2, s);
  387. }
  388. public void testFactorial() {
  389. int n = 0;
  390. double s = 0;
  391. n = 0;
  392. s = MathX.factorial(n);
  393. assertEquals("Factorial ", 1, s);
  394. n = 1;
  395. s = MathX.factorial(n);
  396. assertEquals("Factorial ", 1, s);
  397. n = 10;
  398. s = MathX.factorial(n);
  399. assertEquals("Factorial ", 3628800, s);
  400. n = 99;
  401. s = MathX.factorial(n);
  402. assertEquals("Factorial ", 9.33262154439E+155, s);
  403. n = -1;
  404. s = MathX.factorial(n);
  405. assertEquals("Factorial ", Double.NaN, s);
  406. n = Integer.MAX_VALUE;
  407. s = MathX.factorial(n);
  408. assertEquals("Factorial ", Double.POSITIVE_INFINITY, s);
  409. }
  410. public void testSumx2my2() {
  411. double[] xarr = null;
  412. double[] yarr = null;
  413. xarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  414. yarr = new double[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  415. confirmSumx2my2(xarr, yarr, 100);
  416. xarr = new double[]{-1, -2, -3, -4, -5, -6, -7, -8, -9, -10};
  417. yarr = new double[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  418. confirmSumx2my2(xarr, yarr, 100);
  419. xarr = new double[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  420. yarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  421. confirmSumx2my2(xarr, yarr, -100);
  422. xarr = new double[]{10};
  423. yarr = new double[]{9};
  424. confirmSumx2my2(xarr, yarr, 19);
  425. xarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  426. yarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  427. confirmSumx2my2(xarr, yarr, 0);
  428. }
  429. public void testSumx2py2() {
  430. double[] xarr = null;
  431. double[] yarr = null;
  432. xarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  433. yarr = new double[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  434. confirmSumx2py2(xarr, yarr, 670);
  435. xarr = new double[]{-1, -2, -3, -4, -5, -6, -7, -8, -9, -10};
  436. yarr = new double[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  437. confirmSumx2py2(xarr, yarr, 670);
  438. xarr = new double[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  439. yarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  440. confirmSumx2py2(xarr, yarr, 670);
  441. xarr = new double[]{10};
  442. yarr = new double[]{9};
  443. confirmSumx2py2(xarr, yarr, 181);
  444. xarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  445. yarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  446. confirmSumx2py2(xarr, yarr, 770);
  447. }
  448. public void testSumxmy2() {
  449. double[] xarr = null;
  450. double[] yarr = null;
  451. xarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  452. yarr = new double[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  453. confirmSumxmy2(xarr, yarr, 10);
  454. xarr = new double[]{-1, -2, -3, -4, -5, -6, -7, -8, -9, -10};
  455. yarr = new double[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  456. confirmSumxmy2(xarr, yarr, 1330);
  457. xarr = new double[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  458. yarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  459. confirmSumxmy2(xarr, yarr, 10);
  460. xarr = new double[]{10};
  461. yarr = new double[]{9};
  462. confirmSumxmy2(xarr, yarr, 1);
  463. xarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  464. yarr = new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  465. confirmSumxmy2(xarr, yarr, 0);
  466. }
  467. private static void confirmSumx2my2(double[] xarr, double[] yarr, double expectedResult) {
  468. confirmXY(new Sumx2my2().createAccumulator(), xarr, yarr, expectedResult);
  469. }
  470. private static void confirmSumx2py2(double[] xarr, double[] yarr, double expectedResult) {
  471. confirmXY(new Sumx2py2().createAccumulator(), xarr, yarr, expectedResult);
  472. }
  473. private static void confirmSumxmy2(double[] xarr, double[] yarr, double expectedResult) {
  474. confirmXY(new Sumxmy2().createAccumulator(), xarr, yarr, expectedResult);
  475. }
  476. private static void confirmXY(Accumulator acc, double[] xarr, double[] yarr,
  477. double expectedResult) {
  478. double result = 0.0;
  479. for (int i = 0; i < xarr.length; i++) {
  480. result += acc.accumulate(xarr[i], yarr[i]);
  481. }
  482. assertEquals(expectedResult, result, 0.0);
  483. }
  484. public void testRound() {
  485. double d = 0;
  486. int p = 0;
  487. d = 0; p = 0;
  488. assertEquals("round ", 0, MathX.round(d, p));
  489. d = 10; p = 0;
  490. assertEquals("round ", 10, MathX.round(d, p));
  491. d = 123.23; p = 0;
  492. assertEquals("round ", 123, MathX.round(d, p));
  493. d = -123.23; p = 0;
  494. assertEquals("round ", -123, MathX.round(d, p));
  495. d = 123.12; p = 2;
  496. assertEquals("round ", 123.12, MathX.round(d, p));
  497. d = 88.123459; p = 5;
  498. assertEquals("round ", 88.12346, MathX.round(d, p));
  499. d = 0; p = 2;
  500. assertEquals("round ", 0, MathX.round(d, p));
  501. d = 0; p = -1;
  502. assertEquals("round ", 0, MathX.round(d, p));
  503. d = 0.01; p = -1;
  504. assertEquals("round ", 0, MathX.round(d, p));
  505. d = 123.12; p = -2;
  506. assertEquals("round ", 100, MathX.round(d, p));
  507. d = 88.123459; p = -3;
  508. assertEquals("round ", 0, MathX.round(d, p));
  509. d = 49.00000001; p = -1;
  510. assertEquals("round ", 50, MathX.round(d, p));
  511. d = 149.999999; p = -2;
  512. assertEquals("round ", 100, MathX.round(d, p));
  513. d = 150.0; p = -2;
  514. assertEquals("round ", 200, MathX.round(d, p));
  515. d = 2162.615d; p = 2;
  516. assertEquals("round ", 2162.62d, MathX.round(d, p));
  517. d = 0.049999999999999975d; p = 2;
  518. assertEquals("round ", 0.05d, MathX.round(d, p));
  519. d = 0.049999999999999975d; p = 1;
  520. assertEquals("round ", 0.1d, MathX.round(d, p));
  521. d = Double.NaN; p = 1;
  522. assertEquals("round ", Double.NaN, MathX.round(d, p));
  523. d = Double.POSITIVE_INFINITY; p = 1;
  524. assertEquals("round ", Double.NaN, MathX.round(d, p));
  525. d = Double.NEGATIVE_INFINITY; p = 1;
  526. assertEquals("round ", Double.NaN, MathX.round(d, p));
  527. d = Double.MAX_VALUE; p = 1;
  528. assertEquals("round ", Double.MAX_VALUE, MathX.round(d, p));
  529. d = Double.MIN_VALUE; p = 1;
  530. assertEquals("round ", 0.0d, MathX.round(d, p));
  531. }
  532. public void testRoundDown() {
  533. double d = 0;
  534. int p = 0;
  535. d = 0; p = 0;
  536. assertEquals("roundDown ", 0, MathX.roundDown(d, p));
  537. d = 10; p = 0;
  538. assertEquals("roundDown ", 10, MathX.roundDown(d, p));
  539. d = 123.99; p = 0;
  540. assertEquals("roundDown ", 123, MathX.roundDown(d, p));
  541. d = -123.99; p = 0;
  542. assertEquals("roundDown ", -123, MathX.roundDown(d, p));
  543. d = 123.99; p = 2;
  544. assertEquals("roundDown ", 123.99, MathX.roundDown(d, p));
  545. d = 88.123459; p = 5;
  546. assertEquals("roundDown ", 88.12345, MathX.roundDown(d, p));
  547. d = 0; p = 2;
  548. assertEquals("roundDown ", 0, MathX.roundDown(d, p));
  549. d = 0; p = -1;
  550. assertEquals("roundDown ", 0, MathX.roundDown(d, p));
  551. d = 0.01; p = -1;
  552. assertEquals("roundDown ", 0, MathX.roundDown(d, p));
  553. d = 199.12; p = -2;
  554. assertEquals("roundDown ", 100, MathX.roundDown(d, p));
  555. d = 88.123459; p = -3;
  556. assertEquals("roundDown ", 0, MathX.roundDown(d, p));
  557. d = 99.00000001; p = -1;
  558. assertEquals("roundDown ", 90, MathX.roundDown(d, p));
  559. d = 100.00001; p = -2;
  560. assertEquals("roundDown ", 100, MathX.roundDown(d, p));
  561. d = 150.0; p = -2;
  562. assertEquals("roundDown ", 100, MathX.roundDown(d, p));
  563. d = 0.049999999999999975d; p = 2;
  564. assertEquals("round ", 0.04d, MathX.roundDown(d, p));
  565. d = 0.049999999999999975d; p = 1;
  566. assertEquals("round ", 0.0d, MathX.roundDown(d, p));
  567. d = Double.NaN; p = 1;
  568. assertEquals("round ", Double.NaN, MathX.roundDown(d, p));
  569. d = Double.POSITIVE_INFINITY; p = 1;
  570. assertEquals("round ", Double.NaN, MathX.roundDown(d, p));
  571. d = Double.NEGATIVE_INFINITY; p = 1;
  572. assertEquals("round ", Double.NaN, MathX.roundDown(d, p));
  573. d = Double.MAX_VALUE; p = 1;
  574. assertEquals("round ", Double.MAX_VALUE, MathX.roundDown(d, p));
  575. d = Double.MIN_VALUE; p = 1;
  576. assertEquals("round ", 0.0d, MathX.roundDown(d, p));
  577. }
  578. public void testRoundUp() {
  579. double d = 0;
  580. int p = 0;
  581. d = 0; p = 0;
  582. assertEquals("roundUp ", 0, MathX.roundUp(d, p));
  583. d = 10; p = 0;
  584. assertEquals("roundUp ", 10, MathX.roundUp(d, p));
  585. d = 123.23; p = 0;
  586. assertEquals("roundUp ", 124, MathX.roundUp(d, p));
  587. d = -123.23; p = 0;
  588. assertEquals("roundUp ", -124, MathX.roundUp(d, p));
  589. d = 123.12; p = 2;
  590. assertEquals("roundUp ", 123.12, MathX.roundUp(d, p));
  591. d = 88.123459; p = 5;
  592. assertEquals("roundUp ", 88.12346, MathX.roundUp(d, p));
  593. d = 0; p = 2;
  594. assertEquals("roundUp ", 0, MathX.roundUp(d, p));
  595. d = 0; p = -1;
  596. assertEquals("roundUp ", 0, MathX.roundUp(d, p));
  597. d = 0.01; p = -1;
  598. assertEquals("roundUp ", 10, MathX.roundUp(d, p));
  599. d = 123.12; p = -2;
  600. assertEquals("roundUp ", 200, MathX.roundUp(d, p));
  601. d = 88.123459; p = -3;
  602. assertEquals("roundUp ", 1000, MathX.roundUp(d, p));
  603. d = 49.00000001; p = -1;
  604. assertEquals("roundUp ", 50, MathX.roundUp(d, p));
  605. d = 149.999999; p = -2;
  606. assertEquals("roundUp ", 200, MathX.roundUp(d, p));
  607. d = 150.0; p = -2;
  608. assertEquals("roundUp ", 200, MathX.roundUp(d, p));
  609. d = 0.049999999999999975d; p = 2;
  610. assertEquals("round ", 0.05d, MathX.roundUp(d, p));
  611. d = 0.049999999999999975d; p = 1;
  612. assertEquals("round ", 0.1d, MathX.roundUp(d, p));
  613. d = Double.NaN; p = 1;
  614. assertEquals("round ", Double.NaN, MathX.roundUp(d, p));
  615. d = Double.POSITIVE_INFINITY; p = 1;
  616. assertEquals("round ", Double.NaN, MathX.roundUp(d, p));
  617. d = Double.NEGATIVE_INFINITY; p = 1;
  618. assertEquals("round ", Double.NaN, MathX.roundUp(d, p));
  619. d = Double.MAX_VALUE; p = 1;
  620. assertEquals("round ", Double.MAX_VALUE, MathX.roundUp(d, p));
  621. d = Double.MIN_VALUE; p = 1;
  622. assertEquals("round ", 0.1d, MathX.roundUp(d, p));
  623. }
  624. public void testCeiling() {
  625. double d = 0;
  626. double s = 0;
  627. d = 0; s = 0;
  628. assertEquals("ceiling ", 0, MathX.ceiling(d, s));
  629. d = 1; s = 0;
  630. assertEquals("ceiling ", 0, MathX.ceiling(d, s));
  631. d = 0; s = 1;
  632. assertEquals("ceiling ", 0, MathX.ceiling(d, s));
  633. d = -1; s = 0;
  634. assertEquals("ceiling ", 0, MathX.ceiling(d, s));
  635. d = 0; s = -1;
  636. assertEquals("ceiling ", 0, MathX.ceiling(d, s));
  637. d = 10; s = 1.11;
  638. assertEquals("ceiling ", 11.1, MathX.ceiling(d, s));
  639. d = 11.12333; s = 0.03499;
  640. assertEquals("ceiling ", 11.12682, MathX.ceiling(d, s));
  641. d = -11.12333; s = 0.03499;
  642. assertEquals("ceiling ", Double.NaN, MathX.ceiling(d, s));
  643. d = 11.12333; s = -0.03499;
  644. assertEquals("ceiling ", Double.NaN, MathX.ceiling(d, s));
  645. d = -11.12333; s = -0.03499;
  646. assertEquals("ceiling ", -11.12682, MathX.ceiling(d, s));
  647. d = 100; s = 0.001;
  648. assertEquals("ceiling ", 100, MathX.ceiling(d, s));
  649. d = -0.001; s = -9.99;
  650. assertEquals("ceiling ", -9.99, MathX.ceiling(d, s));
  651. d = 4.42; s = 0.05;
  652. assertEquals("ceiling ", 4.45, MathX.ceiling(d, s));
  653. d = 0.05; s = 4.42;
  654. assertEquals("ceiling ", 4.42, MathX.ceiling(d, s));
  655. d = 0.6666; s = 3.33;
  656. assertEquals("ceiling ", 3.33, MathX.ceiling(d, s));
  657. d = 2d/3; s = 3.33;
  658. assertEquals("ceiling ", 3.33, MathX.ceiling(d, s));
  659. }
  660. public void testFloor() {
  661. double d = 0;
  662. double s = 0;
  663. d = 0; s = 0;
  664. assertEquals("floor ", 0, MathX.floor(d, s));
  665. d = 1; s = 0;
  666. assertEquals("floor ", Double.NaN, MathX.floor(d, s));
  667. d = 0; s = 1;
  668. assertEquals("floor ", 0, MathX.floor(d, s));
  669. d = -1; s = 0;
  670. assertEquals("floor ", Double.NaN, MathX.floor(d, s));
  671. d = 0; s = -1;
  672. assertEquals("floor ", 0, MathX.floor(d, s));
  673. d = 10; s = 1.11;
  674. assertEquals("floor ", 9.99, MathX.floor(d, s));
  675. d = 11.12333; s = 0.03499;
  676. assertEquals("floor ", 11.09183, MathX.floor(d, s));
  677. d = -11.12333; s = 0.03499;
  678. assertEquals("floor ", Double.NaN, MathX.floor(d, s));
  679. d = 11.12333; s = -0.03499;
  680. assertEquals("floor ", Double.NaN, MathX.floor(d, s));
  681. d = -11.12333; s = -0.03499;
  682. assertEquals("floor ", -11.09183, MathX.floor(d, s));
  683. d = 100; s = 0.001;
  684. assertEquals("floor ", 100, MathX.floor(d, s));
  685. d = -0.001; s = -9.99;
  686. assertEquals("floor ", 0, MathX.floor(d, s));
  687. d = 4.42; s = 0.05;
  688. assertEquals("floor ", 4.4, MathX.floor(d, s));
  689. d = 0.05; s = 4.42;
  690. assertEquals("floor ", 0, MathX.floor(d, s));
  691. d = 0.6666; s = 3.33;
  692. assertEquals("floor ", 0, MathX.floor(d, s));
  693. d = 2d/3; s = 3.33;
  694. assertEquals("floor ", 0, MathX.floor(d, s));
  695. }
  696. public void testCoverage() throws Exception {
  697. // get the default constructor
  698. final Constructor<MathX> c = MathX.class.getDeclaredConstructor(new Class[] {});
  699. // make it callable from the outside
  700. c.setAccessible(true);
  701. // call it
  702. c.newInstance((Object[]) null);
  703. }
  704. }