package com.activequant.timeseries; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import junit.framework.TestCase; import org.junit.Test; import com.activequant.domainmodel.TimeStamp; import com.activequant.timeseries.DoubleColumn; import com.activequant.timeseries.TSContainer2; import com.activequant.timeseries.TypedColumn; /** * Unit test for time series TSContainer. * * @author BrownChipmunk */ @SuppressWarnings("rawtypes") public class TSContainerTest extends TestCase { TSContainer2 timeSeries; String[] headers = new String[] { "Ask", "Bid", "High", "Low" }; @Override protected void setUp() throws Exception { super.setUp(); List<TypedColumn> columns = new ArrayList<TypedColumn>(); columns.add(new DoubleColumn()); columns.add(new DoubleColumn()); columns.add(new DoubleColumn()); columns.add(new DoubleColumn()); timeSeries = new TSContainer2(TSContainerTest.class.getName(), Arrays.asList(headers), columns); timeSeries.setRow(new TimeStamp(new Date(1336305521100L)), new Double[] { 2.0, 2.1, 2.2, 2.3 }); timeSeries.setRow(new TimeStamp(new Date(1336305521300L)), new Double[] { 4.0, 4.1, 4.2, 4.3 }); timeSeries.setRow(new TimeStamp(new Date(1336305521000L)), new Double[] { 1.0, 1.1, 1.2, 1.3 }); timeSeries.setRow(new TimeStamp(new Date(1336305521200L)), new Double[] { 3.0, 3.1, 3.2, 3.3 }); } @Test public void testGetSeriesId() { assertNotNull("SeriesId cannot be null", timeSeries.getSeriesId()); } @Test public void testGetNumRows() { assertEquals(4, timeSeries.getNumRows()); List<TimeStamp> tsl = timeSeries.getTimeStamps(); assertEquals(timeSeries.getNumRows(), tsl.size()); } @Test public void testAddColumn() { int sizeBefore = timeSeries.getNumColumns(); timeSeries.addColumn("SSSS", new DoubleColumn()); int sizeAfter = timeSeries.getNumColumns(); List l = timeSeries.getColumn("SSSS"); List ts = timeSeries.getTimeStamps(); assertNotNull(timeSeries.getColumn("SSSS")); assertEquals(sizeAfter - 1, sizeBefore); assertNotNull(l); assertNotNull(ts); assertEquals(l.size(), ts.size()); } @Test public void testAdd() { timeSeries.setRow(new TimeStamp(new Date(1336305521250L)), new Double[] { 3.0, 3.1, 3.2, 3.3 }); } @Test public void testDeleteColumn() { timeSeries.addColumn("SSSS", new DoubleColumn()); int sizeBefore = timeSeries.getNumColumns(); timeSeries.deleteColumn("SSSS"); int sizeAfter = timeSeries.getNumColumns(); assertNull(timeSeries.getColumn("SSSS")); assertEquals(sizeAfter, sizeBefore - 1); } @Test public void testDeleteFromTo() { timeSeries.delete(new TimeStamp(new Date(1336305521000L)), new TimeStamp(new Date(1336305521200L))); assertEquals(1, timeSeries.getNumRows()); assertEquals(1336305521300L, timeSeries.getTime(0).getMilliseconds()); assertEquals(4.0, timeSeries.getRow(new TimeStamp(new Date(1336305521300L)))[0]); } @Test public void testGetIndexBeforeOrEqual() { System.out.println(timeSeries); assertEquals(2, timeSeries.getIndexBeforeOrEqual(new TimeStamp( new Date(1336305521200L)))); assertEquals(2, timeSeries.getIndexBeforeOrEqual(new TimeStamp( new Date(1336305521250L)))); } @Test public void testGetIndexBefore() { System.out.println(timeSeries); assertEquals(1, timeSeries.getIndexBefore(new TimeStamp( new Date(1336305521200L)))); assertEquals(2, timeSeries.getIndexBefore(new TimeStamp( new Date(1336305521250L)))); } @Test public void testGetIndexAfter() { assertEquals(3, timeSeries.getIndexAfter(new TimeStamp(new Date( 1336305521200L)))); assertEquals(3, timeSeries.getIndexAfter(new TimeStamp(new Date( 1336305521250L)))); } @Test public void testGetMax() { assertEquals(4.0, timeSeries.getMax("Ask")); timeSeries.addColumn("NotComparable", new DoubleColumn()); assertNull(timeSeries.getMax("NotComparable")); } @Test public void testGetMin() { assertEquals(1.1, timeSeries.getMin("Bid")); timeSeries.addColumn("NotComparable", new DoubleColumn()); assertNull(timeSeries.getMax("NotComparable")); } @Test public void testGetMinTimestamp() { assertEquals(new TimeStamp(new Date(1336305521000L)), timeSeries.getMinTimestamp()); } @Test public void testGetMaxTimestamp() { assertEquals(new TimeStamp(new Date(1336305521300L)), timeSeries.getMaxTimestamp()); } @Test public void testSetWindowSize() throws InterruptedException { timeSeries.delete(new TimeStamp(new Date(1336305521000L)), new TimeStamp(new Date(1336305521300L))); assertEquals(0, timeSeries.getNumRows()); TimeStamp ts1 = new TimeStamp(new Date()); Thread.sleep(1); TimeStamp ts2 = new TimeStamp(new Date()); Thread.sleep(1); timeSeries.setMaxWindow(10); timeSeries.setRow(ts1, 1.0, 1.1, 1.2, 1.3); timeSeries.setRow(ts2, 2.0, 2.1, 2.2, 2.3); for (int i = 0; i < 7; i++) { timeSeries.setRow(new TimeStamp(new Date()), 2.0 + i, 2.1 + i, 2.2 + i, 2.3 + i); Thread.sleep(1); } // 10th row TimeStamp ts3 = new TimeStamp(new Date()); Thread.sleep(1); timeSeries.setRow(ts3, 8.0, 8.1, 8.2, 8.3); // 11th Row -- everything should be shifted left timeSeries.setRow(new TimeStamp(new Date()), 9.0, 9.1, 9.2, 9.3); assertEquals(10, timeSeries.getNumRows()); assertEquals(ts2, timeSeries.getMinTimestamp()); // prepare for shift to right TimeStamp ts4 = new TimeStamp(new Date()); timeSeries.setRow(ts4, 10.0, 10.1, 10.2, 10.3); Thread.sleep(1); timeSeries.setRow(new TimeStamp(new Date()), 10.0, 10.1, 10.2, 10.3); // shift to right timeSeries.setRow(ts1, 1.0, 1.1, 1.2, 1.3); assertEquals(10, timeSeries.getNumRows()); assertEquals(ts4, timeSeries.getMaxTimestamp()); assertEquals(ts1, timeSeries.getMinTimestamp()); } @Test public void testGetMaxWindow() { timeSeries.setMaxWindow(20); assertEquals(20, timeSeries.getMaxWindow()); } @Test public void testDeleteBeforeTimeStamp() throws InterruptedException { timeSeries.delete(new TimeStamp(new Date(1336305521000L)), new TimeStamp(new Date(1336305521300L))); assertEquals(0, timeSeries.getNumRows()); for (int i = 0; i < 5; i++) { timeSeries.setRow(new TimeStamp(new Date()), 1.0 + i, 1.1 + i, 1.2 + i, 1.3 + i); Thread.sleep(1); } TimeStamp ts2 = new TimeStamp(new Date()); timeSeries.setRow(ts2, 6.0, 6.1, 6.2, 6.3); Thread.sleep(1); for (int i = 0; i < 4; i++) { timeSeries.setRow(new TimeStamp(new Date()), 7.0 + i, 7.1 + i, 7.2 + i, 7.3 + i); Thread.sleep(1); } timeSeries.deleteBefore(ts2); assertEquals(4, timeSeries.getNumRows()); } @Test public void testDeleteBeforeIndex() throws InterruptedException { timeSeries.delete(new TimeStamp(new Date(1336305521000L)), new TimeStamp(new Date(1336305521300L))); assertEquals(0, timeSeries.getNumRows()); for (int i = 0; i < 5; i++) { timeSeries.setRow(new TimeStamp(new Date()), 1.0 + i, 1.1 + i, 1.2 + i, 1.3 + i); Thread.sleep(1); } TimeStamp ts2 = new TimeStamp(new Date()); timeSeries.setRow(ts2, 6.0, 6.1, 6.2, 6.3); Thread.sleep(1); for (int i = 0; i < 4; i++) { timeSeries.setRow(new TimeStamp(new Date()), 7.0 + i, 7.1 + i, 7.2 + i, 7.3 + i); Thread.sleep(1); } timeSeries.deleteBefore(4); assertEquals(5, timeSeries.getNumRows()); assertEquals(ts2, timeSeries.getTime(0)); timeSeries.deleteAfter(0); TimeStamp ts1 = new TimeStamp(new Date()); timeSeries.setRow(ts1, 6.0, 6.1, 6.2, 6.3); Thread.sleep(1); timeSeries.deleteBefore(0); assertEquals(0, timeSeries.getNumRows()); } @Test public void testDeleteAfterIndex() throws InterruptedException { timeSeries.delete(new TimeStamp(new Date(1336305521000L)), new TimeStamp(new Date(1336305521300L))); assertEquals(0, timeSeries.getNumRows()); for (int i = 0; i < 5; i++) { timeSeries.setRow(new TimeStamp(new Date()), 1.0 + i, 1.1 + i, 1.2 + i, 1.3 + i); Thread.sleep(1); } TimeStamp ts2 = new TimeStamp(new Date()); timeSeries.setRow(ts2, 6.0, 6.1, 6.2, 6.3); Thread.sleep(1); for (int i = 0; i < 4; i++) { timeSeries.setRow(new TimeStamp(new Date()), 7.0 + i, 7.1 + i, 7.2 + i, 7.3 + i); Thread.sleep(1); } timeSeries.deleteAfter(6); assertEquals(6, timeSeries.getNumRows()); assertEquals(ts2, timeSeries.getTime(timeSeries.getIndex(timeSeries .getMaxTimestamp()))); timeSeries.deleteAfter(0); TimeStamp ts1 = new TimeStamp(new Date()); timeSeries.setRow(ts1, 6.0, 6.1, 6.2, 6.3); Thread.sleep(1); timeSeries.deleteAfter(0); assertEquals(0, timeSeries.getNumRows()); // assertEquals(ts1, // timeSeries.getTime(timeSeries.getIndex(timeSeries.getMaxTimestamp()))); } @Test public void testDeleteAfterTimeStamp() throws InterruptedException { timeSeries.delete(new TimeStamp(new Date(1336305521000L)), new TimeStamp(new Date(1336305521300L))); assertEquals(0, timeSeries.getNumRows()); for (int i = 0; i < 5; i++) { timeSeries.setRow(new TimeStamp(new Date()), 1.0 + i, 1.1 + i, 1.2 + i, 1.3 + i); Thread.sleep(1); } TimeStamp ts1 = new TimeStamp(new Date()); timeSeries.setRow(ts1, 6.0, 6.1, 6.2, 6.3); Thread.sleep(1); TimeStamp ts2 = new TimeStamp(new Date()); timeSeries.setRow(ts2, 7.0, 7.1, 7.2, 7.3); Thread.sleep(1); for (int i = 0; i < 3; i++) { timeSeries.setRow(new TimeStamp(new Date()), 7.0 + i, 7.1 + i, 7.2 + i, 7.3 + i); Thread.sleep(1); } timeSeries.deleteAfter(ts2); assertEquals(6, timeSeries.getNumRows()); assertEquals(ts1, timeSeries.getTime(timeSeries.getIndex(timeSeries .getMaxTimestamp()))); timeSeries.deleteAfter(0); ts1 = new TimeStamp(new Date()); timeSeries.setRow(ts1, 6.0, 6.1, 6.2, 6.3); Thread.sleep(1); timeSeries.deleteAfter(ts1); assertEquals(0, timeSeries.getNumRows()); // assertEquals(ts1, // timeSeries.getTime(timeSeries.getIndex(timeSeries.getMaxTimestamp()))); } @Test public void testAddTimeSeries() { List<TypedColumn> columns = new ArrayList<TypedColumn>(); columns.add(new DoubleColumn()); columns.add(new DoubleColumn()); columns.add(new DoubleColumn()); columns.add(new DoubleColumn()); TSContainer2 timeSeries2 = new TSContainer2( TSContainerTest.class.getName(), Arrays.asList(headers), columns); timeSeries2.setRow(new TimeStamp(new Date(1336305521100L)), new Double[] { 2.0, 2.1, 2.2, 2.3 }); timeSeries2.setRow(new TimeStamp(new Date(1336305521250L)), new Double[] { 2.5, 2.51, 2.52, 2.53 }); timeSeries2.setRow(new TimeStamp(new Date(1336305521000L)), new Double[] { 1.0, 1.1, 1.2, 1.3 }); timeSeries2.setRow(new TimeStamp(new Date(1336305521200L)), new Double[] { 3.0, 3.1, 3.2, 3.3 }); /* * System.out.println("===="); * System.out.println(timeSeries.toString()); * System.out.println("===="); * System.out.println(timeSeries2.toString()); */ timeSeries.addTimeSeries(timeSeries2, true); /* * System.out.println("Sum"); System.out.println(timeSeries.toString()); */ assertEquals(2.5, timeSeries.getRow(new TimeStamp(new Date(1336305521250L)))[0]); assertEquals(2.0, timeSeries.getRow(new TimeStamp(new Date(1336305521000L)))[0]); assertEquals(4.0, timeSeries.getRow(new TimeStamp(new Date(1336305521100L)))[0]); } @Test public void testGetTimeFrame() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, IllegalArgumentException, NoSuchMethodException, InvocationTargetException { TSContainer2 tsc = timeSeries.getTimeFrame(new TimeStamp(new Date( 1336305521000L)), new TimeStamp(new Date(1336305521200L))); /* System.out.println("===="); System.out.println(timeSeries.toString()); System.out.println("===="); System.out.println(tsc.toString()); */ List<TypedColumn> columns = new ArrayList<TypedColumn>(); columns.add(new StringColumn()); columns.add(new StringColumn()); columns.add(new StringColumn()); columns.add(new StringColumn()); TSContainer2 timeSeries2 = new TSContainer2(TSContainerTest.class.getName(), Arrays.asList(headers), columns); timeSeries2.setRow(new TimeStamp(new Date(1336305521100L)), new Double[] { 2.0, 2.1, 2.2, 2.3 }); timeSeries2.setRow(new TimeStamp(new Date(1336305521300L)), new Double[] { 4.0, 4.1, 4.2, 4.3 }); timeSeries2.setRow(new TimeStamp(new Date(1336305521000L)), new Double[] { 1.0, 1.1, 1.2, 1.3 }); timeSeries2.setRow(new TimeStamp(new Date(1336305521200L)), new Double[] { 3.0, 3.1, 3.2, 3.3 }); TSContainer2 tsc2 = timeSeries.getTimeFrame(new TimeStamp(new Date( 1336305521000L)), new TimeStamp(new Date(1336305521200L))); /* System.out.println("===="); System.out.println(timeSeries2.toString()); System.out.println("===="); System.out.println(tsc2.toString()); */ assertEquals(2, tsc.getNumRows()); assertEquals(2, tsc2.getNumRows()); //fail("Not implemented"); } }