package org.eclipse.ocl.examples.impactanalyzer.benchmark; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.junit.Test; public class AssertBenchmarkModelSizes { @Test public void testModelSizeForNgpmStdlibXmi() { Resource r = new ResourceSetImpl().createResource( URI.createPlatformPluginURI("/org.eclipse.ocl.examples.impactanalyzer.testutils/bin/org/eclipse/ocl/examples/impactanalyzer/benchmark/preparation/notifications/fixtures/models/NgpmModel.xmi", /* encode */ false)); computeAndAssertModelSize(r, 3803, 10176); } public void computeAndAssertModelSize(Resource r, int expectedNumberOfElements, int expectedNumberOfReferences) { Set<EObject> objects = new HashSet<EObject>(); int resourceSize = 0; int proxies = 0; int refs = 0; try { r.load(null); TreeIterator<EObject> iterator = r.getAllContents(); while(iterator.hasNext()){ EObject eo = iterator.next(); resourceSize++; assertEquals(r, eo.eResource()); if (eo.eIsProxy()) { proxies++; } if (!objects.contains(eo)) { objects.add(eo); refs += getNumberOfReferences(eo); } } } catch (IOException e) { throw new RuntimeException(e); } System.out.println("Distinct elements: "+objects.size()); assertEquals(expectedNumberOfElements, objects.size()); System.out.println("References: "+refs); assertEquals(expectedNumberOfReferences, refs); System.out.println("Elements in allContents iterator: " + resourceSize); System.out.println("Proxies: " + proxies); } private int getNumberOfReferences(EObject eo) { int result = 0; for (EReference r : eo.eClass().getEAllReferences()) { Object refValue = eo.eGet(r); if (refValue != null) { if (refValue instanceof Collection<?>) { result += ((Collection<?>) refValue).size(); } else { result++; } } } return result; } @Test public void testModelSizeForNgpmStdlibWithCtsEditorTestsXmi() { Resource r = new ResourceSetImpl().createResource( URI.createPlatformPluginURI("/org.eclipse.ocl.examples.impactanalyzer.testutils/bin/org/eclipse/ocl/examples/impactanalyzer/benchmark/preparation/notifications/fixtures/models/NgpmModelWithCtsEditorTest.xmi", /* encode */ false)); computeAndAssertModelSize(r, 3979, 10699); } }