package com.datascience.scheduler; import com.datascience.core.base.AssignedLabel; import com.datascience.core.base.LObject; import com.datascience.core.base.Worker; import com.datascience.core.nominal.INominalData; import com.datascience.core.nominal.NominalProject; import com.datascience.core.nominal.decision.ILabelProbabilityDistributionCostCalculator; import com.datascience.core.nominal.decision.LabelProbabilityDistributionCostCalculators; import com.datascience.datastoring.datamodels.full.MemoryJobStorage; import com.datascience.mv.IncrementalMV; import org.junit.Test; import java.util.Arrays; import java.util.Collection; import static org.junit.Assert.assertEquals; /** * @Author: konrad */ public class CostBasedPriorityCalculatorTest { public static NominalProject setUpNominalProject(){ IncrementalMV imv = new IncrementalMV(); MemoryJobStorage js = new MemoryJobStorage(); Collection<String> categories = Arrays.asList( new String[]{"A","B","C"}); NominalProject project = new NominalProject(imv, js.getNominalData("testId"), js.getNominalResults("testId", categories)); project.initializeCategories(categories, null, null); project.getData().addNewUpdatableAlgorithm(imv); return project; } protected Worker worker(int i){ return new Worker("Worker" + i); } protected AssignedLabel<String> assign(int i, LObject<String> obj, String label){ return new AssignedLabel<String>(worker(i), obj, label); } @Test public void testCorrectness(){ String costMethod = "MAXLIKELIHOOD"; NominalProject project = setUpNominalProject(); ILabelProbabilityDistributionCostCalculator lpdcc = LabelProbabilityDistributionCostCalculators.get(costMethod); IPriorityCalculator<String> pc = new CostBasedPriorityCalculator(lpdcc); Scheduler<String> scheduler = new Scheduler<String>(project, pc); Worker worker = new Worker("Worker1"); INominalData data = project.getData(); LObject<String> object1 = data.getOrCreateObject("object1"); LObject<String> object2 = data.getOrCreateObject("object2"); int w = 0; data.addAssign(assign(w++, object1, "A")); data.addAssign(assign(w++, object1, "B")); data.addAssign(assign(w++, object2, "A")); scheduler.update(); LObject<String> object = scheduler.nextObject(); assertEquals(object1, object); object = scheduler.nextObject(); assertEquals(object1, object); scheduler.update(); object = scheduler.nextObject(); assertEquals(object1, object); data.addAssign(assign(w++, object2, "B")); data.addAssign(assign(w++, object2, "C")); scheduler.update(); assertEquals(object2, scheduler.nextObject()); data.addAssign(assign(w++, object2, "C")); data.addAssign(assign(w++, object2, "C")); scheduler.update(); assertEquals(object1, scheduler.nextObject()); } }