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
9
* http://www.apache.org/licenses/LICENSE-2.0
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.
17
package org.apache.commons.math.stat;
19
import java.io.BufferedReader;
20
import java.io.IOException;
21
import java.io.StringReader;
22
import java.util.Iterator;
24
import org.apache.commons.math.TestUtils;
26
import junit.framework.Test;
27
import junit.framework.TestCase;
28
import junit.framework.TestSuite;
31
* Test cases for the {@link Frequency} class.
33
* @version $Revision: 780541 $ $Date: 2009-05-31 20:47:02 -0400 (Sun, 31 May 2009) $
36
public final class FrequencyTest extends TestCase {
37
private long oneL = 1;
38
private long twoL = 2;
39
private long threeL = 3;
43
private double tolerance = 10E-15;
44
private Frequency f = null;
46
public FrequencyTest(String name) {
55
public static Test suite() {
56
TestSuite suite = new TestSuite(FrequencyTest.class);
57
suite.setName("Frequency Tests");
61
/** test freq counts */
62
public void testCounts() {
63
assertEquals("total count",0,f.getSumFreq());
68
assertEquals("one frequency count",3,f.getCount(1));
69
assertEquals("two frequency count",1,f.getCount(2));
70
assertEquals("three frequency count",0,f.getCount(3));
71
assertEquals("total count",4,f.getSumFreq());
72
assertEquals("zero cumulative frequency", 0, f.getCumFreq(0));
73
assertEquals("one cumulative frequency", 3, f.getCumFreq(1));
74
assertEquals("two cumulative frequency", 4, f.getCumFreq(2));
75
assertEquals("Integer argument cum freq",4, f.getCumFreq(Integer.valueOf(2)));
76
assertEquals("five cumulative frequency", 4, f.getCumFreq(5));
77
assertEquals("foo cumulative frequency", 0, f.getCumFreq("foo"));
80
assertEquals("total count",0,f.getSumFreq());
82
// userguide examples -------------------------------------------------------------------
87
assertEquals("one cumulative frequency", 1 , f.getCount("one"));
88
assertEquals("Z cumulative pct", 0.5, f.getCumPct("Z"), tolerance);
89
assertEquals("z cumulative pct", 1.0, f.getCumPct("z"), tolerance);
90
assertEquals("Ot cumulative pct", 0.25, f.getCumPct("Ot"), tolerance);
94
Frequency f = new Frequency();
96
f.addValue(Integer.valueOf(1));
97
f.addValue(Long.valueOf(1));
99
f.addValue(Integer.valueOf(-1));
100
assertEquals("1 count", 3, f.getCount(1));
101
assertEquals("1 count", 3, f.getCount(Integer.valueOf(1)));
102
assertEquals("0 cum pct", 0.2, f.getCumPct(0), tolerance);
103
assertEquals("1 pct", 0.6, f.getPct(Integer.valueOf(1)), tolerance);
104
assertEquals("-2 cum pct", 0, f.getCumPct(-2), tolerance);
105
assertEquals("10 cum pct", 1, f.getCumPct(10), tolerance);
108
f = new Frequency(String.CASE_INSENSITIVE_ORDER);
113
assertEquals("one count", 3 , f.getCount("one"));
114
assertEquals("Z cumulative pct -- case insensitive", 1 , f.getCumPct("Z"), tolerance);
115
assertEquals("z cumulative pct -- case insensitive", 1 , f.getCumPct("z"), tolerance);
119
assertEquals(0L, f.getCount('a'));
120
assertEquals(0L, f.getCumFreq('b'));
121
TestUtils.assertEquals(Double.NaN, f.getPct('a'), 0.0);
122
TestUtils.assertEquals(Double.NaN, f.getCumPct('b'), 0.0);
127
assertEquals(1L, f.getCount('a'));
128
assertEquals(2L, f.getCumFreq('b'));
129
assertEquals(0.25, f.getPct('a'), 0.0);
130
assertEquals(0.5, f.getCumPct('b'), 0.0);
131
assertEquals(1.0, f.getCumPct('e'), 0.0);
135
public void testPcts() {
144
assertEquals("one pct",0.25,f.getPct(1),tolerance);
145
assertEquals("two pct",0.25,f.getPct(Long.valueOf(2)),tolerance);
146
assertEquals("three pct",0.5,f.getPct(threeL),tolerance);
147
assertEquals("five pct",0,f.getPct(5),tolerance);
148
assertEquals("foo pct",0,f.getPct("foo"),tolerance);
149
assertEquals("one cum pct",0.25,f.getCumPct(1),tolerance);
150
assertEquals("two cum pct",0.50,f.getCumPct(Long.valueOf(2)),tolerance);
151
assertEquals("Integer argument",0.50,f.getCumPct(Integer.valueOf(2)),tolerance);
152
assertEquals("three cum pct",1.0,f.getCumPct(threeL),tolerance);
153
assertEquals("five cum pct",1.0,f.getCumPct(5),tolerance);
154
assertEquals("zero cum pct",0.0,f.getCumPct(0),tolerance);
155
assertEquals("foo cum pct",0,f.getCumPct("foo"),tolerance);
158
/** test adding incomparable values */
159
public void testAdd() {
162
String aString = "a";
167
fail("Expecting IllegalArgumentException");
168
} catch (IllegalArgumentException ex) {
173
fail("Expecting IllegalArgumentException");
174
} catch (IllegalArgumentException ex) {
177
assertEquals("a pct",0.5,f.getPct(aChar),tolerance);
178
assertEquals("b cum pct",1.0,f.getCumPct(bChar),tolerance);
179
assertEquals("a string pct",0.0,f.getPct(aString),tolerance);
180
assertEquals("a string cum pct",0.0,f.getCumPct(aString),tolerance);
185
f.addValue(new Integer("One"));
186
fail("Expecting IllegalArgumentException");
187
} catch (IllegalArgumentException ex) {
192
// Check what happens when non-Comparable objects are added
193
@SuppressWarnings("deprecation")
194
public void testAddNonComparable(){
196
f.addValue(new Object()); // This was previously OK
197
fail("Expected IllegalArgumentException");
198
} catch (IllegalArgumentException expected) {
203
f.addValue(new Object());
204
fail("Expected IllegalArgumentException");
205
} catch (IllegalArgumentException expected) {
209
/** test empty table */
210
public void testEmptyTable() {
211
assertEquals("freq sum, empty table", 0, f.getSumFreq());
212
assertEquals("count, empty table", 0, f.getCount(0));
213
assertEquals("count, empty table",0, f.getCount(Integer.valueOf(0)));
214
assertEquals("cum freq, empty table", 0, f.getCumFreq(0));
215
assertEquals("cum freq, empty table", 0, f.getCumFreq("x"));
216
assertTrue("pct, empty table", Double.isNaN(f.getPct(0)));
217
assertTrue("pct, empty table", Double.isNaN(f.getPct(Integer.valueOf(0))));
218
assertTrue("cum pct, empty table", Double.isNaN(f.getCumPct(0)));
219
assertTrue("cum pct, empty table", Double.isNaN(f.getCumPct(Integer.valueOf(0))));
225
public void testToString(){
231
String s = f.toString();
232
//System.out.println(s);
234
BufferedReader reader = new BufferedReader(new StringReader(s));
236
String line = reader.readLine(); // header line
239
line = reader.readLine(); // one's or two's line
242
line = reader.readLine(); // one's or two's line
245
line = reader.readLine(); // no more elements
247
} catch(IOException ex){
248
fail(ex.getMessage());
251
public void testIntegerValues() {
252
Comparable<?> obj1 = null;
253
obj1 = Integer.valueOf(1);
254
Integer int1 = Integer.valueOf(1);
258
f.addValue(Long.valueOf(2));
259
assertEquals("Integer 1 count", 2, f.getCount(1));
260
assertEquals("Integer 1 count", 2, f.getCount(Integer.valueOf(1)));
261
assertEquals("Integer 1 count", 2, f.getCount(Long.valueOf(1)));
262
assertEquals("Integer 1 cumPct", 0.5, f.getCumPct(1), tolerance);
263
assertEquals("Integer 1 cumPct", 0.5, f.getCumPct(Long.valueOf(1)), tolerance);
264
assertEquals("Integer 1 cumPct", 0.5, f.getCumPct(Integer.valueOf(1)), tolerance);
265
Iterator<?> it = f.valuesIterator();
266
while (it.hasNext()) {
267
assertTrue(it.next() instanceof Long);
271
public void testSerial() {
276
assertEquals(f, TestUtils.serializeAndRecover(f));