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>SubFunction</code>.
016     * 
017     * @author (Cedric) Qin ZHANG
018     */
019    public class TestSubFunction extends TestCase {
020    
021      private TelemetryFunctionManager manager = TelemetryFunctionManager.getInstance();
022      private String projectName = "TestSubFunction";
023      private Project project;
024      private Day startDay;
025      private DayInterval interval;
026      private String sub = "sub";
027      private String test = "test";
028      
029    
030      /**
031       * Sets up this test case.
032       * @throws Exception If test case cannot be set up.
033       */
034      @Override
035      protected void setUp() throws Exception {
036    
037        //this.project = ProjectManager.getInstance().createTestProjectClientSide(projectName);
038        this.project = new Project();
039        this.project.setName(projectName); 
040        this.startDay = Day.getInstance("01-Jan-2004"); 
041        this.interval = new DayInterval(this.startDay, this.startDay.inc(1));
042      }
043      
044      /**
045       * Tears down this test case.
046       * @throws Exception If tear down failed.
047       */
048      @Override
049      protected void tearDown() throws Exception {
050        //ProjectManager.getInstance().deleteProject(this.projectName);
051      }
052      
053      /**
054       * Tests with 2 numbers.
055       * @throws Exception If test fails.
056       */
057      public void testWith2Numbers() throws Exception {
058        Number num1 = Integer.valueOf(1);
059        Number num2 = Integer.valueOf(3);
060        Object result = this.manager.compute(sub, new Number[]{num1, num2});
061        assertEquals(-2, ((Integer) result).intValue());
062        
063        num1 = Integer.valueOf(1);
064        num2 = new Double(3.5);
065        result = this.manager.compute(sub, new Number[]{num1, num2});
066        assertEquals(-2.50, ((Double) result).doubleValue(), 0.00001);
067        
068        num1 = new Double(1.1);
069        num2 = new Double(3.5);
070        result = this.manager.compute(sub, new Number[]{num1, num2});
071        assertEquals(-2.40, ((Double) result).doubleValue(), 0.00001);
072      }
073      
074      /**
075       * Tests with 1 telemetry stream collection and 1 numbers.
076       * @throws Exception If test fails.
077       */
078      public void testWithTelemetryStreamCollectionAndNumber() throws Exception {  //NOPMD assert OK 
079        TelemetryStreamCollection input 
080            = new TelemetryStreamCollection(test, this.project, this.interval);
081        TelemetryStream inputStream = new TelemetryStream(test);
082        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
083        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(1)));
084        input.add(inputStream);
085    
086        TelemetryStreamCollection output = (TelemetryStreamCollection) 
087            this.manager.compute(sub, new Object[]{input, new Double(0.1)});
088        
089        TelemetryStreamCollection expected 
090            = new TelemetryStreamCollection(test, this.project, this.interval);
091        TelemetryStream expectedStream = new TelemetryStream(test);
092        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, new Double(-0.1)));
093        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), new Double(0.9)));
094        expected.add(expectedStream);
095        
096        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);
097      }
098      
099      /**
100       * Tests with 1 numbers and  1 telemetry stream collection.
101       * @throws Exception If test fails.
102       */
103      public void testWithNumberAndTelemetryStreamCollection() throws Exception { //NOPMD assert OK
104        TelemetryStreamCollection input 
105            = new TelemetryStreamCollection(test, this.project, this.interval);
106        TelemetryStream inputStream = new TelemetryStream(test);
107        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
108        inputStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(1)));
109        input.add(inputStream);
110    
111        TelemetryStreamCollection output = (TelemetryStreamCollection) 
112            this.manager.compute(sub, new Object[]{new Double(0.1), input});
113    
114        TelemetryStreamCollection expected 
115            = new TelemetryStreamCollection(test, this.project, this.interval);
116        TelemetryStream expectedStream = new TelemetryStream(test);
117        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, new Double(0.1)));
118        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), new Double(-0.9)));
119        expected.add(expectedStream);
120    
121        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);
122      }
123      
124      /**
125       * Tests with 2 telemetry stream collections.
126       * @throws Exception If test fails.
127       */
128      public void testWith2TelemetryStreamCollections() throws Exception { //NOPMD assert OK.
129        TelemetryStreamCollection input1
130            = new TelemetryStreamCollection(test, this.project, this.interval);
131        TelemetryStream inputStream1 = new TelemetryStream(test);
132        inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(0)));
133        inputStream1.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(1)));
134        input1.add(inputStream1);
135    
136        TelemetryStreamCollection input2 
137            = new TelemetryStreamCollection(test, this.project, this.interval);
138        TelemetryStream inputStream2 = new TelemetryStream(test);
139        inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(10)));
140        inputStream2.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(11)));
141        input2.add(inputStream2);
142    
143        TelemetryStreamCollection output = (TelemetryStreamCollection) 
144            this.manager.compute(sub, new Object[]{input1, input2});
145    
146        TelemetryStreamCollection expected 
147            = new TelemetryStreamCollection(test, this.project, this.interval);
148        TelemetryStream expectedStream = new TelemetryStream(test);
149        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay, Integer.valueOf(-10)));
150        expectedStream.addDataPoint(new TelemetryDataPoint(this.startDay.inc(1), Integer.valueOf(-10)));
151        expected.add(expectedStream);
152    
153        TestTelemetryStreamCollection.assertEqualsIgnoreName(expected, output);    
154      }
155    }