diff options
author | Ed Willink | 2016-04-25 19:51:34 +0000 |
---|---|---|
committer | Ed Willink | 2016-04-25 19:51:34 +0000 |
commit | bc87ce12af2cf524ace59ab44bdd988ba0693c51 (patch) | |
tree | ce66eb64eb9e6c927a99996e3fa4f1dd9e810529 | |
parent | 304d5cb29d443bdd0bd3c22bf8a27de126a2c5b4 (diff) | |
download | org.eclipse.qvtd-bc87ce12af2cf524ace59ab44bdd988ba0693c51.tar.gz org.eclipse.qvtd-bc87ce12af2cf524ace59ab44bdd988ba0693c51.tar.xz org.eclipse.qvtd-bc87ce12af2cf524ace59ab44bdd988ba0693c51.zip |
[bigmde] ATL tests for BigMDE 2016 QVTc paper
8 files changed, 337 insertions, 3 deletions
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (256MB).launch b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (256MB).launch new file mode 100644 index 000000000..91fd8fa1f --- /dev/null +++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (256MB).launch @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value="testQVTcCompiler_Families2Persons_ATL"/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.qvtd.doc.bigmde2016.tests.atl.BigMDE2016ATLTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.qvtd.doc.bigmde2016.tests"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DtestSuiteName="ATL - BigMDE2016 - Families2Persons (256MB)" -ea -Xmx256M"/>
+</launchConfiguration>
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (4GB).launch b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (4GB).launch new file mode 100644 index 000000000..923a01afa --- /dev/null +++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/ATL - BigMDE2016 - Families2Persons (4GB).launch @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value="testQVTcCompiler_Families2Persons_ATL"/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.qvtd.doc.bigmde2016.tests.atl.BigMDE2016ATLTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.qvtd.doc.bigmde2016.tests"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DtestSuiteName="ATL - BigMDE2016 - Families2Persons (4GB)" -ea -Xmx4G"/>
+</launchConfiguration>
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/EMFTVM - BigMDE2016 - Families2Persons (4GB).launch b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/EMFTVM - BigMDE2016 - Families2Persons (4GB).launch new file mode 100644 index 000000000..16b93e1d8 --- /dev/null +++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.launches/EMFTVM - BigMDE2016 - Families2Persons (4GB).launch @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value="testQVTcCompiler_Families2Persons_EMFTVM"/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.qvtd.doc.bigmde2016.tests.atl.BigMDE2016ATLTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.qvtd.doc.bigmde2016.tests"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-DtestSuiteName="EMFTVM - BigMDE2016 - Families2Persons (4GB)" -ea -Xmx4G"/>
+</launchConfiguration>
diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.project b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.project index 31a89dc7d..c9ef4cd73 100644 --- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.project +++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/.project @@ -16,6 +16,11 @@ </arguments> </buildCommand> <buildCommand> + <name>org.eclipse.m2m.atl.adt.builder.atlBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> <name>org.eclipse.m2m.qvt.oml.project.QVTOBuilder</name> <arguments> </arguments> @@ -27,6 +32,7 @@ </buildCommand> </buildSpec> <natures> + <nature>org.eclipse.m2m.atl.adt.builder.atlNature</nature> <nature>org.eclipse.m2m.qvt.oml.project.QVTONature</nature> <nature>org.eclipse.pde.PluginNature</nature> <nature>org.eclipse.jdt.core.javanature</nature> diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF index e1d6f88eb..bbcf401af 100644 --- a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/META-INF/MANIFEST.MF @@ -7,11 +7,17 @@ Bundle-ClassPath: . Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)", org.eclipse.qvtd.xtext.qvtcore.tests, - org.eclipse.qvtd.codegen;bundle-version="1.0.0", - org.eclipse.qvtd.compiler;bundle-version="1.0.0", + org.eclipse.qvtd.codegen, + org.eclipse.qvtd.compiler, org.eclipse.m2m.qvt.oml, org.apache.log4j, - org.eclipse.m2m.qvt.oml.samples;bundle-version="3.4.0" + org.eclipse.m2m.qvt.oml.samples, + org.eclipse.m2m.atl.core, + org.eclipse.m2m.atl.core.emf, + org.eclipse.m2m.atl.engine.emfvm.launch, + org.eclipse.m2m.atl.emftvm, + org.eclipse.m2m.atl.emftvm.compiler, + org.eclipse.m2m.atl.emftvm.launcher Bundle-ActivationPolicy: lazy Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/.gitignore b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/.gitignore new file mode 100644 index 000000000..f6bfe46eb --- /dev/null +++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/.gitignore @@ -0,0 +1,2 @@ +/Families2Persons.asm +/Families2Persons.emftvm diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java new file mode 100644 index 000000000..50e8567d6 --- /dev/null +++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/BigMDE2016ATLTests.java @@ -0,0 +1,221 @@ +/******************************************************************************* + * Copyright (c) 2012, 2015 Willink Transformations and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * E.D.Willink - initial API and implementation + *******************************************************************************/ +package org.eclipse.qvtd.doc.bigmde2016.tests.atl; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.Collection; +import java.util.HashMap; + +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.m2m.atl.core.IInjector; +import org.eclipse.m2m.atl.core.emf.EMFInjector; +import org.eclipse.m2m.atl.core.emf.EMFModel; +import org.eclipse.m2m.atl.core.emf.EMFModelFactory; +import org.eclipse.m2m.atl.core.emf.EMFReferenceModel; +import org.eclipse.m2m.atl.core.launch.ILauncher; +import org.eclipse.m2m.atl.emftvm.EmftvmFactory; +import org.eclipse.m2m.atl.emftvm.ExecEnv; +import org.eclipse.m2m.atl.emftvm.Metamodel; +import org.eclipse.m2m.atl.emftvm.Model; +import org.eclipse.m2m.atl.emftvm.impl.resource.EMFTVMResourceFactoryImpl; +import org.eclipse.m2m.atl.emftvm.util.DefaultModuleResolver; +import org.eclipse.m2m.atl.emftvm.util.ModuleResolver; +import org.eclipse.m2m.atl.emftvm.util.TimingData; +import org.eclipse.m2m.atl.engine.emfvm.launch.EMFVMLauncher; +import org.eclipse.qvtd.doc.bigmde2016.tests.FamiliesGenerator; +import org.eclipse.qvtd.doc.bigmde2016.tests.PrintAndLog; +import org.eclipse.qvtd.doc.bigmde2016.tests.qvtc.BigMDE2016CGTests; +import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.FamiliesPackage; +import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Persons.PersonsPackage; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import junit.framework.TestCase; + +/** + * Source code for ATL results in BigMDE 2016, Eclipse QVTC First Results paper. + */ +public class BigMDE2016ATLTests extends TestCase +{ + @Before + public void setUp() throws Exception { + super.setUp(); + } + + @After + public void tearDown() throws Exception { + super.tearDown(); + } + + static class NullInputStream extends InputStream { + static final NullInputStream INSTANCE = new NullInputStream(); + private NullInputStream() {} + public int read() { return -1; } + public int available() { return 0; } + } + + @Test + public void testQVTcCompiler_Families2Persons_ATL() throws Exception { + PrintAndLog logger = new PrintAndLog(getName()); + logger.printf("%s\n", getName()); + /* + * Initializations + */ + ILauncher transformationLauncher = new EMFVMLauncher(); + EMFModelFactory modelFactory = new EMFModelFactory(); + ResourceSet resourceSet = modelFactory.getResourceSet(); + resourceSet.getPackageRegistry().put(FamiliesPackage.eNS_URI, FamiliesPackage.eINSTANCE); + resourceSet.getPackageRegistry().put(PersonsPackage.eNS_URI, PersonsPackage.eINSTANCE); + IInjector injector = new EMFInjector(); + /* + * Load metamodels + */ + EMFReferenceModel familiesMetamodel = (EMFReferenceModel)modelFactory.newReferenceModel(); + injector.inject(familiesMetamodel, FamiliesPackage.eNS_URI); + EMFReferenceModel personsMetamodel = (EMFReferenceModel)modelFactory.newReferenceModel(); + injector.inject(personsMetamodel, PersonsPackage.eNS_URI); + try { + int[] tests = PrintAndLog.getTestSizes(); + for (int testSize : tests) { + /* + * Load models + */ + EMFModel familiesModel = (EMFModel)modelFactory.newModel(familiesMetamodel); + Resource familiesResource = resourceSet.createResource(URI.createURI("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Families.xmi")); + try { + familiesResource.load(new InputStream() { + public int read() { return -1; } + public int available() { return 0; } + }, null); + } + catch(Throwable e) {} + injector.inject(familiesModel,"src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Families.xmi"); + Collection<@NonNull ? extends EObject> rootObjects = FamiliesGenerator.createFamiliesModel(testSize, 9); + familiesResource.getContents().clear(); + familiesResource.getContents().addAll(rootObjects); + EMFModel personsModel = (EMFModel)modelFactory.newModel(personsMetamodel); + + transformationLauncher.initialize(new HashMap<String,Object>()); + transformationLauncher.addInModel(familiesModel, "IN", "Families"); + transformationLauncher.addOutModel(personsModel, "OUT", "Persons"); + + logger.printf("%9d, ", 10*testSize); + BigMDE2016CGTests.garbageCollect(); + long startTime = System.nanoTime(); + transformationLauncher.launch(ILauncher.RUN_MODE, new NullProgressMonitor(), new HashMap<String,Object>(), + new FileInputStream("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/Families2Persons.asm")); + long endTime = System.nanoTime(); + logger.printf("%9.6f\n", (endTime - startTime) / 1.0e9); + + Resource personsResource = personsModel.getResource(); + Collection<@NonNull EObject> rootObjects2 = personsResource.getContents(); + assert rootObjects2.size() == 9*testSize; + /* + * Unload all models + */ + modelFactory.unload(personsModel); + modelFactory.unload(familiesModel); + } + } + finally { + /* + * Unload all metamodels + */ + modelFactory.unload(familiesMetamodel); + modelFactory.unload(personsMetamodel); + logger.dispose(); + } + } + + @Test + public void testQVTcCompiler_Families2Persons_EMFTVM() throws Exception { + PrintAndLog logger = new PrintAndLog(getName()); + logger.printf("%s\n", getName()); + try { + int[] tests = PrintAndLog.getTestSizes(); + for (int testSize : tests) { + + ExecEnv env = EmftvmFactory.eINSTANCE.createExecEnv(); + ResourceSet resourceSet = new ResourceSetImpl(); + EPackage.Registry.INSTANCE.put(FamiliesPackage.eNS_URI, FamiliesPackage.eINSTANCE); + EPackage.Registry.INSTANCE.put(PersonsPackage.eNS_URI, PersonsPackage.eINSTANCE); + Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl()); + Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("emftvm", new EMFTVMResourceFactoryImpl()); + + // Load metamodels + Metamodel metaModel = EmftvmFactory.eINSTANCE.createMetamodel(); + metaModel.setResource(resourceSet.getResource(URI.createURI("http://www.eclipse.org/m2m/atl/2011/EMFTVM"), true)); + env.registerMetaModel("METAMODEL", metaModel); + metaModel = EmftvmFactory.eINSTANCE.createMetamodel(); + metaModel.setResource(resourceSet.getResource(URI.createURI(FamiliesPackage.eNS_URI), true)); + env.registerMetaModel("Families", metaModel); + metaModel = EmftvmFactory.eINSTANCE.createMetamodel(); + metaModel.setResource(resourceSet.getResource(URI.createURI(PersonsPackage.eNS_URI), true)); + env.registerMetaModel("Persons", metaModel); + Resource familiesResource = resourceSet.createResource(URI.createURI("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Families.xmi")); + try { + familiesResource.load(new InputStream() { + public int read() { return -1; } + public int available() { return 0; } + }, null); + } + catch(Throwable e) {} + Model outModel = EmftvmFactory.eINSTANCE.createModel(); + outModel.setResource(resourceSet.createResource(URI.createFileURI("out.xmi"))); + +// try { +// int[] tests = PrintAndLog.getTestSizes(); +// for (int testSize : tests) { + // Load models + Model inModel = EmftvmFactory.eINSTANCE.createModel(); + familiesResource.getContents().clear(); + outModel.getResource().getContents().clear(); + env.clearModels(); + BigMDE2016CGTests.garbageCollect(); + Collection<@NonNull ? extends EObject> rootObjects = FamiliesGenerator.createFamiliesModel(testSize, 9); + familiesResource.getContents().addAll(rootObjects); + inModel.setResource(familiesResource); + env.registerInputModel("IN", inModel); + env.registerOutputModel("OUT", outModel); + + // Load and run module + ModuleResolver mr = new DefaultModuleResolver("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/", new ResourceSetImpl()); + TimingData td = new TimingData(); + env.loadModule(mr, "Families2Persons"); + td.finishLoading(); + logger.printf("%9d, ", 10*testSize); + BigMDE2016CGTests.garbageCollect(); + long startTime = System.nanoTime(); + env.run(td); + long endTime = System.nanoTime(); + logger.printf("%9.6f\n", (endTime - startTime) / 1.0e9); + td.finish(); + + Resource personsResource = outModel.getResource(); + Collection<@NonNull EObject> rootObjects2 = personsResource.getContents(); + assert rootObjects2.size() == 9*testSize; + } + } + finally { + logger.dispose(); + } + } +} diff --git a/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/Families2Persons.atl b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/Families2Persons.atl new file mode 100644 index 000000000..04a327f9a --- /dev/null +++ b/tests/org.eclipse.qvtd.doc.bigmde2016.tests/src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/Families2Persons.atl @@ -0,0 +1,51 @@ +-- @atlcompiler emftvm
+-- @path Families=/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/families2persons/Families.ecore
+-- @path Persons=/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/families2persons/Persons.ecore
+
+module Families2Persons;
+create OUT : Persons from IN : Families;
+
+helper context Families!Member def: familyName : String =
+ if not self.familyFather.oclIsUndefined() then
+ self.familyFather.lastName
+ else
+ if not self.familyMother.oclIsUndefined() then
+ self.familyMother.lastName
+ else
+ if not self.familySon.oclIsUndefined() then
+ self.familySon.lastName
+ else
+ self.familyDaughter.lastName
+ endif
+ endif
+ endif;
+
+helper context Families!Member def: isFemale() : Boolean =
+ if not self.familyMother.oclIsUndefined() then
+ true
+ else
+ if not self.familyDaughter.oclIsUndefined() then
+ true
+ else
+ false
+ endif
+ endif;
+
+rule Member2Male {
+ from
+ s : Families!Member (not s.isFemale())
+ to
+ t : Persons!Male (
+ fullName <- s.firstName + ' ' + s.familyName
+ )
+}
+
+rule Member2Female {
+ from
+ s : Families!Member (s.isFemale())
+ to
+ t : Persons!Female (
+ fullName <- s.firstName + ' ' + s.familyName
+ )
+}
+
|