1. /* ===========================================================
  2. * JFreeChart : a free chart library for the Java(tm) platform
  3. * ===========================================================
  4. *
  5. * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
  6. *
  7. * Project Info: http://www.jfree.org/jfreechart/index.html
  8. *
  9. * This library is free software; you can redistribute it and/or modify it under the terms
  10. * of the GNU Lesser General Public License as published by the Free Software Foundation;
  11. * either version 2.1 of the License, or (at your option) any later version.
  12. *
  13. * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  14. * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  15. * See the GNU Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public License along with this
  18. * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  19. * Boston, MA 02111-1307, USA.
  20. *
  21. * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
  22. * in the United States and other countries.]
  23. *
  24. * --------------------
  25. * StatisticsTests.java
  26. * --------------------
  27. * (C) Copyright 2004, 2005, by Object Refinery Limited and Contributors.
  28. *
  29. * Original Author: David Gilbert (for Object Refinery Limited);
  30. * Contributor(s): -;
  31. *
  32. * $Id: StatisticsTests.java,v 1.3 2005/01/14 17:29:51 mungady Exp $
  33. *
  34. * Changes
  35. * -------
  36. * 25-Mar-2004 : Version 1 (DG);
  37. * 04-Oct-2004 : Eliminated NumberUtils usage (DG);
  38. *
  39. */
  40. package org.jfree.data.statistics.junit;
  41. import java.util.ArrayList;
  42. import java.util.Collections;
  43. import java.util.List;
  44. import junit.framework.Test;
  45. import junit.framework.TestCase;
  46. import junit.framework.TestSuite;
  47. import org.jfree.data.statistics.Statistics;
  48. /**
  49. * Tests for the {@link Statistics} class.
  50. */
  51. public class StatisticsTests extends TestCase {
  52. /**
  53. * Returns the tests as a test suite.
  54. *
  55. * @return The test suite.
  56. */
  57. public static Test suite() {
  58. return new TestSuite(StatisticsTests.class);
  59. }
  60. /**
  61. * Constructs a new set of tests.
  62. *
  63. * @param name the name of the tests.
  64. */
  65. public StatisticsTests(String name) {
  66. super(name);
  67. }
  68. /**
  69. * A simple test for the calculateMean(Collection) method.
  70. */
  71. public void testCalculateMean1() {
  72. List values = new ArrayList();
  73. values.add(new Double(9.0));
  74. values.add(new Double(3.0));
  75. values.add(new Double(2.0));
  76. values.add(new Double(2.0));
  77. double mean = Statistics.calculateMean(values);
  78. assertEquals(4.0, mean, 0.0000001);
  79. }
  80. /**
  81. * A simple test for the calculateMean(Number[]) method.
  82. */
  83. public void testCalculateMean2() {
  84. Number[] values = new Number[3];
  85. values[0] = new Double(1);
  86. values[1] = new Double(2);
  87. values[2] = new Double(3);
  88. double mean = Statistics.calculateMean(values);
  89. assertEquals(2.0, mean, 0.0000001);
  90. }
  91. /**
  92. * A test for the calculateMedian() method.
  93. */
  94. public void testCalculateMedian1() {
  95. List values = new ArrayList();
  96. values.add(new Double(1.0));
  97. double median = Statistics.calculateMedian(values);
  98. assertEquals(1.0, median, 0.0000001);
  99. }
  100. /**
  101. * A test for the calculateMedian() method.
  102. */
  103. public void testCalculateMedian2() {
  104. List values = new ArrayList();
  105. values.add(new Double(2.0));
  106. values.add(new Double(1.0));
  107. double median = Statistics.calculateMedian(values);
  108. assertEquals(1.5, median, 0.0000001);
  109. }
  110. /**
  111. * A test for the calculateMedian() method.
  112. */
  113. public void testCalculateMedian3() {
  114. List values = new ArrayList();
  115. values.add(new Double(1.0));
  116. values.add(new Double(2.0));
  117. values.add(new Double(3.0));
  118. values.add(new Double(6.0));
  119. values.add(new Double(5.0));
  120. values.add(new Double(4.0));
  121. double median = Statistics.calculateMedian(values);
  122. assertEquals(3.5, median, 0.0000001);
  123. }
  124. /**
  125. * A test for the calculateMedian() method.
  126. */
  127. public void testCalculateMedian4() {
  128. List values = new ArrayList();
  129. values.add(new Double(7.0));
  130. values.add(new Double(2.0));
  131. values.add(new Double(3.0));
  132. values.add(new Double(5.0));
  133. values.add(new Double(4.0));
  134. values.add(new Double(6.0));
  135. values.add(new Double(1.0));
  136. double median = Statistics.calculateMedian(values);
  137. assertEquals(4.0, median, 0.0000001);
  138. }
  139. /**
  140. * A test using some real data that caused a problem at one point.
  141. */
  142. public void testCalculateMedian5() {
  143. List values = new ArrayList();
  144. values.add(new Double(11.228692993861783));
  145. values.add(new Double(11.30823353859889));
  146. values.add(new Double(11.75312904769314));
  147. values.add(new Double(11.825102897465314));
  148. values.add(new Double(10.184252778401783));
  149. values.add(new Double(12.207951828057766));
  150. values.add(new Double(10.68841994040566));
  151. values.add(new Double(12.099522004479438));
  152. values.add(new Double(11.508874945056881));
  153. values.add(new Double(12.052517729558513));
  154. values.add(new Double(12.401481645578734));
  155. values.add(new Double(12.185377793028543));
  156. values.add(new Double(10.666372951930315));
  157. values.add(new Double(11.680978041499548));
  158. values.add(new Double(11.06528277406718));
  159. values.add(new Double(11.36876492904596));
  160. values.add(new Double(11.927565516175939));
  161. values.add(new Double(11.39307785978655));
  162. values.add(new Double(11.989603679523857));
  163. values.add(new Double(12.009834360354864));
  164. values.add(new Double(10.653351822461559));
  165. values.add(new Double(11.851776254376754));
  166. values.add(new Double(11.045441544755946));
  167. values.add(new Double(11.993674040560624));
  168. values.add(new Double(12.898219965238944));
  169. values.add(new Double(11.97095782819647));
  170. values.add(new Double(11.73234406745488));
  171. values.add(new Double(11.649006017243991));
  172. values.add(new Double(12.20549704915365));
  173. values.add(new Double(11.799723639384919));
  174. values.add(new Double(11.896208658005628));
  175. values.add(new Double(12.164149111823424));
  176. values.add(new Double(12.042795103513766));
  177. values.add(new Double(12.114839532596426));
  178. values.add(new Double(12.166609097075824));
  179. values.add(new Double(12.183017546225935));
  180. values.add(new Double(11.622009125845342));
  181. values.add(new Double(11.289365786738633));
  182. values.add(new Double(12.462984323671568));
  183. values.add(new Double(11.573494921030598));
  184. values.add(new Double(10.862867940485804));
  185. values.add(new Double(12.018186939664872));
  186. values.add(new Double(10.418046849313018));
  187. values.add(new Double(11.326344465881341));
  188. double median = Statistics.calculateMedian(values, true);
  189. assertEquals(11.812413268425116, median, 0.000001);
  190. Collections.sort(values);
  191. double median2 = Statistics.calculateMedian(values, false);
  192. assertEquals(11.812413268425116, median2, 0.000001);
  193. }
  194. /**
  195. * A test for the calculateMedian() method.
  196. */
  197. public void testCalculateMedian6() {
  198. List values = new ArrayList();
  199. values.add(new Double(7.0));
  200. values.add(new Double(2.0));
  201. values.add(new Double(3.0));
  202. values.add(new Double(5.0));
  203. values.add(new Double(4.0));
  204. values.add(new Double(6.0));
  205. values.add(new Double(1.0));
  206. double median = Statistics.calculateMedian(values, 0, 2);
  207. assertEquals(3.0, median, 0.0000001);
  208. }
  209. /**
  210. * A simple test for the correlation calculation.
  211. */
  212. public void testCorrelation1() {
  213. Number[] data1 = new Number[3];
  214. data1[0] = new Double(1);
  215. data1[1] = new Double(2);
  216. data1[2] = new Double(3);
  217. Number[] data2 = new Number[3];
  218. data2[0] = new Double(1);
  219. data2[1] = new Double(2);
  220. data2[2] = new Double(3);
  221. double r = Statistics.getCorrelation(data1, data2);
  222. assertEquals(1.0, r, 0.00000001);
  223. }
  224. /**
  225. * A simple test for the correlation calculation.
  226. *
  227. * http://trochim.human.cornell.edu/kb/statcorr.htm
  228. */
  229. public void testCorrelation2() {
  230. Number[] data1 = new Number[20];
  231. data1[0] = new Double(68);
  232. data1[1] = new Double(71);
  233. data1[2] = new Double(62);
  234. data1[3] = new Double(75);
  235. data1[4] = new Double(58);
  236. data1[5] = new Double(60);
  237. data1[6] = new Double(67);
  238. data1[7] = new Double(68);
  239. data1[8] = new Double(71);
  240. data1[9] = new Double(69);
  241. data1[10] = new Double(68);
  242. data1[11] = new Double(67);
  243. data1[12] = new Double(63);
  244. data1[13] = new Double(62);
  245. data1[14] = new Double(60);
  246. data1[15] = new Double(63);
  247. data1[16] = new Double(65);
  248. data1[17] = new Double(67);
  249. data1[18] = new Double(63);
  250. data1[19] = new Double(61);
  251. Number[] data2 = new Number[20];
  252. data2[0] = new Double(4.1);
  253. data2[1] = new Double(4.6);
  254. data2[2] = new Double(3.8);
  255. data2[3] = new Double(4.4);
  256. data2[4] = new Double(3.2);
  257. data2[5] = new Double(3.1);
  258. data2[6] = new Double(3.8);
  259. data2[7] = new Double(4.1);
  260. data2[8] = new Double(4.3);
  261. data2[9] = new Double(3.7);
  262. data2[10] = new Double(3.5);
  263. data2[11] = new Double(3.2);
  264. data2[12] = new Double(3.7);
  265. data2[13] = new Double(3.3);
  266. data2[14] = new Double(3.4);
  267. data2[15] = new Double(4.0);
  268. data2[16] = new Double(4.1);
  269. data2[17] = new Double(3.8);
  270. data2[18] = new Double(3.4);
  271. data2[19] = new Double(3.6);
  272. double r = Statistics.getCorrelation(data1, data2);
  273. assertEquals(0.7306356862792885, r, 0.000000000001);
  274. }
  275. }