/**
* Copyright (C) 2001-2017 by RapidMiner and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapidminer.com
*
* This program is free software: you can redistribute it and/or modify it under the terms of the
* GNU Affero General Public License as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License along with this program.
* If not, see http://www.gnu.org/licenses/.
*/
package com.rapidminer.example.set;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.rapidminer.example.Attribute;
import com.rapidminer.example.ExampleSet;
import com.rapidminer.example.ExampleSetFactory;
/**
* Test the constructor of SplittedExampleSet that composes partitions.
*
* @author Gisa Schaefer
*/
public class SplittedExampleSetCompositionTest {
ExampleSet es = ExampleSetFactory.createExampleSet(new double[][] { { 0 }, { 1 }, { 2 }, { 3 }, { 4 }, { 5 } });
@Test
public void compositionTest1PartionSelected() {
Partition outer = new Partition(new int[] { 1, 0, 0, 2, 0, 2 }, 3);
SplittedExampleSet outerEs = new SplittedExampleSet(es, outer);
outerEs.selectSingleSubset(0);
Partition inner = new Partition(new int[] { 1, 0, 1 }, 2);
SplittedExampleSet innerEsComposed = new SplittedExampleSet(outerEs, inner, true);
SplittedExampleSet innerEsOld = new SplittedExampleSet(outerEs, inner);
assertEquals(innerEsOld.size(), innerEsComposed.size());
assertEquals(innerEsOld.getNumberOfSubsets(), innerEsComposed.getNumberOfSubsets());
Attribute att = innerEsOld.getAttributes().get("att1");
for (int i = 0; i < innerEsOld.size(); i++) {
assertEquals(innerEsOld.getExample(i).getValue(att), innerEsComposed.getExample(i).getValue(att), 1e-15);
}
innerEsComposed.selectSingleSubset(1);
innerEsOld.selectSingleSubset(1);
for (int i = 0; i < innerEsOld.size(); i++) {
assertEquals(innerEsOld.getExample(i).getValue(att), innerEsComposed.getExample(i).getValue(att), 1e-15);
}
}
@Test
public void compositionTest2PartitionsSelected() {
Partition outer = new Partition(new int[] { 1, 0, 0, 2, 0, 2 }, 3);
SplittedExampleSet outerEs = new SplittedExampleSet(es, outer);
outerEs.selectAllSubsetsBut(0);
Partition inner = new Partition(new int[] { 1, 0, 1 }, 2);
SplittedExampleSet innerEsComposed = new SplittedExampleSet(outerEs, inner, true);
SplittedExampleSet innerEsOld = new SplittedExampleSet(outerEs, inner);
assertEquals(innerEsOld.size(), innerEsComposed.size());
assertEquals(innerEsOld.getNumberOfSubsets(), innerEsComposed.getNumberOfSubsets());
Attribute att = innerEsOld.getAttributes().get("att1");
for (int i = 0; i < innerEsOld.size(); i++) {
assertEquals(innerEsOld.getExample(i).getValue(att), innerEsComposed.getExample(i).getValue(att), 1e-15);
}
innerEsComposed.selectAllSubsetsBut(1);
innerEsOld.selectAllSubsetsBut(1);
for (int i = 0; i < innerEsOld.size(); i++) {
assertEquals(innerEsOld.getExample(i).getValue(att), innerEsComposed.getExample(i).getValue(att), 1e-15);
}
}
@Test
public void compositionTestSizeNotMatching() {
Partition outer = new Partition(new int[] { 1, 0, 0, 2, 0, 2 }, 3);
SplittedExampleSet outerEs = new SplittedExampleSet(es, outer);
Partition inner = new Partition(new int[] { 1, 0, 1 }, 2);
SplittedExampleSet innerEsComposed = new SplittedExampleSet(outerEs, inner, true);
SplittedExampleSet innerEsOld = new SplittedExampleSet(outerEs, inner);
assertEquals(innerEsOld.size(), innerEsComposed.size());
assertEquals(innerEsOld.getNumberOfSubsets(), innerEsComposed.getNumberOfSubsets());
Attribute att = innerEsOld.getAttributes().get("att1");
for (int i = 0; i < innerEsOld.size(); i++) {
assertEquals(innerEsOld.getExample(i).getValue(att), innerEsComposed.getExample(i).getValue(att), 1e-15);
}
}
@Test
public void compositionWithPartitionComposition() {
Partition outer = new Partition(new int[] { 1, 0, 0, 2, 0, 2 }, 3);
SplittedExampleSet outerEs = new SplittedExampleSet(es, outer);
outerEs.selectSingleSubset(0);
Partition inner = new Partition(new int[] { 1, 0, 1 }, 2);
SplittedExampleSet innerEsComposed = new SplittedExampleSet(outerEs, inner, true);
Partition outer2 = (Partition) outer.clone();
outer2.clearSelection();
outer2.selectSubset(0);
Partition inner2 = (Partition) inner.clone();
Partition composition = Partition.compose(outer2, inner2);
SplittedExampleSet composedPartitionSet = new SplittedExampleSet(es, composition);
assertEquals(composedPartitionSet.size(), innerEsComposed.size());
assertEquals(composedPartitionSet.getNumberOfSubsets(), innerEsComposed.getNumberOfSubsets());
Attribute att = composedPartitionSet.getAttributes().get("att1");
for (int i = 0; i < composedPartitionSet.size(); i++) {
assertEquals(composedPartitionSet.getExample(i).getValue(att), innerEsComposed.getExample(i).getValue(att),
1e-15);
}
}
}