001    package org.hackystat.telemetry.analyzer.function.impl;
002    
003    import junit.framework.TestCase;
004    
005    import org.hackystat.telemetry.analyzer.function.TelemetryFunctionManager;
006    import org.hackystat.telemetry.analyzer.model.TelemetryDataPoint;
007    import org.hackystat.telemetry.analyzer.model.TelemetryStream;
008    import org.hackystat.telemetry.analyzer.model.TelemetryStreamCollection;
009    import org.hackystat.telemetry.analyzer.model.TestTelemetryStreamCollection;
010    import org.hackystat.sensorbase.resource.projects.jaxb.Project;
011    import org.hackystat.utilities.time.interval.DayInterval;
012    import org.hackystat.utilities.time.period.Day;
013    
014    /**
015     * Test suite for <code>DivFunction</code>.
016     * 
017     * @author (Cedric) Qin ZHANG
018     */
019    public class TestDivFunction extends TestCase {
020    
021      private TelemetryFunctionManager manager = TelemetryFunctionManager.getInstance();
022      private String projectName = "TestDivFunction";
023      private Project project;
024      private Day startDay;
025      private DayInterval interval;
026      private String div = "div";
027      private String test = "test";
028      
029      
030    
031      /**
032       * Sets up this test case.
033       * @throws Exception If test case cannot be set up.
034       */
035      @Override
036      protected void setUp() throws Exception {
037    
038        //this.project = ProjectManager.getInstance().createTestProjectClientSide(projectName);
039        this.project = new Project();
040        this.project.setName(projectName);
041        this.startDay = Day.getInstance("01-Jan-2004"); 
042        this.interval = new DayInterval(this.startDay, this.startDay.inc(1));
043      }
044      
045      /**
046       * Tears down this test case.
047       * @throws Exception If tear down failed.
048       */
049      @Override
050      protected void tearDown() throws Exception {
051        //ProjectManager.getInstance().deleteProject(this.projectName);
052      }
053      
054      /**
055       * Tests with 2 numbers.
056       * @throws Exception If test fails.
057       */
058      public void testWith2Numbers() throws Exception {
059        Number num1 = Integer.valueOf(1);
060        Number num2 = Integer.valueOf(3);
061        Object result = this.manager.compute(div, new Number[]{num1, num2});
062        assertEquals(1.00 / 3, ((Double) result).doubleValue(), 0.00001);
063        
064        num1 = Integer.valueOf(1);
065        num2 = Double.valueOf(3.5);
066        result = this.manager.compute(div, new Number[]{num1, num2});
067        assertEquals(1.00 / 3.5, ((Double) result).doubleValue(), 0.00001);
068        
069        num1 = Double.valueOf(1.1);
070        num2 = Double.valueOf(3.5);
071        result = this.manager.compute(div, new Number[]{num1, num2});
072        assertEquals(1.1 / 3.5, ((Double) result).doubleValue(), 0.00001);
073        
074        num1 = Integer.valueOf(1);
075        num2 = Integer.valueOf(0);
076        result = this.manager.compute(div, new Number[]{num1, num2});
077        assertTrue(((Double) result).isInfinite());
078    
079        num1 = Integer.valueOf(0);
080        num2 = Integer.valueOf(0);
081        result = this.manager.compute(div, new Number[]{num1, num2});
082        assertTrue(((Double) result).isNaN());
083      }
084      
085      /**
086       * Tests with 1 telemetry stream collection and 1 numbers.
087       * @throws Exception If test fails.
088       */
089      public void testWithTelemetryStreamCollectionAndNumber() throws Exception {   //NOPMD assert OK.
090        TelemetryStreamCollection input 
091            = new TelemetryStreamCollection(test, this.project, this.interval);
092        TelemetryStream inputStream = new TelemetryStream(test);
093        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
094        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(1)));
095        input.add(inputStream);
096    
097        TelemetryStreamCollection output = (TelemetryStreamCollection) 
098            this.manager.compute(div, new Object[]{input, Double.valueOf(0.1)});
099        
100        TelemetryStreamCollection expected 
101            = new TelemetryStreamCollection(test, this.project, this.interval);
102        TelemetryStream expectedStream = new TelemetryStream(test);
103        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, Double.valueOf(0.0)));
104        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Double.valueOf(10)));
105        expected.add(expectedStream);
106        
107        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);
108      }
109      
110      /**
111       * Tests with 1 numbers and  1 telemetry stream collection.
112       * @throws Exception If test fails.
113       */
114      public void testWithNumberAndTelemetryStreamCollection() throws Exception { //NOPMD assert OK.
115        TelemetryStreamCollection input 
116            = new TelemetryStreamCollection(test, this.project, this.interval);
117        TelemetryStream inputStream = new TelemetryStream(test);
118        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
119        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(10)));
120        input.add(inputStream);
121    
122        TelemetryStreamCollection output = (TelemetryStreamCollection) 
123            this.manager.compute(div, new Object[]{Double.valueOf(0.1), input});
124    
125        TelemetryStreamCollection expected 
126            = new TelemetryStreamCollection(test, this.project, this.interval);
127        TelemetryStream expectedStream = new TelemetryStream(test);
128        expectedStream.addDataPoint(new TelemetryDataPoint(
129            this.startDay, Double.valueOf(Double.POSITIVE_INFINITY)));
130        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Double.valueOf(0.01)));
131        expected.add(expectedStream);
132    
133        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);
134      }
135      
136      /**
137       * Tests with 2 telemetry stream collections.
138       * @throws Exception If test fails.
139       */
140      public void testWith2TelemetryStreamCollections() throws Exception { //NOPMD assert OK.
141        TelemetryStreamCollection input1
142            = new TelemetryStreamCollection(test, this.project, this.interval);
143        TelemetryStream inputStream1 = new TelemetryStream(test);
144        inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
145        inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(1)));
146        input1.add(inputStream1);
147    
148        TelemetryStreamCollection input2 
149            = new TelemetryStreamCollection(test, this.project, this.interval);
150        TelemetryStream inputStream2 = new TelemetryStream(test);
151        inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(10)));
152        inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(11)));
153        input2.add(inputStream2);
154    
155        TelemetryStreamCollection output = (TelemetryStreamCollection) 
156            this.manager.compute(div, new Object[]{input1, input2});
157    
158        TelemetryStreamCollection expected 
159            = new TelemetryStreamCollection(test, this.project, this.interval);
160        TelemetryStream expectedStream = new TelemetryStream(test);
161        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, Double.valueOf(0)));
162        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), 
163            Double.valueOf(1.0 / 11)));
164        expected.add(expectedStream);
165    
166        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);    
167      }
168    }