source: branches/MetisMQI/src/test/java/weka/filters/unsupervised/instance/RemoveWithValuesTest.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.0 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.unsupervised.instance;
22
23import weka.core.Instances;
24import weka.filters.AbstractFilterTest;
25import weka.filters.Filter;
26
27import junit.framework.Test;
28import junit.framework.TestSuite;
29
30/**
31 * Tests RemoveWithValues. Run from the command line with:<p>
32 * java weka.filters.unsupervised.instance.RemoveWithValuesTest
33 *
34 * @author <a href="mailto:len@reeltwo.com">Len Trigg</a>
35 * @version $Revision: 1.6 $
36 */
37public class RemoveWithValuesTest extends AbstractFilterTest {
38 
39  public RemoveWithValuesTest(String name) { super(name);  }
40
41  /** Creates a default RemoveWithValues */
42  public Filter getFilter() {
43    RemoveWithValues f = new RemoveWithValues();
44    f.setAttributeIndex("3");
45    f.setInvertSelection(true);
46    return f;
47  }
48
49  public void testString() {
50    Instances icopy = new Instances(m_Instances);
51    try {
52      ((RemoveWithValues)m_Filter).setAttributeIndex("1");
53      m_Filter.setInputFormat(icopy);
54      fail("Should have thrown an exception selecting on a STRING attribute!");
55    } catch (Exception ex) {
56      // OK
57    }
58  }
59
60  public void testNominal() {
61    ((RemoveWithValues)m_Filter).setAttributeIndex("2");
62    Instances result = useFilter();
63    assertEquals(m_Instances.numAttributes(), result.numAttributes());
64    assertEquals("Default nominal selection matches all values",
65                 m_Instances.numInstances(),  result.numInstances());
66
67    try {
68      ((RemoveWithValues)m_Filter).setNominalIndices("1-2");
69    } catch (Exception ex) {
70      fail("Shouldn't ever get here unless Range chamges incompatibly");
71    }
72    result = useFilter();
73    assertEquals(m_Instances.numAttributes(), result.numAttributes());
74    assertTrue(m_Instances.numInstances() > result.numInstances());
75
76    try {
77      ((RemoveWithValues)m_Filter).setNominalIndices("3-last");
78    } catch (Exception ex) {
79      fail("Shouldn't ever get here unless Range chamges incompatibly");
80    }
81    Instances result2 = useFilter();
82    assertEquals(m_Instances.numAttributes(), result2.numAttributes());
83    assertTrue(m_Instances.numInstances() > result2.numInstances());
84    assertEquals(m_Instances.numInstances(), result.numInstances() + result2.numInstances());
85
86    ((RemoveWithValues)m_Filter).setInvertSelection(false);
87    result = useFilter();
88    assertEquals(m_Instances.numAttributes(), result.numAttributes());
89    assertEquals(m_Instances.numInstances(), result.numInstances() + result2.numInstances());
90  }
91
92  public void testNumeric() {
93    ((RemoveWithValues)m_Filter).setAttributeIndex("3");
94    Instances result = useFilter();
95    assertEquals(m_Instances.numAttributes(), result.numAttributes());
96    assertEquals("Default split point matches values less than 0",
97                 0,  result.numInstances());
98
99    ((RemoveWithValues)m_Filter).setSplitPoint(3);
100    result = useFilter();
101    assertEquals(m_Instances.numAttributes(), result.numAttributes());
102    assertTrue(m_Instances.numInstances() > result.numInstances());
103
104    // Test inversion is working.
105    ((RemoveWithValues)m_Filter).setInvertSelection(false);
106    Instances result2 = useFilter();
107    assertEquals(m_Instances.numAttributes(), result2.numAttributes());
108    assertTrue(m_Instances.numInstances() > result2.numInstances());
109    assertEquals(m_Instances.numInstances(), result.numInstances() + result2.numInstances());
110  }
111
112  public void testMatchMissingValues() {
113    ((RemoveWithValues)m_Filter).setAttributeIndex("5");
114    ((RemoveWithValues)m_Filter).setInvertSelection(false);
115    ((RemoveWithValues)m_Filter).setMatchMissingValues(false);
116    Instances result = useFilter();
117    assertEquals(m_Instances.numAttributes(), result.numAttributes());
118    assertTrue(result.numInstances() > 0);
119    for (int i = 0; i < result.numInstances(); i++) {
120      assertTrue("Should select only instances with missing values",
121             result.instance(i).isMissing(4));
122    }
123  }
124 
125  /**
126   * filter cannot be used in conjunction with the FilteredClassifier, since
127   * an instance used in distributionForInstance/classifyInstance might get
128   * deleted.
129   */
130  public void testFilteredClassifier() {
131    // nothing
132  }
133
134  public static Test suite() {
135    return new TestSuite(RemoveWithValuesTest.class);
136  }
137
138  public static void main(String[] args){
139    junit.textui.TestRunner.run(suite());
140  }
141
142}
Note: See TracBrowser for help on using the repository browser.