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>MulFunction</code>.
016     * 
017     * @author (Cedric) Qin ZHANG
018     */
019    public class TestMulFunction extends TestCase {
020    
021      private TelemetryFunctionManager manager = TelemetryFunctionManager.getInstance();
022      private String projectName = "TestMulFunction";
023      private Project project;
024      private Day startDay;
025      private DayInterval interval;
026      private String mul = "mul";
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(mul, new Number[]{num1, num2});
062        assertEquals(3, ((Integer) result).intValue());
063        
064        num1 = Integer.valueOf(1);
065        num2 = new Double(3.5);
066        result = this.manager.compute(mul, new Number[]{num1, num2});
067        assertEquals(3.50, ((Double) result).doubleValue(), 0.00001);
068        
069        num1 = new Double(1.1);
070        num2 = new Double(3.5);
071        result = this.manager.compute(mul, new Number[]{num1, num2});
072        assertEquals(3.85, ((Double) result).doubleValue(), 0.00001);
073        
074        num1 = Integer.valueOf(0);
075        num2 = Integer.valueOf(0);
076        result = this.manager.compute(mul, new Number[]{num1, num2});
077        assertEquals(0, ((Integer) result).intValue());
078      }
079      
080      /**
081       * Tests with 1 telemetry stream collection and 1 numbers.
082       * @throws Exception If test fails.
083       */
084      public void testWithTelemetryStreamCollectionAndNumber() throws Exception { //NOPMD assert OK    
085        TelemetryStreamCollection input 
086            = new TelemetryStreamCollection(test, this.project, this.interval);
087        TelemetryStream inputStream = new TelemetryStream(test);
088        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(2)));
089        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(3)));
090        input.add(inputStream);
091    
092        TelemetryStreamCollection output = (TelemetryStreamCollection) 
093            this.manager.compute(mul, new Object[]{input, new Double(0.1)});
094        
095        TelemetryStreamCollection expected 
096            = new TelemetryStreamCollection(test, this.project, this.interval);
097        TelemetryStream expectedStream = new TelemetryStream(test);
098        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, new Double(0.2)));
099        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), new Double(0.3)));
100        expected.add(expectedStream);
101        
102        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);
103      }
104      
105      /**
106       * Tests with 1 numbers and  1 telemetry stream collection.
107       * @throws Exception If test fails.
108       */
109      public void testWithNumberAndTelemetryStreamCollection() throws Exception { //NOPMD assert OK
110        TelemetryStreamCollection input 
111            = new TelemetryStreamCollection(test, this.project, this.interval);
112        TelemetryStream inputStream = new TelemetryStream(test);
113        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(2)));
114        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(3)));
115        input.add(inputStream);
116    
117        TelemetryStreamCollection output = (TelemetryStreamCollection) 
118            this.manager.compute(mul, new Object[]{new Double(0.1), input});
119    
120        TelemetryStreamCollection expected 
121            = new TelemetryStreamCollection(test, this.project, this.interval);
122        TelemetryStream expectedStream = new TelemetryStream(test);
123        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, new Double(0.2)));
124        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), new Double(0.3)));
125        expected.add(expectedStream);
126    
127        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);
128      }
129      
130      /**
131       * Tests with 2 telemetry stream collections.
132       * @throws Exception If test fails.
133       */
134      public void testWith2TelemetryStreamCollections() throws Exception { //NOPMD assert OK
135        TelemetryStreamCollection input1
136            = new TelemetryStreamCollection(test, this.project, this.interval);
137        TelemetryStream inputStream1 = new TelemetryStream(test);
138        inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
139        inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(1)));
140        input1.add(inputStream1);
141    
142        TelemetryStreamCollection input2 
143            = new TelemetryStreamCollection(test, this.project, this.interval);
144        TelemetryStream inputStream2 = new TelemetryStream(test);
145        inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(10)));
146        inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(11)));
147        input2.add(inputStream2);
148    
149        TelemetryStreamCollection output = (TelemetryStreamCollection) 
150            this.manager.compute(mul, new Object[]{input1, input2});
151    
152        TelemetryStreamCollection expected 
153            = new TelemetryStreamCollection(test, this.project, this.interval);
154        TelemetryStream expectedStream = new TelemetryStream(test);
155        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
156        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(11)));
157        expected.add(expectedStream);
158    
159        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);    
160      }
161    }