package aima.test.core.unit.learning.inductive;
import org.junit.Assert;
import org.junit.Test;
import aima.core.learning.framework.DataSet;
import aima.core.learning.framework.DataSetFactory;
import aima.core.learning.inductive.DLTest;
import aima.core.learning.inductive.DecisionList;
/**
* @author Ravi Mohan
*
*/
public class DecisionListTest {
@Test
public void testDecisonListWithNoTestsReturnsDefaultValue()
throws Exception {
DecisionList dlist = new DecisionList("Yes", "No");
DataSet ds = DataSetFactory.getRestaurantDataSet();
Assert.assertEquals("No", dlist.predict(ds.getExample(0)));
}
@Test
public void testDecisionListWithSingleTestReturnsTestValueIfTestSuccessful()
throws Exception {
DecisionList dlist = new DecisionList("Yes", "No");
DataSet ds = DataSetFactory.getRestaurantDataSet();
DLTest test = new DLTest();
test.add("type", "French");
dlist.add(test, "test1success");
Assert.assertEquals("test1success", dlist.predict(ds.getExample(0)));
}
@Test
public void testDecisionListFallsThruToNextTestIfOneDoesntMatch()
throws Exception {
DecisionList dlist = new DecisionList("Yes", "No");
DataSet ds = DataSetFactory.getRestaurantDataSet();
DLTest test1 = new DLTest();
test1.add("type", "Thai"); // doesn't match first example
dlist.add(test1, "test1success");
DLTest test2 = new DLTest();
test2.add("type", "French");
dlist.add(test2, "test2success");// matches first example
Assert.assertEquals("test2success", dlist.predict(ds.getExample(0)));
}
@Test
public void testDecisionListFallsThruToDefaultIfNoTestMatches()
throws Exception {
DecisionList dlist = new DecisionList("Yes", "No");
DataSet ds = DataSetFactory.getRestaurantDataSet();
DLTest test1 = new DLTest();
test1.add("type", "Thai"); // doesn't match first example
dlist.add(test1, "test1success");
DLTest test2 = new DLTest();
test2.add("type", "Burger");
dlist.add(test2, "test2success");// doesn't match first example
Assert.assertEquals("No", dlist.predict(ds.getExample(0)));
}
@Test
public void testDecisionListHandlesEmptyDataSet() throws Exception {
// tests first base case of recursion
DecisionList dlist = new DecisionList("Yes", "No");
DLTest test1 = new DLTest();
test1.add("type", "Thai"); // doesn't match first example
dlist.add(test1, "test1success");
}
@Test
public void testDecisionListMerge() throws Exception {
DecisionList dlist1 = new DecisionList("Yes", "No");
DecisionList dlist2 = new DecisionList("Yes", "No");
DataSet ds = DataSetFactory.getRestaurantDataSet();
DLTest test1 = new DLTest();
test1.add("type", "Thai"); // doesn't match first example
dlist1.add(test1, "test1success");
DLTest test2 = new DLTest();
test2.add("type", "French");
dlist2.add(test2, "test2success");// matches first example
DecisionList dlist3 = dlist1.mergeWith(dlist2);
Assert.assertEquals("test2success", dlist3.predict(ds.getExample(0)));
}
}