001 package org.hackystat.projectbrowser.page.trajectory.dtw; 002 003 import static org.junit.Assert.assertEquals; 004 import static org.junit.Assert.fail; 005 006 import org.junit.Before; 007 import org.junit.Test; 008 009 /** 010 * Test the DTW utilities. 011 * 012 * @author Pavel Senin 013 * 014 */ 015 public class TestDTWUtilFactory { 016 017 private static double[] series1 = { 0.08333333333333333, 2.3333333333333335, 4.083333333333333, 018 4.166666666666667, 7.633333333, 11.10666667, 14.583333333333334, 15.333333333333334, 019 13.583333333333334, 13.583333333333334, 13.5, 11.3, 9.1, 6.916666666666667, 020 7.416666666666667, 7.166666666666667, 7.333333333333333, 8.083333333333334, 8.1, 8.12, 8.14, 021 8.166666666666666, 6.833333333333333, 9.25, 6.666666666666667, 5.5, 4.4, 3.3, 2.2, 1.1, 0.0 }; 022 023 private static double[] series1Normal = { -0.422452038, -0.292359192, -0.191175867, -0.186357614, 024 0.014081735, 0.214906543, 0.415924082, 0.459288364, 0.358105039, 0.358105039, 0.353286785, 025 0.226084891, 0.098882997, -0.027355246, 0.001554275, -0.012900485, -0.003263978, 0.040100304, 026 0.041063955, 0.042220335, 0.043376716, 0.044918557, -0.032173500, 0.107555854, -0.041810007, 027 -0.109265557, -0.172866504, -0.236467451, -0.300068398, -0.363669345, -0.427270292 }; 028 029 private static double[] series2 = { 0.0, 1.29, 2.5833333333333335, 3.8333333333333335, 5.25, 030 4.25, 3.8333333333333335, 4.636666667, 5.443333333, 6.25, 8.75, 8.833333333333334, 8.25, 031 7.75, 9.803333333, 11.85666667, 13.916666666666666, 15.166666666666666, 14.0, 032 12.333333333333334, 14.416666666666666, 12.24333333, 10.07666667, 7.916666666666667, 033 8.166666666666666, 7.833333333333333, 8.166666666666666, 7.416666666666667, 4.944444444, 034 2.472222222, 0.0 }; 035 private static double[] series2Normal = { -0.418689489, -0.346421051, -0.273965873, -0.203938316, 036 -0.124573752, -0.180595797, -0.203938316, -0.158933940, -0.113742823, -0.068551707, 037 0.071503406, 0.076171910, 0.043492383, 0.015481361, 0.130513294, 0.245545227, 0.360950640, 038 0.430978196, 0.365619143, 0.272249068, 0.388961662, 0.267207084, 0.145825986, 0.024818368, 039 0.038823880, 0.020149865, 0.038823880, -0.003192654, -0.141691599, -0.280190544, 040 -0.418689489 }; 041 042 /** 043 * Set up the test environment. 044 */ 045 @Before 046 public void before() { 047 int size = series1.length; 048 double[] xAxis = new double[size]; 049 for (int i = 0; i < size; i++) { 050 xAxis[i] = ((Integer) i).doubleValue(); 051 } 052 try { 053 double[][] s1 = DTWUtilFactory.rBind(xAxis, series1); 054 double[][] s2 = DTWUtilFactory.rBind(xAxis, series2); 055 assertEquals("Testing rbind", s2[2][0], xAxis[2], 0.000001D); 056 assertEquals("Testing rbind", s1[3][0], xAxis[3], 0.000001D); 057 } 058 catch (DTWException e) { 059 fail("Was unable to bind valid data."); 060 e.printStackTrace(); 061 } 062 } 063 064 /** 065 * Test the mean calculation. 066 */ 067 @Test 068 public void testMean() { 069 assertEquals("Testing mean calculation", 7.389785D, DTWUtilFactory.mean(series1), 0.000001D); 070 assertEquals("Testing mean calculation", 7.473656D, DTWUtilFactory.mean(series2), 0.000001D); 071 } 072 073 /** 074 * Test the variance calculation. 075 */ 076 @Test 077 public void testVariance() { 078 double[] t1 = new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 079 assertEquals("Testing variance calculation", 9.166667D, DTWUtilFactory.var(t1), 0.00001D); 080 assertEquals("Testing variance calculation", 17.29534D, DTWUtilFactory.var(series1), 0.00001D); 081 assertEquals("Testing variance calculation", 17.85012D, DTWUtilFactory.var(series2), 0.00001D); 082 } 083 084 /** 085 * Test the time-series normalization. 086 */ 087 @Test 088 public void testNormalize() { 089 double[] t1 = new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 090 double[] t1Normal = { -0.49090909, -0.38181818, -0.27272727, -0.16363636, -0.05454545, 091 0.05454545, 0.16363636, 0.27272727, 0.38181818, 0.49090909 }; 092 double[] t1test = DTWUtilFactory.normalize(t1); 093 for (int i = 0; i < t1.length; i++) { 094 assertEquals("Testing normalization", t1Normal[i], t1test[i], 0.00001D); 095 } 096 097 double[] series1test = DTWUtilFactory.normalize(series1); 098 for (int i = 0; i < series1.length; i++) { 099 assertEquals("Testing normalization", series1Normal[i], series1test[i], 0.00001D); 100 } 101 102 double[] series2test = DTWUtilFactory.normalize(series2); 103 for (int i = 0; i < series2.length; i++) { 104 assertEquals("Testing normalization", series2Normal[i], series2test[i], 0.00001D); 105 } 106 } 107 108 // public void testGetSymmetricStep(){ 109 // 110 // } 111 }