Skip to content
Snippets Groups Projects
Commit 1e4f37e8 authored by Nikolaus Huber's avatar Nikolaus Huber
Browse files

evaluation interface introduced

git-svn-id: https://se1.informatik.uni-wuerzburg.de/usvn/svn/code/code/DMM/trunk@11538 9e42b895-fcda-4063-8a3b-11be15eb1bbd
parent b7bcbe0d
No related branches found
No related tags found
No related merge requests found
package edu.kit.ipd.descartes.adaptation.weightingfunction;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import java.util.Random;
import org.junit.Before;
import org.junit.Test;
import edu.kit.ipd.descartes.mm.adaptation.AdaptationFactory;
import edu.kit.ipd.descartes.mm.adaptation.WeightedTactic;
public class RandomWeightCalculatorTest {
IWeightingFunctionCalculator randomCalculator = new RandomWeightCalculator();
WeightedTactic wt = null;
@Before
public void setUp() throws Exception {
wt = AdaptationFactory.eINSTANCE.createWeightedTactic();
wt.setName("TestTactic");
wt.setId("testTacticTestId");
wt.setCurrentWeight(1.0);
wt.setDefaultWeight(0.0);
}
@Test
public void testCalculateWeight() {
Random r = new Random(System.currentTimeMillis());
assertEquals(r.nextDouble(), randomCalculator.calculateWeight(wt),1.0);
assertEquals(0.0, wt.getDefaultWeight(), 0.0);
}
@Test
public void testCalculateAndSetWeight() {
randomCalculator.updateWeight(wt);
assertNotSame(1.0, wt.getCurrentWeight());
assertEquals(0.0, wt.getDefaultWeight(), 0.0);
}
}
package edu.kit.ipd.descartes.adaptation.weightingfunction;
import static org.junit.Assert.assertEquals;
import java.io.FileInputStream;
import java.util.List;
import java.util.Properties;
import org.eclipse.emf.common.util.URI;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import edu.kit.ipd.descartes.adaptation.AbstractTest;
import edu.kit.ipd.descartes.adaptation.AdaptationControl;
import edu.kit.ipd.descartes.adaptation.model.dmm.PerformanceDataRepositoryModelManager;
import edu.kit.ipd.descartes.mm.adaptation.AdaptationFactory;
import edu.kit.ipd.descartes.mm.adaptation.WeightedMetric;
import edu.kit.ipd.descartes.mm.adaptation.WeightedTactic;
import edu.kit.ipd.descartes.mm.adaptation.WeightingFunction;
import edu.kit.ipd.descartes.perfdatarepo.Impact;
import edu.kit.ipd.descartes.perfdatarepo.MetricType;
import edu.kit.ipd.descartes.perfdatarepo.MetricValue;
import edu.kit.ipd.descartes.perfdatarepo.PerfdatarepoFactory;
import edu.kit.ipd.descartes.perfdatarepo.PerformanceDataRepository;
import edu.kit.ipd.descartes.perfdatarepo.Result;
public class WeightedSumCalculatorTest extends AbstractTest {
private static final String PROP_PERF_DATA_REPO_XMI_FILE_PATH_NAME = "testModel.performanceDataRepositoryModel";
private static final double NEW_WEIGHT = 99.8;
IWeightingFunctionCalculator weightedSum;
WeightedTactic wt = null;
WeightingFunction fun = null;
AdaptationControl control = null;
private static String performanceDataRepoXmiFilePath;
@BeforeClass
public static void before() throws Exception {
Properties properties = new Properties();
FileInputStream propFile = new FileInputStream(propertiesFilePath);
properties.load(propFile);
performanceDataRepoXmiFilePath=properties.getProperty(PROP_PERF_DATA_REPO_XMI_FILE_PATH_NAME);
}
@Before
public void setUp() throws Exception {
super.setUp();
MetricType respTime = PerfdatarepoFactory.eINSTANCE.createMetricType();
respTime.setName("Response Time");
MetricType util = PerfdatarepoFactory.eINSTANCE.createMetricType();
util.setName("Utilization");
WeightedMetric wmRespTime = AdaptationFactory.eINSTANCE.createWeightedMetric();
wmRespTime.setMetricType(respTime);
wmRespTime.setWeight(-2.0);
WeightedMetric wmUtil = AdaptationFactory.eINSTANCE.createWeightedMetric();
wmUtil.setMetricType(util);
wmUtil.setWeight(-1.0);
fun = AdaptationFactory.eINSTANCE.createWeightingFunction();
fun.getWeightedMetrics().add(wmRespTime);
fun.getWeightedMetrics().add(wmUtil);
weightedSum = new WeightedSumCalculator(fun);
wt = AdaptationFactory.eINSTANCE.createWeightedTactic();
MetricValue metric1ValueBefore = PerfdatarepoFactory.eINSTANCE.createMetricValue();
metric1ValueBefore.setMetricType(respTime);
metric1ValueBefore.setValue(100);
MetricValue metric1ValueAfter = PerfdatarepoFactory.eINSTANCE.createMetricValue();
metric1ValueAfter.setMetricType(respTime);
metric1ValueAfter.setValue(50);
MetricValue metric2ValueBefore = PerfdatarepoFactory.eINSTANCE.createMetricValue();
metric2ValueBefore.setMetricType(util);
metric2ValueBefore.setValue(0.6);
MetricValue metric2ValueAfter = PerfdatarepoFactory.eINSTANCE.createMetricValue();
metric2ValueAfter.setMetricType(util);
metric2ValueAfter.setValue(0.8);
Result before = PerfdatarepoFactory.eINSTANCE.createResult();
before.getMetricValues().add(metric1ValueBefore);
before.getMetricValues().add(metric2ValueBefore);
Result after = PerfdatarepoFactory.eINSTANCE.createResult();
after.getMetricValues().add(metric1ValueAfter);
after.getMetricValues().add(metric2ValueAfter);
Impact i = PerfdatarepoFactory.eINSTANCE.createImpact();
i.setBefore(before);
i.setAfter(after);
wt.setName("TestTactic");
wt.setId("testTacticTestId");
wt = AdaptationFactory.eINSTANCE.createWeightedTactic();
wt.setCurrentWeight(1.0);
wt.setDefaultWeight(0.0);
wt.setLastImpact(i);
}
@Test
public void testCalculateWeight() {
// Weighting function shall calculate: 2 * (100 - 50) + -1 * (0.6 - 0.8)
// i.e., everything improved.
assertEquals(NEW_WEIGHT, weightedSum.calculateWeight(wt), 0.0);
assertEquals(wt.getDefaultWeight(), 0.0, 0);
}
@Test
public void testCalculateAndSetWeight() {
weightedSum.updateWeight(wt);
assertEquals(NEW_WEIGHT, wt.getCurrentWeight(), 0.0);
assertEquals(wt.getDefaultWeight(), 0.0, 0);
}
@Test
public void testImpact() {
Impact impact = loadImpactFromModel();
List<MetricType> metricTypes = getMetricTypesFromModel();
WeightingFunction testFunction = AdaptationFactory.eINSTANCE.createWeightingFunction();
WeightedTactic wt = AdaptationFactory.eINSTANCE.createWeightedTactic();
wt.setLastImpact(impact);
WeightedSumCalculator wSumCalc = new WeightedSumCalculator(testFunction);
for (MetricType metricType : metricTypes) {
WeightedMetric wm = AdaptationFactory.eINSTANCE.createWeightedMetric();
wm.setMetricType(metricType);
wm.setWeight(1.0);
testFunction.getWeightedMetrics().add(wm);
}
assertEquals(-187.9888, wSumCalc.calculateWeight(wt), 0.0001);
}
private List<MetricType> getMetricTypesFromModel() {
PerformanceDataRepository repo = PerformanceDataRepositoryModelManager.getInstance().load(URI.createFileURI(performanceDataRepoXmiFilePath));
return repo.getMetricTypes();
}
private Impact loadImpactFromModel() {
PerformanceDataRepository repo = PerformanceDataRepositoryModelManager.getInstance().load(URI.createFileURI(performanceDataRepoXmiFilePath));
return repo.getImpactHistory().get(0);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment