Adds test for "xy | constant" + refactors package structure

This commit is contained in:
Maximilian Kratz 2022-09-02 14:21:33 +02:00
parent bb7f1eafb7
commit 9ecbfcfd0f
17 changed files with 240 additions and 10 deletions

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>gipsl.all.build.or.extendedorconstant</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.emoflon.gips.gipsl.ui.gipsNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,17 @@
Manifest-Version: 1.0
Automatic-Module-Name: gipsl.all.build.or.extendedortrue
Bundle-ManifestVersion: 2
Bundle-Name: gipsl.all.build.or.extendedortrue
Bundle-Vendor: My Company
Bundle-Version: 1.0.0.qualifier
Bundle-SymbolicName: gipsl.all.build.or.extendedorconstant;singleton:=true
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-16
Require-Bundle: org.emoflon.ibex.common,
org.emoflon.ibex.gt,
org.emoflon.gips.core,
org.emoflon.ibex.gt.democles,
org.emoflon.ibex.gt.hipe,
gipsl.all.build.model;bundle-version="0.0.1",
test.suite.utils;bundle-version="1.0.0"
Export-Package: gipsl.all.build.or.extendedorconstant.connector

View file

@ -0,0 +1,58 @@
package "gipsl.all.build.or.extendedorconstant"
import "platform:/resource/gipsl.all.build.model/model/Model.ecore"
config {
solver := GUROBI [home:="fu", license:="bar"];
launchConfig := true [main := "TODO"];
timeLimit := true [value := 42.0];
randomSeed := true [value := 73];
presolve := true;
debugOutput := true;
}
rule mapVnode {
root: Root {
-containers -> substrateContainer
-containers -> virtualContainer
}
substrateContainer: SubstrateContainer {
-substrateNodes -> snode
}
virtualContainer: VirtualContainer {
-virtualNodes -> vnode
}
snode: SubstrateResourceNode {
++ -guests -> vnode
}
vnode: VirtualResourceNode {
++ -host -> snode
}
# vnode.resourceDemand <= snode.resourceAmountAvailable
# snode.resourceAmountAvailable >= 0
}
mapping n2n with mapVnode;
constraint -> class::VirtualResourceNode {
// Every virtual node must be mapped OR true
mappings.n2n->filter(m | m.nodes().vnode == self)->count() >= 1 | self.resourceDemand >= 0
}
// Helper constraint to allow ...->count() == 1 in an OR
constraint -> class::VirtualResourceNode {
mappings.n2n->filter(m | m.nodes().vnode == self)->count() <= 1
}
objective nObj -> mapping::n2n {
1
}
// Minimization of cost function -> No virtual node should be mapped whatsoever
global objective : min {
nObj
}

View file

@ -0,0 +1,23 @@
package gipsl.all.build.or.extendedorconstant.connector;
import org.emoflon.gips.core.ilp.ILPSolverOutput;
import gipsl.all.build.or.extendedorconstant.api.gips.ExtendedorconstantGipsAPI;
import test.suite.gips.utils.AConnector;
import test.suite.gips.utils.GipsTestUtils;
public class OrExtendedConstantConnector extends AConnector {
public OrExtendedConstantConnector(final String modelPath) {
api = new ExtendedorconstantGipsAPI();
api.init(GipsTestUtils.pathToAbsUri(modelPath));
}
@Override
public ILPSolverOutput run(final String outputPath) {
final ILPSolverOutput output = solve();
((ExtendedorconstantGipsAPI) api).getN2n().applyNonZeroMappings();
return output;
}
}

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src-gen"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>gipsl.all.build.or.extendedor</name>
<name>gipsl.all.build.or.extendedortrue</name>
<comment></comment>
<projects>
</projects>

View file

@ -0,0 +1,10 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
org.eclipse.jdt.core.compiler.compliance=17
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=17

View file

@ -4,7 +4,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: gipsl.all.build.or.extendedor
Bundle-Vendor: My Company
Bundle-Version: 1.0.0.qualifier
Bundle-SymbolicName: gipsl.all.build.or.extendedor; singleton:=true
Bundle-SymbolicName: gipsl.all.build.or.extendedortrue;singleton:=true
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-16
Require-Bundle: org.emoflon.ibex.common,
@ -14,4 +14,4 @@ Require-Bundle: org.emoflon.ibex.common,
org.emoflon.ibex.gt.hipe,
test.suite.utils;bundle-version="1.0.0",
gipsl.all.build.model;bundle-version="0.0.1"
Export-Package: gipsl.all.build.or.extendedor.tru.connector
Export-Package: gipsl.all.build.or.extendedortrue.connector

View file

@ -0,0 +1,5 @@
source.. = src/,\
src-gen/
bin.includes = META-INF/,\
.,\
plugin.xml

View file

@ -1,4 +1,4 @@
package "gipsl.all.build.or.extendedor"
package "gipsl.all.build.or.extendedortrue"
import "platform:/resource/gipsl.all.build.model/model/Model.ecore"
config {

View file

@ -1,22 +1,22 @@
package gipsl.all.build.or.extendedor.tru.connector;
package gipsl.all.build.or.extendedortrue.connector;
import org.emoflon.gips.core.ilp.ILPSolverOutput;
import gipsl.all.build.or.extendedor.api.gips.ExtendedorGipsAPI;
import gipsl.all.build.or.extendedortrue.api.gips.ExtendedortrueGipsAPI;
import test.suite.gips.utils.AConnector;
import test.suite.gips.utils.GipsTestUtils;
public class OrExtendedTrueConnector extends AConnector {
public OrExtendedTrueConnector(final String modelPath) {
api = new ExtendedorGipsAPI();
api = new ExtendedortrueGipsAPI();
api.init(GipsTestUtils.pathToAbsUri(modelPath));
}
@Override
public ILPSolverOutput run(final String outputPath) {
final ILPSolverOutput output = solve();
((ExtendedorGipsAPI) api).getN2n().applyNonZeroMappings();
((ExtendedortrueGipsAPI) api).getN2n().applyNonZeroMappings();
return output;
}

View file

@ -23,7 +23,8 @@ Import-Package: gips.all.build.objective.connector,
gipsl.all.build.objective.max.connector,
gipsl.all.build.or.b.connector,
gipsl.all.build.or.connector,
gipsl.all.build.or.extendedor.tru.connector,
gipsl.all.build.or.extendedorconstant.connector,
gipsl.all.build.or.extendedortrue.connector,
gipsl.all.build.sumvalue.connector,
gipsl.all.build.sumvalueinf.connector,
gipsl.all.build.varlimit.connector,

View file

@ -0,0 +1,83 @@
package test.suite.gipsl.all.build;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.emoflon.gips.core.ilp.ILPSolverOutput;
import org.emoflon.gips.core.ilp.ILPSolverStatus;
import org.junit.jupiter.api.Test;
import gipsl.all.build.or.extendedorconstant.connector.OrExtendedConstantConnector;
public class GipslAllBuildExtendedOrConstantTest extends AGipslAllBuildTest {
// Setup method
public void callableSetUp() {
gen.persistModel(MODEL_PATH);
con = new OrExtendedConstantConnector(MODEL_PATH);
}
// Actual tests
// Positive tests
@Test
public void testMap1to1() {
gen.genSubstrateNode("s1", 1);
gen.genVirtualNode("v1", 1);
callableSetUp();
final ILPSolverOutput ret = con.run(OUTPUT_PATH);
assertEquals(ILPSolverStatus.OPTIMAL, ret.status());
assertEquals(0, Math.abs(ret.objectiveValue()));
}
@Test
public void testMap1to2() {
gen.genSubstrateNode("s1", 1);
gen.genSubstrateNode("s1", 2);
gen.genVirtualNode("v1", 1);
callableSetUp();
final ILPSolverOutput ret = con.run(OUTPUT_PATH);
assertEquals(ILPSolverStatus.OPTIMAL, ret.status());
assertEquals(0, Math.abs(ret.objectiveValue()));
}
@Test
public void testMap3to1() {
gen.genSubstrateNode("s1", 10);
gen.genVirtualNode("v1", 1);
gen.genVirtualNode("v2", 1);
gen.genVirtualNode("v3", 1);
callableSetUp();
final ILPSolverOutput ret = con.run(OUTPUT_PATH);
assertEquals(ILPSolverStatus.OPTIMAL, ret.status());
assertEquals(0, Math.abs(ret.objectiveValue()));
}
@Test
public void testMap1to0() {
gen.genVirtualNode("v1", 1);
callableSetUp();
final ILPSolverOutput ret = con.run(OUTPUT_PATH);
assertEquals(ILPSolverStatus.OPTIMAL, ret.status());
assertEquals(0, Math.abs(ret.objectiveValue()));
}
@Test
public void testNoNodes() {
callableSetUp();
final ILPSolverOutput ret = con.run(OUTPUT_PATH);
assertEquals(ILPSolverStatus.OPTIMAL, ret.status());
assertEquals(0, Math.abs(ret.objectiveValue()));
}
}

View file

@ -6,7 +6,7 @@ import org.emoflon.gips.core.ilp.ILPSolverOutput;
import org.emoflon.gips.core.ilp.ILPSolverStatus;
import org.junit.jupiter.api.Test;
import gipsl.all.build.or.extendedor.tru.connector.OrExtendedTrueConnector;
import gipsl.all.build.or.extendedortrue.connector.OrExtendedTrueConnector;
public class GipslAllBuildExtendedOrTrueTest extends AGipslAllBuildTest {