package test.java.integration.tests.galc; import com.datascience.core.base.ContValue; import com.datascience.core.base.LObject; import com.datascience.core.base.Worker; import com.datascience.datastoring.datamodels.memory.InMemoryData; import com.datascience.datastoring.datamodels.memory.InMemoryResults; import com.datascience.core.results.DatumContResults; import com.datascience.core.results.ResultsFactory; import com.datascience.core.results.WorkerContResults; import com.datascience.galc.ContinuousIpeirotis; import com.datascience.galc.ContinuousProject; import com.datascience.galc.EmpiricalData; import org.junit.Test; import test.java.integration.helpers.ObjectsResultsParser; import test.java.integration.helpers.TestSettings; import test.java.integration.helpers.WorkersResultsParser; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class ContinuousBaseTestScenario { public final static String DATA_BASE_DIR = TestSettings.GALC_TESTDATA_BASEDIR; public final static String RESULTS_BASE_DIR = TestSettings.GALC_RESULTS_BASEDIR; public static final int MAX_ITERATIONS = 20; public static final double EPSILON = 1e-5; public static final double TOLERANCE = 0.0000000001; protected static ContinuousIpeirotis algorithm; protected static ContinuousProject project; protected static ObjectsResultsParser objectsResultsParser; protected static WorkersResultsParser workersResultsParser; public static class Setup { public ContinuousIpeirotis algorithm; public String testName; public Setup(ContinuousIpeirotis alg, String tName) { algorithm = alg; testName = tName; } } public static void initSetup(Setup testSetup) throws UnsupportedEncodingException { algorithm = testSetup.algorithm; project = new ContinuousProject(algorithm, new InMemoryData<ContValue>(), new InMemoryResults<ContValue, DatumContResults, WorkerContResults>( new ResultsFactory.DatumContResultFactory(), new ResultsFactory.WorkerContResultFactory())); String inputDir = DATA_BASE_DIR + testSetup.testName + TestSettings.FILEPATH_SEPARATOR + "input" + TestSettings.FILEPATH_SEPARATOR; String outputDir = DATA_BASE_DIR + testSetup.testName + TestSettings.FILEPATH_SEPARATOR + "output" + TestSettings.FILEPATH_SEPARATOR; EmpiricalData empData = new EmpiricalData(); empData.loadLabelFile(inputDir + "assignedLabels.txt"); empData.loadGoldLabelsFile(inputDir + "goldObjects.txt"); empData.loadTrueObjectData(inputDir + "evaluationObjects.txt"); project.setData(empData); algorithm.setData(empData); algorithm.setEpsilon(EPSILON); algorithm.setIterations(MAX_ITERATIONS); algorithm.compute(); objectsResultsParser = new ObjectsResultsParser(); objectsResultsParser.ParseResultsObjectsFile(outputDir + "results-objects.txt"); workersResultsParser = new WorkersResultsParser(); workersResultsParser.ParseWorkerResultsFile(outputDir + "results-workers.txt"); } @Test public void test_Objects_AverageLabel() { Map<String, Map<String, Double>> expEstObjects = objectsResultsParser.getEstimatedObjectValues(); Map<LObject<ContValue>, DatumContResults> objectsResult = project.getResults().getDatumResults(project.getData().getObjects()); assertEquals(expEstObjects.size(), objectsResult.size()); Iterator<Entry<LObject<ContValue>, DatumContResults>> entries = objectsResult.entrySet().iterator(); while (entries.hasNext()) { Entry<LObject<ContValue>, DatumContResults> entry = entries.next(); LObject<ContValue> object = entry.getKey(); String objectName = object.getName(); Double actualAvgLabel = algorithm.getAverageLabel(object); Double expectedAvgLabel = expEstObjects.get(objectName).get("avgLabel"); assertTrue(Math.abs(expectedAvgLabel - actualAvgLabel) < TOLERANCE); } } @Test public void test_Objects_EstimatedValues() { Map<String, Map<String, Double>> expEstObjects = objectsResultsParser.getEstimatedObjectValues(); Map<LObject<ContValue>, DatumContResults> objectsResult = project.getResults().getDatumResults(project.getData().getObjects()); assertEquals(expEstObjects.size(), objectsResult.size()); Iterator<Entry<LObject<ContValue>, DatumContResults>> entries = objectsResult.entrySet().iterator(); while (entries.hasNext()) { Entry<LObject<ContValue>, DatumContResults> entry = entries.next(); LObject<ContValue> object = entry.getKey(); String objectName = object.getName(); DatumContResults datumContResults = entry.getValue(); Double actualEstimatedValue = datumContResults.getEst_value(); Double actualEstimatedZeta = datumContResults.getEst_zeta(); Double expectedEstimatedValue = expEstObjects.get(objectName).get("estValue"); Double expectedEstimatedZeta = expEstObjects.get(objectName).get("estZeta"); assertTrue(Math.abs(expectedEstimatedValue - actualEstimatedValue) < TOLERANCE); assertTrue(Math.abs(expectedEstimatedZeta - actualEstimatedZeta) < TOLERANCE); } } @Test public void test_Workers_Labels() { Map<String, HashMap<String, Object>> expWorkersResults = workersResultsParser.getWorkersResults(); Map<Worker, WorkerContResults> workersResults = project.getResults().getWorkerResults(project.getData().getWorkers()); assertEquals(expWorkersResults.size(), workersResults.size()); Iterator<Entry<Worker, WorkerContResults>> entries = workersResults.entrySet().iterator(); while (entries.hasNext()) { Entry<Worker, WorkerContResults> entry = entries.next(); Worker worker = entry.getKey(); String workerName = worker.getName(); int expectedNoAssigns = Integer.parseInt(expWorkersResults.get(workerName).get("labels").toString()); int actualNoAssigns = project.getData().getWorkerAssigns(worker).size(); assertEquals(expectedNoAssigns, actualNoAssigns); } } @Test public void test_Workers_EstimatedValues() { Map<String, HashMap<String, Object>> expWorkersResults = workersResultsParser.getWorkersResults(); Map<Worker, WorkerContResults> workersResults = project.getResults().getWorkerResults(project.getData().getWorkers()); assertEquals(expWorkersResults.size(), workersResults.size()); Iterator<Entry<Worker, WorkerContResults>> entries = workersResults.entrySet().iterator(); while (entries.hasNext()) { Entry<Worker, WorkerContResults> entry = entries.next(); Worker worker = entry.getKey(); String workerName = worker.getName(); WorkerContResults workerContResults = entry.getValue(); Double expectedEstMu = (Double) expWorkersResults.get(workerName).get("est_mu"); Double expectedEstSigma = (Double) expWorkersResults.get(workerName).get("est_sigma"); Double expectedEstRho = (Double) expWorkersResults.get(workerName).get("est_rho"); Double actualEstMu = workerContResults.getEst_mu(); Double actualEstSigma = workerContResults.getEst_sigma(); Double actualEstRho = workerContResults.getEst_rho(); assertTrue(Math.abs(expectedEstMu - actualEstMu) < TOLERANCE); assertTrue(Math.abs(expectedEstSigma - actualEstSigma) < TOLERANCE); assertTrue(Math.abs(expectedEstRho - actualEstRho) < TOLERANCE); } } }