package de.hub.emffrag.benchmarks.reference;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EReference;
import de.hub.emffrag.EmfFragActivator;
import de.hub.emffrag.fragmentation.AbstractFragmentationTests;
import de.hub.emffrag.fragmentation.IndexBasedIdSemantics.IdBehaviour;
import de.hub.emffrag.fragmentation.NoReferencesIdSemantics;
import de.hub.emffrag.testmodels.testmodel.TestObjectWithIndexes;
public class ReferenceBenchmark extends AbstractFragmentationTests implements IBenchmark<ReferenceBenchmark.Parameters> {
public enum Command { importModel, runTask };
public static class Parameters implements IParameters {
public final Command command;
public final long references;
public final long accessReferences;
public Parameters(Command command, long references, long accessReferences) {
super();
this.command = command;
this.references = references;
this.accessReferences = accessReferences;
}
public String getModelName() {
return "referenceBenchmark" + references;
}
@Override
public String toString() {
return command + "," + references + "," + accessReferences;
}
}
public EReference reference = de.hub.emffrag.testmodels.testmodel.TestModelPackage.eINSTANCE.getTestObject_CrossReferences();
public de.hub.emffrag.testmodels.testmodel.TestModelFactory factory = de.hub.emffrag.testmodels.testmodel.TestModelFactory.eINSTANCE;
protected Parameters parameters = null;
@Override
protected boolean doInitializeModel() {
return false;
}
@SuppressWarnings("unchecked")
@Override
public void runTask(Parameters parameters, IGauge gauge) {
this.parameters = parameters;
setUp();
EmfFragActivator.instance.idSemantics = new NoReferencesIdSemantics(IdBehaviour.defaultModel);
EmfFragActivator.instance.cacheSize = 1000;
resetErrorsAndWarnings();
registerPackages();
standardInitialization();
gauge.onStart();
model = createFragmentedModel(dataStore, metaModel);
EmfFragActivator.instance.defaultModel = model;
if (parameters.command == Command.importModel) {
TestObjectWithIndexes o1 = factory.createTestObjectWithIndexes();
TestObjectWithIndexes o2 = factory.createTestObjectWithIndexes();
model.getContents().add(o1);
model.getContents().add(o2);
o1.setName("o1fsfdsdfdfdfgdfgdgfdfgdfgdfgdfgdfgdfgdfgdfgdfg");
o2.setName("o2");
for (long i = 0; i < parameters.references; i++) {
((EList<TestObjectWithIndexes>)o1.eGet(reference)).add(o2);
}
model.save(null);
} else if (parameters.command == Command.runTask) {
TestObjectWithIndexes o1 = (TestObjectWithIndexes)model.getContents().get(0);
EList<TestObjectWithIndexes> list = (EList<TestObjectWithIndexes>) o1.eGet(reference);
for (long i = 0; i < parameters.accessReferences; i++) {
list.get((int)i).getName();
}
}
gauge.onStop();
}
}