EMMA Coverage Report (generated Mon Nov 29 14:43:38 PST 2010)
[all classes][com.jeantessier.metrics]

COVERAGE SUMMARY FOR SOURCE FILE [TestRatioMeasurement.java]

nameclass, %method, %block, %line, %
TestRatioMeasurement.java100% (1/1)73%  (19/26)99%  (1068/1079)97%  (200.9/208)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class TestRatioMeasurement100% (1/1)73%  (19/26)99%  (1068/1079)97%  (200.9/208)
visitContextAccumulatorMeasurement (ContextAccumulatorMeasurement): void 0%   (0/1)0%   (0/1)0%   (0/1)
visitCounterMeasurement (CounterMeasurement): void 0%   (0/1)0%   (0/1)0%   (0/1)
visitNameListMeasurement (NameListMeasurement): void 0%   (0/1)0%   (0/1)0%   (0/1)
visitNbSubMetricsMeasurement (NbSubMetricsMeasurement): void 0%   (0/1)0%   (0/1)0%   (0/1)
visitStatisticalMeasurement (StatisticalMeasurement): void 0%   (0/1)0%   (0/1)0%   (0/1)
visitSubMetricsAccumulatorMeasurement (SubMetricsAccumulatorMeasurement): void 0%   (0/1)0%   (0/1)0%   (0/1)
visitSumMeasurement (SumMeasurement): void 0%   (0/1)0%   (0/1)0%   (0/1)
testInBoundRange (): void 100% (1/1)97%  (56/58)99%  (9.9/10)
testInLowerBoundRange (): void 100% (1/1)98%  (46/47)100% (9/9)
testInUpperBoundRange (): void 100% (1/1)98%  (46/47)100% (9/9)
TestRatioMeasurement (): void 100% (1/1)100% (3/3)100% (1/1)
setUp (): void 100% (1/1)100% (62/62)100% (12/12)
testAccept (): void 100% (1/1)100% (21/21)100% (5/5)
testCachedValue (): void 100% (1/1)100% (32/32)100% (6/6)
testCreate (): void 100% (1/1)100% (191/191)100% (36/36)
testCreateAndInitFromMeasurementDescriptor (): void 100% (1/1)100% (53/53)100% (11/11)
testCreateFromMeasurementDescriptor (): void 100% (1/1)100% (55/55)100% (12/12)
testDevideByZero (): void 100% (1/1)100% (40/40)100% (7/7)
testEmpty (): void 100% (1/1)100% (124/124)100% (21/21)
testInOpenRange (): void 100% (1/1)100% (36/36)100% (8/8)
testInUndefinedRange (): void 100% (1/1)100% (36/36)100% (8/8)
testMeasurementDescriptor (): void 100% (1/1)100% (31/31)100% (6/6)
testNormal (): void 100% (1/1)100% (48/48)100% (9/9)
testStatistical (): void 100% (1/1)100% (142/142)100% (22/22)
testZeroDevidedBy (): void 100% (1/1)100% (42/42)100% (7/7)
visitRatioMeasurement (RatioMeasurement): void 100% (1/1)100% (4/4)100% (2/2)

1/*
2 *  Copyright (c) 2001-2009, Jean Tessier
3 *  All rights reserved.
4 *  
5 *  Redistribution and use in source and binary forms, with or without
6 *  modification, are permitted provided that the following conditions
7 *  are met:
8 *  
9 *      * Redistributions of source code must retain the above copyright
10 *        notice, this list of conditions and the following disclaimer.
11 *  
12 *      * Redistributions in binary form must reproduce the above copyright
13 *        notice, this list of conditions and the following disclaimer in the
14 *        documentation and/or other materials provided with the distribution.
15 *  
16 *      * Neither the name of Jean Tessier nor the names of his contributors
17 *        may be used to endorse or promote products derived from this software
18 *        without specific prior written permission.
19 *  
20 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 *  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
24 *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32 
33package com.jeantessier.metrics;
34 
35import junit.framework.*;
36 
37public class TestRatioMeasurement extends TestCase implements MeasurementVisitor {
38    private MeasurementDescriptor descriptor;
39    private RatioMeasurement measurement;
40    private Metrics metrics;
41    private Measurement visited;
42    
43    private Measurement m1;
44    private Measurement m2;
45 
46    protected void setUp() throws Exception {
47        metrics = new Metrics("foobar");
48 
49        m1 = new CounterMeasurement(null, metrics, null);
50        m2 = new CounterMeasurement(null, metrics, null);
51 
52        metrics.track("base", m1);
53        metrics.track("divider", m2);
54 
55        descriptor = new MeasurementDescriptor();
56        descriptor.setShortName("foo");
57        descriptor.setLongName("bar");
58        descriptor.setClassFor(RatioMeasurement.class);
59        descriptor.setInitText("base\ndivider");
60        descriptor.setCached(false);
61    }
62 
63    public void testMeasurementDescriptor() {
64        measurement = new RatioMeasurement(descriptor, metrics, "base\ndivider");
65        
66        assertNotNull(measurement.getDescriptor());
67        assertEquals(RatioMeasurement.class, measurement.getDescriptor().getClassFor());
68        assertEquals("foo", measurement.getShortName());
69        assertEquals("bar", measurement.getLongName());
70    }
71 
72    public void testCreateFromMeasurementDescriptor() throws Exception {
73        descriptor.setInitText(null);
74 
75        measurement = (RatioMeasurement) descriptor.createMeasurement();
76        
77        assertNotNull(measurement);
78        assertEquals(descriptor, measurement.getDescriptor());
79        assertSame(descriptor, measurement.getDescriptor());
80        assertEquals(RatioMeasurement.class, measurement.getClass());
81        assertEquals("foo", measurement.getShortName());
82        assertEquals("bar", measurement.getLongName());
83 
84        assertNull(measurement.getBaseName());
85        assertNull(measurement.getDividerName());
86        assertTrue(Double.isNaN(measurement.getValue().doubleValue()));
87    }
88    
89    public void testCreateAndInitFromMeasurementDescriptor() throws Exception {
90        measurement = (RatioMeasurement) descriptor.createMeasurement();
91        
92        assertNotNull(measurement);
93        assertEquals(descriptor, measurement.getDescriptor());
94        assertSame(descriptor, measurement.getDescriptor());
95        assertEquals(RatioMeasurement.class, measurement.getClass());
96        assertEquals("foo", measurement.getShortName());
97        assertEquals("bar", measurement.getLongName());
98        assertEquals("base", measurement.getBaseName());
99        assertEquals("divider", measurement.getDividerName());
100 
101        assertTrue(Double.isNaN(measurement.getValue().doubleValue()));
102    }
103 
104    public void testCreate() {
105        measurement = new RatioMeasurement(null, null, null);
106        
107        assertNull(measurement.getBaseName());
108        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
109        assertNull(measurement.getDividerName());
110        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());
111 
112        measurement = new RatioMeasurement(null, null, "base\ndivider");
113 
114        assertEquals("base",    measurement.getBaseName());
115        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
116        assertEquals("divider", measurement.getDividerName());
117        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());
118 
119        measurement = new RatioMeasurement(null, null, "base");
120 
121        assertNull(measurement.getBaseName());
122        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
123        assertNull(measurement.getDividerName());
124        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());
125 
126        measurement = new RatioMeasurement(null, null, null);
127 
128        assertNull(measurement.getBaseName());
129        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
130        assertNull(measurement.getDividerName());
131        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());
132 
133        measurement = new RatioMeasurement(null, null, "foo\nbar");
134 
135        assertEquals("foo", measurement.getBaseName());
136        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
137        assertEquals("bar", measurement.getDividerName());
138        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());
139 
140        measurement = new RatioMeasurement(null, null, "foo\nbar");
141 
142        assertEquals("foo", measurement.getBaseName());
143        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
144        assertEquals("bar", measurement.getDividerName());
145        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());
146 
147        measurement = new RatioMeasurement(null, null, "foo DISPOSE_MINIMUM\nbar DISPOSE_AVERAGE");
148 
149        assertEquals("foo", measurement.getBaseName());
150        assertEquals(StatisticalMeasurement.DISPOSE_MINIMUM, measurement.getBaseDispose());
151        assertEquals("bar", measurement.getDividerName());
152        assertEquals(StatisticalMeasurement.DISPOSE_AVERAGE, measurement.getDividerDispose());
153    }
154 
155    public void testStatistical() {
156        Metrics c  = new Metrics("foobar");
157        Metrics m1 = new Metrics("foo");
158        Metrics m2 = new Metrics("bar");
159 
160        c.addSubMetrics(m1);
161        c.addSubMetrics(m2);
162 
163        m1.track("base",    new CounterMeasurement(null, null, null));
164        m1.track("divider", new CounterMeasurement(null, null, null));
165        m2.track("base",    new CounterMeasurement(null, null, null));
166        m2.track("divider", new CounterMeasurement(null, null, null));
167 
168        m1.addToMeasurement("base",    1);
169        m1.addToMeasurement("divider", 2);
170        m2.addToMeasurement("base",    3);
171        m2.addToMeasurement("divider", 4);
172 
173        c.track("base",    new StatisticalMeasurement(null, c, "base"));
174        c.track("divider", new StatisticalMeasurement(null, c, "divider"));
175        
176        measurement = new RatioMeasurement(descriptor, c, "base DISPOSE_MINIMUM\ndivider DISPOSE_MINIMUM");
177        assertEquals(0.5, measurement.getValue().doubleValue(), 0.01);
178        
179        measurement = new RatioMeasurement(descriptor, c, "base DISPOSE_AVERAGE\ndivider DISPOSE_AVERAGE");
180        assertEquals(2.0 / 3.0, measurement.getValue().doubleValue(), 0.01);
181        
182        measurement = new RatioMeasurement(descriptor, c, "base DISPOSE_AVERAGE\ndivider DISPOSE_NB_DATA_POINTS");
183        assertEquals(1.0, measurement.getValue().doubleValue(), 0.01);
184    }
185    
186    public void testNormal() throws Exception {
187        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
188        
189        m1.add(10);
190        m2.add(1);
191 
192        assertEquals(10 / 1, measurement.getValue().intValue());
193 
194        m2.add(1);
195 
196        assertEquals(10 / 2, measurement.getValue().intValue());
197 
198        m1.add(m1.getValue());
199 
200        assertEquals(20 / 2, measurement.getValue().intValue());
201    }
202    
203    public void testDevideByZero() throws Exception {
204        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
205        
206        assertTrue("0/0 not NaN", Double.isNaN(measurement.getValue().doubleValue()));
207 
208        m1.add(1);
209 
210        assertTrue("1/0 not infitity", Double.isInfinite(measurement.getValue().doubleValue()));
211 
212        m1.add(-2);
213 
214        assertTrue("-1/0 not infitity", Double.isInfinite(measurement.getValue().doubleValue()));
215    }
216    
217    public void testZeroDevidedBy() throws Exception {
218        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
219        
220        assertTrue("0/0 not NaN", Double.isNaN(measurement.getValue().doubleValue()));
221 
222        m2.add(1);
223 
224        assertEquals("0/1 not zero", 0.0, measurement.getValue().doubleValue(), 0.01);
225 
226        m2.add(-2);
227 
228        assertEquals("0/-1 not zero", 0.0, measurement.getValue().doubleValue(), 0.01);
229    }
230 
231    public void testInUndefinedRange() throws Exception {
232        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
233        
234        m2.add(1);
235        
236        assertTrue(measurement.isInRange());
237 
238        m1.add(1);
239        
240        assertTrue(measurement.isInRange());
241 
242        m1.add(2);
243        
244        assertTrue(measurement.isInRange());
245    }
246 
247    public void testInOpenRange() throws Exception {
248        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
249        
250        m2.add(1);
251        
252        assertTrue(measurement.isInRange());
253 
254        m1.add(1);
255        
256        assertTrue(measurement.isInRange());
257 
258        m1.add(2);
259 
260        assertTrue(measurement.isInRange());
261    }
262 
263    public void testInLowerBoundRange() throws Exception {
264        descriptor.setLowerThreshold(new Integer(1));
265 
266        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
267        
268        m2.add(1);
269        
270        assertTrue(!measurement.isInRange());
271 
272        m1.add(1);
273        
274        assertTrue(measurement.isInRange());
275 
276        m1.add(2);
277        
278        assertTrue(measurement.isInRange());
279    }
280 
281    public void testInUpperBoundRange() throws Exception {
282        descriptor.setUpperThreshold(new Float(1.5));
283 
284        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
285        
286        m2.add(1);
287        
288        assertTrue(measurement.isInRange());
289 
290        m1.add(1);
291        
292        assertTrue(measurement.isInRange());
293 
294        m1.add(2);
295        
296        assertTrue(!measurement.isInRange());
297    }
298 
299    public void testInBoundRange() throws Exception {
300        descriptor.setLowerThreshold(new Integer(1));
301        descriptor.setUpperThreshold(new Float(1.5));
302 
303        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
304        
305        m2.add(1);
306        
307        assertTrue(!measurement.isInRange());
308 
309        m1.add(1);
310        
311        assertTrue(measurement.isInRange());
312 
313        m1.add(2);
314        
315        assertTrue(!measurement.isInRange());
316    }
317 
318    public void testCachedValue() throws Exception {
319        descriptor.setCached(true);
320 
321        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
322        
323        assertTrue("0/0 not NaN", Double.isNaN(measurement.getValue().doubleValue()));
324 
325        m2.add(1);
326        
327        assertTrue("cached 0/0 not NaN", Double.isNaN(measurement.getValue().doubleValue()));
328    }
329 
330    public void testAccept() throws Exception {
331        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
332        
333        visited = null;
334        measurement.accept(this);
335        assertSame(measurement, visited);
336    }
337 
338    public void testEmpty() throws Exception {
339        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
340 
341        assertEquals("base == 0", 0, m1.getValue().intValue());
342        assertEquals("divider == 0", 0, m2.getValue().intValue());
343        assertTrue("0/0", measurement.isEmpty());
344 
345        m1.add(1);
346 
347        assertEquals("base != 1", 1, m1.getValue().intValue());
348        assertEquals("divider != 0", 0, m2.getValue().intValue());
349        assertTrue("1/0", measurement.isEmpty());
350 
351        m2.add(1);
352 
353        assertEquals("base != 1", 1, m1.getValue().intValue());
354        assertEquals("divider != 1", 1, m2.getValue().intValue());
355        assertFalse("1/1", measurement.isEmpty());
356 
357        m1.add(-1);
358 
359        assertEquals("base != 0", 0, m1.getValue().intValue());
360        assertEquals("divider != 1", 1, m2.getValue().intValue());
361        assertFalse("0/1", measurement.isEmpty());
362 
363        m2.add(-1);
364 
365        assertEquals("base != 0", 0, m1.getValue().intValue());
366        assertEquals("divider != 0", 0, m2.getValue().intValue());
367        assertTrue("0/0", measurement.isEmpty());
368    }
369    
370    public void visitStatisticalMeasurement(StatisticalMeasurement measurement) {
371        // Do nothing
372    }
373    
374    public void visitRatioMeasurement(RatioMeasurement measurement) {
375        visited = measurement;
376    }
377    
378    public void visitNbSubMetricsMeasurement(NbSubMetricsMeasurement measurement) {
379        // Do nothing
380    }
381    
382    public void visitCounterMeasurement(CounterMeasurement measurement) {
383        // Do nothing
384    }
385    
386    public void visitContextAccumulatorMeasurement(ContextAccumulatorMeasurement measurement) {
387        // Do nothing
388    }
389    
390    public void visitNameListMeasurement(NameListMeasurement measurement) {
391        // Do nothing
392    }
393    
394    public void visitSubMetricsAccumulatorMeasurement(SubMetricsAccumulatorMeasurement measurement) {
395        // Do nothing
396    }
397 
398    public void visitSumMeasurement(SumMeasurement measurement) {
399        // Do nothing
400    }
401}

[all classes][com.jeantessier.metrics]
EMMA 2.0.5312 (C) Vladimir Roubtsov