blob: 0c541566a1c3211e487290aa9b23954ad7cc30e7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 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.exe2016.tests.etl;
import java.io.File;
import java.io.InputStream;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.epsilon.emc.emf.EmfModel;
import org.eclipse.epsilon.emc.emf.EmfModelFactory;
import org.eclipse.epsilon.emc.emf.EmfModelFactory.AccessMode;
import org.eclipse.epsilon.etl.EtlModule;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.qvtd.doc.exe2016.tests.AbstractEXE2016CGTests;
import org.eclipse.qvtd.doc.exe2016.tests.DoublyLinkedListGenerator;
import org.eclipse.qvtd.doc.exe2016.tests.PrintAndLog;
import org.eclipse.qvtd.doc.exe2016.tests.qvtc.doublylinkedlist.DoublyLinkedList;
import org.eclipse.qvtd.doc.exe2016.tests.qvtc.doublylinkedlist.DoublylinkedlistPackage;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class EXE2016_ETL_Tests extends AbstractEXE2016CGTests
{
@Override
@Before
public void setUp() throws Exception {
super.setUp();
}
@Override
@After
public void tearDown() throws Exception {
super.tearDown();
}
static class NullInputStream extends InputStream {
static final NullInputStream INSTANCE = new NullInputStream();
private NullInputStream() {}
@Override
public int read() { return -1; }
@Override
public int available() { return 0; }
}
@Test
public void testQVTcCompiler_Forward2Reverse_ETL() throws Exception {
DoublyLinkedListGenerator doublyLinkedListGenerator = new DoublyLinkedListGenerator();
PrintAndLog logger = new PrintAndLog(getName());
logger.printf("%s\n", getName());
/*
* Initializations
*/
try {
int[] tests = PrintAndLog.getTestSizes();
boolean isFirst = true;
for (int testSize : tests) {
if (isFirst) {
isFirst = false;
testSize = 500; // Avoid Stack Overflow on warmup
}
EtlModule transformationLauncher = new EtlModule();
EmfModelFactory modelFactory = EmfModelFactory.getInstance();
String etlpath = "src/org/eclipse/qvtd/doc/exe2016/tests/etl/Forward2Reverse.etl";
File file = new File(etlpath);
transformationLauncher.parse(file);
/*
* Load models
*/
EmfModel forwardListModel = new EmfModel();
forwardListModel.setName("ForwardList");
forwardListModel.setMetamodelFileBased(false);
forwardListModel.setMetamodelUri(DoublylinkedlistPackage.eINSTANCE.getNsURI());
forwardListModel.setResource(new XMIResourceImpl());
AccessMode.READ_ONLY.applyTo(forwardListModel);
Collection<@NonNull ? extends EObject> rootObjects = doublyLinkedListGenerator.createDoublyLinkedListModel(testSize);
forwardListModel.getResource().getContents().clear();
forwardListModel.getResource().getContents().addAll(rootObjects);
// file = new File("src/org/eclipse/qvtd/doc/bigmde2016/tests/atl/samples-Persons.xmi");
// EmfModel personsModel = modelFactory.createEmfModel("Persons", file, PersonsPackage.eINSTANCE, AccessMode.WRITE_ONLY);
EmfModel reverseListModel = new EmfModel();
reverseListModel.setName("ReverseList");
reverseListModel.setMetamodelFileBased(false);
reverseListModel.setMetamodelUri(DoublylinkedlistPackage.eINSTANCE.getNsURI());
reverseListModel.setResource(new XMIResourceImpl());
AccessMode.WRITE_ONLY.applyTo(reverseListModel);
reverseListModel.setStoredOnDisposal(false);
transformationLauncher.getContext().getModelRepository().addModel(forwardListModel);
transformationLauncher.getContext().getModelRepository().addModel(reverseListModel);
/*
* Execute
*/
logger.printf("%9d, ", testSize);
garbageCollect();
long startTime = System.nanoTime();
transformationLauncher.execute();
long endTime = System.nanoTime();
logger.printf("%9.6f\n", (endTime - startTime) / 1.0e9);
Resource reverseListResource = reverseListModel.getResource();
Collection<@NonNull EObject> rootObjects2 = reverseListResource.getContents();
Iterator<@NonNull EObject> it = rootObjects2.iterator();
Object rootObject = it.next();
assert !it.hasNext();
assert ((DoublyLinkedList)rootObject).getOwnedElements().size() == testSize-1;
doublyLinkedListGenerator.checkModel((DoublyLinkedList) rootObject, testSize);
/*
* Unload all models
*/
transformationLauncher.getContext().getModelRepository().dispose();
transformationLauncher.getContext().dispose();
transformationLauncher.reset();
}
}
finally {
logger.dispose();
}
}
}