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 }