TestRatioMeasurement.java :  » Code-Analyzer » DependencyFinder » com » jeantessier » metrics » Java Open Source

Java Open Source » Code Analyzer » DependencyFinder 
DependencyFinder » com » jeantessier » metrics » TestRatioMeasurement.java
/*
 *  Copyright (c) 2001-2007, Jean Tessier
 *  All rights reserved.
 *  
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *  
 *      * Redistributions of source code must retain the above copyright
 *        notice, this list of conditions and the following disclaimer.
 *  
 *      * Redistributions in binary form must reproduce the above copyright
 *        notice, this list of conditions and the following disclaimer in the
 *        documentation and/or other materials provided with the distribution.
 *  
 *      * Neither the name of Jean Tessier nor the names of his contributors
 *        may be used to endorse or promote products derived from this software
 *        without specific prior written permission.
 *  
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
 *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package com.jeantessier.metrics;

import junit.framework.*;

public class TestRatioMeasurement extends TestCase implements MeasurementVisitor {
    private MeasurementDescriptor descriptor;
    private RatioMeasurement measurement;
    private Metrics metrics;
    private Measurement visited;
    
    private Measurement m1;
    private Measurement m2;

    protected void setUp() throws Exception {
        metrics = new Metrics("foobar");

        m1 = new CounterMeasurement(null, metrics, null);
        m2 = new CounterMeasurement(null, metrics, null);

        metrics.track("base", m1);
        metrics.track("divider", m2);

        descriptor = new MeasurementDescriptor();
        descriptor.setShortName("foo");
        descriptor.setLongName("bar");
        descriptor.setClassFor(RatioMeasurement.class);
        descriptor.setInitText("base\ndivider");
        descriptor.setCached(false);
    }

    public void testMeasurementDescriptor() {
        measurement = new RatioMeasurement(descriptor, metrics, "base\ndivider");
        
        assertNotNull(measurement.getDescriptor());
        assertEquals(RatioMeasurement.class, measurement.getDescriptor().getClassFor());
        assertEquals("foo", measurement.getShortName());
        assertEquals("bar", measurement.getLongName());
    }

    public void testCreateFromMeasurementDescriptor() throws Exception {
        descriptor.setInitText(null);

        measurement = (RatioMeasurement) descriptor.createMeasurement();
        
        assertNotNull(measurement);
        assertEquals(descriptor, measurement.getDescriptor());
        assertSame(descriptor, measurement.getDescriptor());
        assertEquals(RatioMeasurement.class, measurement.getClass());
        assertEquals("foo", measurement.getShortName());
        assertEquals("bar", measurement.getLongName());

        assertNull(measurement.getBaseName());
        assertNull(measurement.getDividerName());
        assertTrue(Double.isNaN(measurement.doubleValue()));
    }
    
    public void testCreateAndInitFromMeasurementDescriptor() throws Exception {
        measurement = (RatioMeasurement) descriptor.createMeasurement();
        
        assertNotNull(measurement);
        assertEquals(descriptor, measurement.getDescriptor());
        assertSame(descriptor, measurement.getDescriptor());
        assertEquals(RatioMeasurement.class, measurement.getClass());
        assertEquals("foo", measurement.getShortName());
        assertEquals("bar", measurement.getLongName());
        assertEquals("base", measurement.getBaseName());
        assertEquals("divider", measurement.getDividerName());

        assertTrue(Double.isNaN(measurement.doubleValue()));
    }

    public void testCreate() {
        measurement = new RatioMeasurement(null, null, null);
        
        assertNull(measurement.getBaseName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
        assertNull(measurement.getDividerName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());

        measurement = new RatioMeasurement(null, null, "base\ndivider");

        assertEquals("base",    measurement.getBaseName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
        assertEquals("divider", measurement.getDividerName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());

        measurement = new RatioMeasurement(null, null, "base");

        assertNull(measurement.getBaseName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
        assertNull(measurement.getDividerName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());

        measurement = new RatioMeasurement(null, null, null);

        assertNull(measurement.getBaseName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
        assertNull(measurement.getDividerName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());

        measurement = new RatioMeasurement(null, null, "foo\nbar");

        assertEquals("foo", measurement.getBaseName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
        assertEquals("bar", measurement.getDividerName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());

        measurement = new RatioMeasurement(null, null, "foo\nbar");

        assertEquals("foo", measurement.getBaseName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getBaseDispose());
        assertEquals("bar", measurement.getDividerName());
        assertEquals(StatisticalMeasurement.DISPOSE_IGNORE, measurement.getDividerDispose());

        measurement = new RatioMeasurement(null, null, "foo DISPOSE_MINIMUM\nbar DISPOSE_AVERAGE");

        assertEquals("foo", measurement.getBaseName());
        assertEquals(StatisticalMeasurement.DISPOSE_MINIMUM, measurement.getBaseDispose());
        assertEquals("bar", measurement.getDividerName());
        assertEquals(StatisticalMeasurement.DISPOSE_AVERAGE, measurement.getDividerDispose());
    }

    public void testStatistical() {
        Metrics c  = new Metrics("foobar");
        Metrics m1 = new Metrics("foo");
        Metrics m2 = new Metrics("bar");

        c.addSubMetrics(m1);
        c.addSubMetrics(m2);

        m1.track("base",    new CounterMeasurement(null, null, null));
        m1.track("divider", new CounterMeasurement(null, null, null));
        m2.track("base",    new CounterMeasurement(null, null, null));
        m2.track("divider", new CounterMeasurement(null, null, null));

        m1.addToMeasurement("base",    1);
        m1.addToMeasurement("divider", 2);
        m2.addToMeasurement("base",    3);
        m2.addToMeasurement("divider", 4);

        c.track("base",    new StatisticalMeasurement(null, c, "base"));
        c.track("divider", new StatisticalMeasurement(null, c, "divider"));
        
        measurement = new RatioMeasurement(descriptor, c, "base DISPOSE_MINIMUM\ndivider DISPOSE_MINIMUM");
        assertEquals(0.5, measurement.doubleValue(), 0.01);
        
        measurement = new RatioMeasurement(descriptor, c, "base DISPOSE_AVERAGE\ndivider DISPOSE_AVERAGE");
        assertEquals(2.0 / 3.0, measurement.doubleValue(), 0.01);
        
        measurement = new RatioMeasurement(descriptor, c, "base DISPOSE_AVERAGE\ndivider DISPOSE_NB_DATA_POINTS");
        assertEquals(1.0, measurement.doubleValue(), 0.01);
    }
    
    public void testNormal() throws Exception {
        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
        
        m1.add(10);
        m2.add(1);

        assertEquals(10 / 1, measurement.intValue());
        assertEquals(10 / 1, measurement.doubleValue(), 0.01);
        assertEquals(10 / 1, measurement.getValue().intValue());

        m2.add(1);

        assertEquals(10 / 2, measurement.intValue());
        assertEquals(10 / 2, measurement.doubleValue(), 0.01);
        assertEquals(10 / 2, measurement.getValue().intValue());

        m1.add(m1.getValue());

        assertEquals(20 / 2, measurement.intValue());
        assertEquals(20 / 2, measurement.doubleValue(), 0.01);
        assertEquals(20 / 2, measurement.getValue().intValue());
    }
    
    public void testDevideByZero() throws Exception {
        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
        
        assertTrue("0/0 not NaN", Double.isNaN(measurement.getValue().doubleValue()));

        m1.add(1);

        assertTrue("1/0 not infitity", Double.isInfinite(measurement.getValue().doubleValue()));

        m1.add(-2);

        assertTrue("-1/0 not infitity", Double.isInfinite(measurement.getValue().doubleValue()));
    }
    
    public void testZeroDevidedBy() throws Exception {
        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
        
        assertTrue("0/0 not NaN", Double.isNaN(measurement.getValue().doubleValue()));

        m2.add(1);

        assertEquals("0/1 not zero", 0.0, measurement.getValue().doubleValue(), 0.01);

        m2.add(-2);

        assertEquals("0/-1 not zero", 0.0, measurement.getValue().doubleValue(), 0.01);
    }

    public void testInUndefinedRange() throws Exception {
        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
        
        m2.add(1);
        
        assertTrue(measurement.isInRange());

        m1.add(1);
        
        assertTrue(measurement.isInRange());

        m1.add(2);
        
        assertTrue(measurement.isInRange());
    }

    public void testInOpenRange() throws Exception {
        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
        
        m2.add(1);
        
        assertTrue(measurement.isInRange());

        m1.add(1);
        
        assertTrue(measurement.isInRange());

        m1.add(2);

        assertTrue(measurement.isInRange());
    }

    public void testInLowerBoundRange() throws Exception {
        descriptor.setLowerThreshold(new Integer(1));

        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
        
        m2.add(1);
        
        assertTrue(!measurement.isInRange());

        m1.add(1);
        
        assertTrue(measurement.isInRange());

        m1.add(2);
        
        assertTrue(measurement.isInRange());
    }

    public void testInUpperBoundRange() throws Exception {
        descriptor.setUpperThreshold(new Float(1.5));

        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
        
        m2.add(1);
        
        assertTrue(measurement.isInRange());

        m1.add(1);
        
        assertTrue(measurement.isInRange());

        m1.add(2);
        
        assertTrue(!measurement.isInRange());
    }

    public void testInBoundRange() throws Exception {
        descriptor.setLowerThreshold(new Integer(1));
        descriptor.setUpperThreshold(new Float(1.5));

        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
        
        m2.add(1);
        
        assertTrue(!measurement.isInRange());

        m1.add(1);
        
        assertTrue(measurement.isInRange());

        m1.add(2);
        
        assertTrue(!measurement.isInRange());
    }

    public void testCachedValue() throws Exception {
        descriptor.setCached(true);

        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
        
        assertTrue("0/0 not NaN", Double.isNaN(measurement.getValue().doubleValue()));

        m2.add(1);
        
        assertTrue("cached 0/0 not NaN", Double.isNaN(measurement.getValue().doubleValue()));
    }

    public void testAccept() throws Exception {
        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);
        
        visited = null;
        measurement.accept(this);
        assertSame(measurement, visited);
    }

    public void testEmpty() throws Exception {
        measurement = (RatioMeasurement) descriptor.createMeasurement(metrics);

        assertEquals("base == 0", 0, m1.intValue());
        assertEquals("divider == 0", 0, m2.intValue());
        assertTrue("0/0", measurement.isEmpty());

        m1.add(1);

        assertEquals("base != 1", 1, m1.intValue());
        assertEquals("divider != 0", 0, m2.intValue());
        assertTrue("1/0", measurement.isEmpty());

        m2.add(1);

        assertEquals("base != 1", 1, m1.intValue());
        assertEquals("divider != 1", 1, m2.intValue());
        assertFalse("1/1", measurement.isEmpty());

        m1.add(-1);

        assertEquals("base != 0", 0, m1.intValue());
        assertEquals("divider != 1", 1, m2.intValue());
        assertFalse("0/1", measurement.isEmpty());

        m2.add(-1);

        assertEquals("base != 0", 0, m1.intValue());
        assertEquals("divider != 0", 0, m2.intValue());
        assertTrue("0/0", measurement.isEmpty());
    }
    
    public void visitStatisticalMeasurement(StatisticalMeasurement measurement) {
        // Do nothing
    }
    
    public void visitRatioMeasurement(RatioMeasurement measurement) {
        visited = measurement;
    }
    
    public void visitNbSubMetricsMeasurement(NbSubMetricsMeasurement measurement) {
        // Do nothing
    }
    
    public void visitCounterMeasurement(CounterMeasurement measurement) {
        // Do nothing
    }
    
    public void visitContextAccumulatorMeasurement(ContextAccumulatorMeasurement measurement) {
        // Do nothing
    }
    
    public void visitNameListMeasurement(NameListMeasurement measurement) {
        // Do nothing
    }
    
    public void visitSubMetricsAccumulatorMeasurement(SubMetricsAccumulatorMeasurement measurement) {
        // Do nothing
    }

    public void visitSumMeasurement(SumMeasurement measurement) {
        // Do nothing
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.