source: branches/MetisMQI/src/test/java/weka/filters/AbstractTimeSeriesFilterTest.java

Last change on this file was 29, checked in by gnappo, 15 years ago

Taggata versione per la demo e aggiunto branch.

File size: 5.4 KB
Line 
1/*
2 *    This program is free software; you can redistribute it and/or modify
3 *    it under the terms of the GNU General Public License as published by
4 *    the Free Software Foundation; either version 2 of the License, or
5 *    (at your option) any later version.
6 *
7 *    This program is distributed in the hope that it will be useful,
8 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
9 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 *    GNU General Public License for more details.
11 *
12 *    You should have received a copy of the GNU General Public License
13 *    along with this program; if not, write to the Free Software
14 *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
15 */
16
17/*
18 * Copyright (C) 2002 University of Waikato
19 */
20
21package weka.filters;
22
23import weka.core.Instance;
24import weka.core.Instances;
25import weka.filters.unsupervised.attribute.TimeSeriesTranslate;
26import weka.filters.unsupervised.attribute.TimeSeriesTranslateTest;
27
28import junit.framework.Test;
29import junit.framework.TestSuite;
30
31/**
32 * Tests TimeSeriesTranslateFilter. Run from the command line with:<p>
33 * java weka.filters.TimeSeriesTranslateFilterTest
34 *
35 * @author <a href="mailto:len@reeltwo.com">Len Trigg</a>
36 * @version $Revision: 1.7 $
37 */
38public abstract class AbstractTimeSeriesFilterTest extends AbstractFilterTest {
39
40  /** Tolerance allowed in double comparisons */
41  protected static final double TOLERANCE = 0.001;
42
43  public AbstractTimeSeriesFilterTest(String name) { super(name);  }
44
45  /** Creates a default TimeSeriesTranslateFilter */
46  public abstract Filter getFilter();
47
48  public void testDefault() {
49    testInstanceRange_X(((TimeSeriesTranslate)m_Filter).getInstanceRange());
50  }
51
52  public void testInstanceRange() {
53
54    testInstanceRange_X(-5);
55    testInstanceRange_X(-2);
56    testInstanceRange_X(2);
57    testInstanceRange_X(5);
58  }
59
60  public void testFillWithMissing() {
61
62    ((TimeSeriesTranslate)m_Filter).setFillWithMissing(true);
63    Instances result = useFilter();
64    // Number of attributes and instances shouldn't change
65    assertEquals(m_Instances.numAttributes(), result.numAttributes());
66    assertEquals(m_Instances.numInstances(), result.numInstances());
67    // Check conversion looks OK
68    for (int i = 0; i < result.numInstances(); i++) {
69      Instance in = m_Instances.instance(i);
70      Instance out = result.instance(i);
71      for (int j = 0; j < result.numAttributes(); j++) {
72        if ((j != 1) && (j != 2)) {
73          if (in.isMissing(j)) {
74            assertTrue("Nonselected missing values should pass through",
75                   out.isMissing(j));
76          } else if (result.attribute(j).isString()) {
77            assertEquals("Nonselected attributes shouldn't change. "
78                         + in + " --> " + out,
79                         m_Instances.attribute(j).value((int)in.value(j)),
80                         result.attribute(j).value((int)out.value(j)));
81          } else {
82            assertEquals("Nonselected attributes shouldn't change. "
83                         + in + " --> " + out,
84                         in.value(j),
85                         out.value(j), TOLERANCE);
86          }
87        }
88      }
89    }   
90  }
91
92  private void testInstanceRange_X(int range) {
93    ((TimeSeriesTranslate)m_Filter).setInstanceRange(range);
94    Instances result = useFilter();
95    // Number of attributes and instances shouldn't change
96    assertEquals(m_Instances.numAttributes(), result.numAttributes());
97    assertEquals(m_Instances.numInstances() - Math.abs(range), result.numInstances());
98    // Check conversion looks OK
99    for (int i = 0; i < result.numInstances(); i++) {
100      Instance in = m_Instances.instance(i - ((range > 0) ? 0 : range));
101      Instance out = result.instance(i);
102      for (int j = 0; j < result.numAttributes(); j++) {
103        if ((j != 1) && (j != 2)) {
104          if (in.isMissing(j)) {
105            assertTrue("Nonselected missing values should pass through",
106                   out.isMissing(j));
107          } else if (result.attribute(j).isString()) {
108            assertEquals("Nonselected attributes shouldn't change. "
109                         + in + " --> " + out,
110                         m_Instances.attribute(j).value((int)in.value(j)),
111                         result.attribute(j).value((int)out.value(j)));
112          } else {
113            assertEquals("Nonselected attributes shouldn't change. "
114                         + in + " --> " + out,
115                         in.value(j),
116                         out.value(j), TOLERANCE);
117          }
118        }
119      }
120    }   
121  }
122 
123  /**
124   * tests the filter in conjunction with the FilteredClassifier
125   */
126  public void testFilteredClassifier() {
127    try {
128      Instances data = getFilteredClassifierData();
129
130      for (int i = 0; i < data.numAttributes(); i++) {
131        if (data.classIndex() == i)
132          continue;
133        if (data.attribute(i).isNumeric()) {
134          ((TimeSeriesTranslate) m_FilteredClassifier.getFilter()).setAttributeIndices("" + (i + 1));
135          ((TimeSeriesTranslate) m_FilteredClassifier.getFilter()).setFillWithMissing(true);
136          break;
137        }
138      }
139    }
140    catch (Exception e) {
141      fail("Problem setting up test for FilteredClassifier: " + e.toString());
142    }
143   
144    super.testFilteredClassifier();
145  }
146
147  public static Test suite() {
148    return new TestSuite(TimeSeriesTranslateTest.class);
149  }
150
151  public static void main(String[] args){
152    junit.textui.TestRunner.run(suite());
153  }
154
155}
Note: See TracBrowser for help on using the repository browser.