package it.unito.geosummly.tools;
import it.unito.geosummly.io.CSVDataIO;
import it.unito.geosummly.utils.Pair;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.TreeSet;
import java.util.Vector;
import org.apache.commons.csv.CSVRecord;
import junit.framework.TestCase;
public class ClusteringToolsTest extends TestCase {
public void testBoundariesFromCSV ()
{
CSVDataIO dataIO=new CSVDataIO();
try {
List<CSVRecord> listDens=dataIO.readCSVFile("tests/density-transformation-matrix.csv");
ClusteringTools tools=new ClusteringTools();
ArrayList<Pair<Double, Double>> boundaries = tools.getFeatureBoundariesFromCSV(listDens);
assertEquals(12, boundaries.size());
assertEquals(0.0, boundaries.get(2).getFirst());
assertEquals(55.79, boundaries.get(2).getSecond(), 0.01);
} catch (IOException e) {
e.printStackTrace();
}
}
public void testBuildNormalizedFromList() {
ArrayList<ArrayList<Double>> input = new ArrayList<ArrayList<Double>>();
ArrayList<Double> row_1 = new ArrayList<Double>();
row_1.add(1.0); row_1.add(0.1); row_1.add(0.5);
input.add(row_1);
ClusteringTools tools = new ClusteringTools();
ArrayList<ArrayList<Double>> actual = tools.buildNormalizedFromList(input);
ArrayList<ArrayList<Double>> expected = new ArrayList<ArrayList<Double>>();
ArrayList<Double> row = new ArrayList<Double>();
row.add(1.0); row.add(0.1); row.add(0.5);
expected.add(row);
assertEquals(expected, actual);
}
public void testGetFeaturesMap() {
ArrayList<String> labels = new ArrayList<String>();
labels.add("ONE"); labels.add("TWO"); labels.add("ONE AND TWO");
ClusteringTools tools = new ClusteringTools();
HashMap<Integer, String> actual = tools.getFeaturesMap(labels);
HashMap<Integer, String> expected = new HashMap<Integer, String>();
expected.put(2, "ONE");
expected.put(3, "TWO");
assertEquals(expected, actual);
}
public void testGetDeltadMap() {
ArrayList<String> labels = new ArrayList<String>();
labels.add("ONE"); labels.add("TWO"); labels.add("ONE AND TWO");
ArrayList<String> minpts = new ArrayList<String>();
minpts.add("2.5"); minpts.add("3.5"); minpts.add("0.5");
ClusteringTools tools = new ClusteringTools();
HashMap<String, Double> actual = tools.getDeltadMap(labels, minpts);
HashMap<String, Double> expected = new HashMap<String, Double>();
expected.put("ONE", 2.5);
expected.put("TWO", 3.5);
expected.put("ONE AND TWO", 0.5);
assertEquals(expected, actual);
}
public void testGetEps() {
ArrayList<ArrayList<Double>> dataset = new ArrayList<ArrayList<Double>>();
ArrayList<Double> r1 = new ArrayList<Double>();
r1.add(1.0);
ArrayList<Double> r2 = new ArrayList<Double>();
r1.add(2.0);
ArrayList<Double> r3 = new ArrayList<Double>();
r1.add(3.0);
ArrayList<Double> r4 = new ArrayList<Double>();
r1.add(4.0);
dataset.add(r1); dataset.add(r2);
dataset.add(r3); dataset.add(r4);
ClusteringTools tools = new ClusteringTools();
double actual = tools.getEps(dataset);
double expected = Math.sqrt(2)*0.5;
assertEquals(expected, actual);
}
public void testGetClusterLabels() {
TreeSet<String> expected = new TreeSet<String>();
expected.add("A"); expected.add("B"); expected.add("C");
expected.add("D");
HashMap<Integer, String> clusters = new HashMap<Integer, String>();
clusters.put(10, "A"); clusters.put(32, "B"); clusters.put(15, "C");
clusters.put(50, "B"); clusters.put(1, "D");
ClusteringTools tools = new ClusteringTools();
TreeSet<String> actual = tools.getClusterLabels(clusters);
assertEquals(expected, actual);
}
public void testGetCellsOfClusters() {
ArrayList<TreeSet<Integer>> expected = new ArrayList<TreeSet<Integer>>();
TreeSet<Integer> tree_10= new TreeSet<Integer>();
TreeSet<Integer> tree_32_50= new TreeSet<Integer>();
TreeSet<Integer> tree_15= new TreeSet<Integer>();
TreeSet<Integer> tree_1= new TreeSet<Integer>();
tree_10.add(100); tree_10.add(1000);
tree_32_50.add(300); tree_32_50.add(400);
tree_32_50.add(700); tree_32_50.add(800);
tree_15.add(500); tree_15.add(600);
tree_1.add(900); tree_1.add(1000);
expected.add(tree_10); expected.add(tree_32_50);
expected.add(tree_15); expected.add(tree_1);
ClusteringTools tools = new ClusteringTools();
HashMap<Integer, String> clusters = new HashMap<Integer, String>();
clusters.put(10, "A"); clusters.put(32, "B"); clusters.put(15, "C");
clusters.put(50, "B"); clusters.put(1, "D");
TreeSet<String> tree = new TreeSet<String>();
tree.add("A"); tree.add("B"); tree.add("C");
tree.add("D");
HashMap<Integer, ArrayList<Integer>> cells = new HashMap<Integer, ArrayList<Integer>>();
ArrayList<Integer> cells_10 = new ArrayList<Integer>();
ArrayList<Integer> cells_32 = new ArrayList<Integer>();
ArrayList<Integer> cells_15 = new ArrayList<Integer>();
ArrayList<Integer> cells_50 = new ArrayList<Integer>();
ArrayList<Integer> cells_1 = new ArrayList<Integer>();
cells_10.add(100); cells_10.add(1000);
cells_32.add(300); cells_32.add(400);
cells_15.add(500); cells_15.add(600);
cells_50.add(700); cells_50.add(800);
cells_1.add(900); cells_1.add(1000); cells_1.add(1000);
cells.put(10, cells_10);
cells.put(32, cells_32);
cells.put(15, cells_15);
cells.put(50, cells_50);
cells.put(1, cells_1);
ArrayList<TreeSet<Integer>> actual = tools.getCellsOfClusters(clusters, cells, tree);
assertEquals(expected, actual);
}
public void testBuildHoldhoutMap() {
Vector<Integer> vector_A = new Vector<Integer>();
Vector<Integer> vector_B = new Vector<Integer>();
Vector<Integer> vector_C = new Vector<Integer>();
Vector<Integer> vector_D = new Vector<Integer>();
vector_A.add(100); vector_A.add(1000);
vector_B.add(300); vector_B.add(400);
vector_B.add(700); vector_B.add(800);
vector_C.add(500); vector_C.add(600);
vector_D.add(900); vector_D.add(1000);
HashMap<String, Vector<Integer>> expected = new HashMap<String, Vector<Integer>>();
expected.put("A", vector_A);
expected.put("B", vector_B);
expected.put("C", vector_C);
expected.put("D", vector_D);
ClusteringTools tools = new ClusteringTools();
TreeSet<String> tree = new TreeSet<String>();
tree.add("A"); tree.add("B"); tree.add("C");
tree.add("D");
ArrayList<TreeSet<Integer>> cells = new ArrayList<TreeSet<Integer>>();
TreeSet<Integer> tree_10= new TreeSet<Integer>();
TreeSet<Integer> tree_32_50= new TreeSet<Integer>();
TreeSet<Integer> tree_15= new TreeSet<Integer>();
TreeSet<Integer> tree_1= new TreeSet<Integer>();
tree_10.add(100); tree_10.add(1000);
tree_32_50.add(300); tree_32_50.add(400);
tree_32_50.add(700); tree_32_50.add(800);
tree_15.add(500); tree_15.add(600);
tree_1.add(900); tree_1.add(1000);
cells.add(tree_10); cells.add(tree_32_50);
cells.add(tree_15); cells.add(tree_1);
HashMap<String, Vector<Integer>> actual = tools.buildHoldoutMap(tree, cells, 0);
assertEquals(expected, actual);
}
}