1 package org.djutils.stats.summarizers;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
6 import static org.junit.Assert.fail;
7
8 import org.junit.Test;
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public class WeightedTallyTest
23 {
24
25 @Test
26 public void testWeightedTally()
27 {
28 String description = "THIS WEIGHTED TALLY IS TESTED";
29 WeightedTally wt = new WeightedTally(description);
30 assertEquals(description, wt.getDescription());
31
32 assertTrue(wt.toString().startsWith("WeightedTally"));
33
34 assertTrue(wt.toString().contains(description));
35
36
37 assertTrue(Double.isNaN(wt.getMin()));
38 assertTrue(Double.isNaN(wt.getMax()));
39 assertTrue(Double.isNaN(wt.getWeightedSampleMean()));
40 assertTrue(Double.isNaN(wt.getWeightedPopulationMean()));
41 assertTrue(Double.isNaN(wt.getWeightedSampleVariance()));
42 assertTrue(Double.isNaN(wt.getWeightedSampleStDev()));
43 assertEquals(0.0, wt.getWeightedSum(), 0.0);
44 assertEquals(0L, wt.getN());
45
46 wt.register(0.1, 1.1);
47 assertEquals(1.1, wt.getWeightedSampleMean(), 0.000001);
48 assertEquals(1.1, wt.getWeightedPopulationMean(), 0.000001);
49 assertTrue(Double.isNaN(wt.getWeightedSampleVariance()));
50 assertTrue(Double.isNaN(wt.getWeightedSampleStDev()));
51 wt.register(0.1, 1.2);
52 assertFalse(Double.isNaN(wt.getWeightedSampleVariance()));
53 assertFalse(Double.isNaN(wt.getWeightedSampleStDev()));
54 wt.register(0.1, 1.3);
55 wt.register(0.1, 1.4);
56 wt.register(0.1, 1.5);
57 wt.register(0.1, 1.6);
58 wt.register(0.1, 1.7);
59 wt.register(0.1, 1.8);
60 wt.register(0.1, 1.9);
61 wt.register(0.1, 2.0);
62 wt.register(0.1, 1.0);
63
64
65 assertEquals(2.0, wt.getMax(), 1.0E-6);
66 assertEquals(1.0, wt.getMin(), 1.0E-6);
67 assertEquals(11, wt.getN());
68 assertEquals(1.5 * 0.1 * 11, wt.getWeightedSum(), 1.0E-6);
69 assertEquals(1.5, wt.getWeightedSampleMean(), 1.0E-6);
70
71
72 double variance = 0;
73 for (int i = 0; i < 11; i++)
74 {
75 variance += Math.pow(1.5 - (1.0 + i / 10.0), 2);
76 }
77 variance = variance / 10.0;
78 double stDev = Math.sqrt(variance);
79
80 assertEquals(variance, wt.getWeightedSampleVariance(), 1.0E-6);
81 assertEquals(stDev, wt.getWeightedSampleStDev(), 1.0E-6);
82
83 try
84 {
85 wt.register(-0.1, 123.456);
86 fail("negative weight should have thrown an exception");
87 }
88 catch (IllegalArgumentException iae)
89 {
90
91 }
92 }
93
94
95 @Test
96 public void testWeightedTallySimple()
97 {
98
99 WeightedTally wt = new WeightedTally("simple WeightedTally statistic");
100 wt.initialize();
101 wt.register(13.0, 86.0);
102 wt.register(23.0, 26.0);
103 wt.register(4.0, 0.0);
104
105 assertEquals(1716.0, wt.getWeightedSum(), 0.001);
106 assertEquals(42.9, wt.getWeightedSampleMean(), 0.001);
107 assertEquals(3, wt.getN());
108
109
110 wt = new WeightedTally("simple WeightedTally statistic");
111 wt.initialize();
112 wt.register(13.0, 86.0);
113 wt.register(0.0, 86.0);
114 wt.register(23.0, 26.0);
115 wt.register(4.0, 0.0);
116 wt.register(0.0, 0.0);
117
118 assertEquals(1716.0, wt.getWeightedSum(), 0.001);
119 assertEquals(42.9, wt.getWeightedSampleMean(), 0.001);
120 assertEquals(3, wt.getN());
121
122
123 wt = new WeightedTally("NIST");
124 wt.register(1, 2);
125 wt.register(1, 3);
126 wt.register(0, 5);
127 wt.register(0, 7);
128 wt.register(4, 11);
129 wt.register(1, 13);
130 wt.register(2, 17);
131 wt.register(1, 19);
132 wt.register(0, 23);
133
134 assertEquals((2 + 3 + 4 * 11 + 13 + 2 * 17 + 19) / 10.0, wt.getWeightedSampleMean(), 0.001);
135 assertEquals((2 + 3 + 4 * 11 + 13 + 2 * 17 + 19) / 10.0, wt.getWeightedPopulationMean(), 0.001);
136
137 assertEquals(5.82, wt.getWeightedSampleStDev(), 0.01);
138
139
140
141
142
143
144 assertEquals(5.32, wt.getWeightedPopulationStDev(), 0.01);
145 assertEquals(28.25, wt.getWeightedPopulationVariance(), 0.01);
146 }
147 }