diff options
author | Zoltan Ujhelyi | 2018-07-12 14:24:52 +0000 |
---|---|---|
committer | Zoltan Ujhelyi | 2018-07-13 07:33:23 +0000 |
commit | bd9868fcaabef2e8cec89e23acce32d30c2f65ab (patch) | |
tree | ea90c66344154c2813f8276e06659fd830408524 | |
parent | 03d1fb471bbc41b51fc9710d92e9107eeec7f62d (diff) | |
download | org.eclipse.viatra-bd9868fcaabef2e8cec89e23acce32d30c2f65ab.tar.gz org.eclipse.viatra-bd9868fcaabef2e8cec89e23acce32d30c2f65ab.tar.xz org.eclipse.viatra-bd9868fcaabef2e8cec89e23acce32d30c2f65ab.zip |
Change-Id: I0e1c0b5c7883c75c16ce63566ecbcf7596d36467
Signed-off-by: Zoltan Ujhelyi <zoltan.ujhelyi@incquerylabs.com>
4 files changed, 188 insertions, 0 deletions
diff --git a/query/tests/org.eclipse.viatra.query.runtime.cps.tests/META-INF/MANIFEST.MF b/query/tests/org.eclipse.viatra.query.runtime.cps.tests/META-INF/MANIFEST.MF index ed3af647c..228dc2cc7 100644 --- a/query/tests/org.eclipse.viatra.query.runtime.cps.tests/META-INF/MANIFEST.MF +++ b/query/tests/org.eclipse.viatra.query.runtime.cps.tests/META-INF/MANIFEST.MF @@ -5,6 +5,10 @@ Bundle-SymbolicName: org.eclipse.viatra.query.runtime.cps.tests;singleton:=true Bundle-Version: 2.0.1.qualifier Bundle-Vendor: The Eclipse VIATRA Project Export-Package: org.eclipse.viatra.query.runtime.cps.tests.queries, + org.eclipse.viatra.query.runtime.cps.tests.queries.api, + org.eclipse.viatra.query.runtime.cps.tests.queries.api.util, + org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate, + org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.util, org.eclipse.viatra.query.runtime.cps.tests.queries.resolveordering, org.eclipse.viatra.query.runtime.cps.tests.queries.resolveordering.util, org.eclipse.viatra.query.runtime.cps.tests.queries.util diff --git a/query/tests/org.eclipse.viatra.query.runtime.cps.tests/plugin.xml b/query/tests/org.eclipse.viatra.query.runtime.cps.tests/plugin.xml index e5af3bb7b..cdbcdcb26 100644 --- a/query/tests/org.eclipse.viatra.query.runtime.cps.tests/plugin.xml +++ b/query/tests/org.eclipse.viatra.query.runtime.cps.tests/plugin.xml @@ -64,6 +64,12 @@ <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.allDependencies"/> </group> </extension> + <extension id="org.eclipse.viatra.query.runtime.cps.tests.queries.ErrorHandling" point="org.eclipse.viatra.query.runtime.queryspecification"> + <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:org.eclipse.viatra.query.runtime.cps.tests.queries.ErrorHandling" id="org.eclipse.viatra.query.runtime.cps.tests.queries.ErrorHandling"> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.evalDivisionByZero"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.checkDivisionByZero"/> + </group> + </extension> <extension id="org.eclipse.viatra.query.runtime.cps.tests.queries.FlattenedPatternCall" point="org.eclipse.viatra.query.runtime.queryspecification"> <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:org.eclipse.viatra.query.runtime.cps.tests.queries.FlattenedPatternCall" id="org.eclipse.viatra.query.runtime.cps.tests.queries.FlattenedPatternCall"> <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.called"/> @@ -96,6 +102,17 @@ <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.longValueConstantWithCheck"/> </group> </extension> + <extension id="org.eclipse.viatra.query.runtime.cps.tests.queries.LocalsearchPlannerTests" point="org.eclipse.viatra.query.runtime.queryspecification"> + <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:org.eclipse.viatra.query.runtime.cps.tests.queries.LocalsearchPlannerTests" id="org.eclipse.viatra.query.runtime.cps.tests.queries.LocalsearchPlannerTests"> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.partiallyUnboundUnifiedExportedParameters"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.multipleExportedSame"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.multiInstanceTypes"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.unifiedParametersWithDifferentValues2"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.unifiedParametersWithDifferentValues"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.multipleEvals"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.useVarInEval"/> + </group> + </extension> <extension id="org.eclipse.viatra.query.runtime.cps.tests.queries.OtherTests" point="org.eclipse.viatra.query.runtime.queryspecification"> <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:org.eclipse.viatra.query.runtime.cps.tests.queries.OtherTests" id="org.eclipse.viatra.query.runtime.cps.tests.queries.OtherTests"> <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.notApplicationInstanceIdentifiable"/> @@ -183,6 +200,23 @@ <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.argumentsUnifiedByCaller"/> </group> </extension> + <extension id="org.eclipse.viatra.query.runtime.cps.tests.queries.api.BackendSelectionQueries" point="org.eclipse.viatra.query.runtime.queryspecification"> + <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:org.eclipse.viatra.query.runtime.cps.tests.queries.api.BackendSelectionQueries" id="org.eclipse.viatra.query.runtime.cps.tests.queries.api.BackendSelectionQueries"> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.api.defaultBackend"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.api.searchBackend"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.api.incrementalBackend"/> + </group> + </extension> + <extension id="org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.FlattenerPredicateQueries" point="org.eclipse.viatra.query.runtime.queryspecification"> + <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.FlattenerPredicateQueries" id="org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.FlattenerPredicateQueries"> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.called_d"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.callee_d"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.called_s"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.callee_s"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.called_i"/> + <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.callee_i"/> + </group> + </extension> <extension id="org.eclipse.viatra.query.runtime.cps.tests.queries.resolveordering.A_third" point="org.eclipse.viatra.query.runtime.queryspecification"> <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:org.eclipse.viatra.query.runtime.cps.tests.queries.resolveordering.A_third" id="org.eclipse.viatra.query.runtime.cps.tests.queries.resolveordering.A_third"> <query-specification fqn="org.eclipse.viatra.query.runtime.cps.tests.queries.resolveordering.thirdPattern"/> diff --git a/query/tests/org.eclipse.viatra.query.runtime.cps.tests/src/org/eclipse/viatra/query/runtime/cps/tests/FlattenerPredicateTest.xtend b/query/tests/org.eclipse.viatra.query.runtime.cps.tests/src/org/eclipse/viatra/query/runtime/cps/tests/FlattenerPredicateTest.xtend new file mode 100644 index 000000000..a5b941591 --- /dev/null +++ b/query/tests/org.eclipse.viatra.query.runtime.cps.tests/src/org/eclipse/viatra/query/runtime/cps/tests/FlattenerPredicateTest.xtend @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright (c) 2014-2018 Zoltan Ujhelyi, IncQuery Labs Ltd. + * 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: + * Zoltan Ujhelyi - initial API and implementation + *******************************************************************************/ +package org.eclipse.viatra.query.runtime.cps.tests + +import java.util.Collection +import org.eclipse.emf.ecore.resource.ResourceSet +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl +import org.eclipse.viatra.query.runtime.api.AdvancedViatraQueryEngine +import org.eclipse.viatra.query.runtime.api.IPatternMatch +import org.eclipse.viatra.query.runtime.api.IQuerySpecification +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngineOptions +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher +import org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.util.Called_dQuerySpecification +import org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.util.Called_iQuerySpecification +import org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.util.Called_sQuerySpecification +import org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.util.Callee_dQuerySpecification +import org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.util.Callee_iQuerySpecification +import org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate.util.Callee_sQuerySpecification +import org.eclipse.viatra.query.runtime.emf.EMFScope +import org.eclipse.viatra.query.runtime.localsearch.matcher.integration.LocalSearchEMFBackendFactory +import org.eclipse.viatra.query.runtime.localsearch.matcher.integration.LocalSearchGenericBackendFactory +import org.eclipse.viatra.query.runtime.localsearch.matcher.integration.LocalSearchHints +import org.eclipse.viatra.query.runtime.rete.matcher.ReteBackendFactory +import org.eclipse.viatra.query.testing.core.XmiModelUtil +import org.eclipse.viatra.query.testing.core.XmiModelUtil.XmiModelUtilRunningOptionEnum +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized +import org.junit.runners.Parameterized.Parameter +import org.junit.runners.Parameterized.Parameters + +@RunWith(Parameterized) +class FlattenerPredicateTest { + static val queryBackends = #[ReteBackendFactory.INSTANCE, LocalSearchEMFBackendFactory.INSTANCE, LocalSearchGenericBackendFactory.INSTANCE] + static val DEFAULT_OPTION = ViatraQueryEngineOptions.^default + static val SEARCH_OPTION = ViatraQueryEngineOptions.defineOptions.withDefaultBackend(LocalSearchEMFBackendFactory.INSTANCE).build + static val INCREMENTAL_OPTION = ViatraQueryEngineOptions.defineOptions.withDefaultBackend(ReteBackendFactory.INSTANCE).build + @Parameters() + def static Collection<Object[]> testData() { + #[ + // Default engine options, default modifiers, should be flattened + #[DEFAULT_OPTION, Callee_dQuerySpecification.instance, Called_dQuerySpecification.instance, true], + // Default engine options, incremental modifiers, should not be flattened + #[DEFAULT_OPTION, Callee_iQuerySpecification.instance, Called_iQuerySpecification.instance, false], + // Default engine options, search modifiers, should be flattened + #[DEFAULT_OPTION, Callee_sQuerySpecification.instance, Called_sQuerySpecification.instance, true], + // Search engine, default modifiers, should be flattened + #[SEARCH_OPTION, Callee_dQuerySpecification.instance, Called_dQuerySpecification.instance, true], + // Search engine, incremental modifiers, should not be flattened + #[SEARCH_OPTION, Callee_iQuerySpecification.instance, Called_iQuerySpecification.instance, false], + // Search engine, search modifiers, should be flattened + #[SEARCH_OPTION, Callee_sQuerySpecification.instance, Called_sQuerySpecification.instance, true], + // Incremental engine, default modifiers, should be flattened + #[INCREMENTAL_OPTION, Callee_dQuerySpecification.instance, Called_dQuerySpecification.instance, true], + // Incremental engine, incremental modifiers, should not be flattened + #[INCREMENTAL_OPTION, Callee_iQuerySpecification.instance, Called_iQuerySpecification.instance, false], + // Incremental engine, search modifiers, should be flattened + #[INCREMENTAL_OPTION, Callee_sQuerySpecification.instance, Called_sQuerySpecification.instance, true] + ] + } + + @Parameter(0) + public ViatraQueryEngineOptions engineOptions + @Parameter(1) + public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> queryToFlatten + @Parameter(2) + public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> queryFlattened + @Parameter(3) + public boolean shouldCallBeFlattened + + + public String modelPath = "org.eclipse.viatra.query.runtime.cps.tests/models/instances/demo.cyberphysicalsystem" + ResourceSet rs + + @Before + def void prepareTest() { + val modelUri = XmiModelUtil::resolvePlatformURI(XmiModelUtilRunningOptionEnum.BOTH, modelPath) + rs = new ResourceSetImpl + rs.getResource(modelUri, true) + } + + @Test + def void flattenedPatternCallTest() { + val engine = AdvancedViatraQueryEngine.createUnmanagedEngine(new EMFScope(rs), engineOptions) + try { + engine.getMatcher(queryToFlatten, LocalSearchHints.^default.build) + Assert.assertTrue(shouldCallBeFlattened.xor(engine.hasResultProviderForQuery(queryFlattened))) + } finally { + engine.dispose + } + } + + def boolean hasResultProviderForQuery(AdvancedViatraQueryEngine engine, IQuerySpecification<?> query) { + queryBackends.exists[backend | + engine.getQueryBackend(backend).peekExistingResultProvider(query.internalQueryRepresentation) !== null + ] + } + + +} diff --git a/query/tests/org.eclipse.viatra.query.runtime.cps.tests/src/org/eclipse/viatra/query/runtime/cps/tests/queries/flattenerpredicate/FlattenerPredicateQueries.vql b/query/tests/org.eclipse.viatra.query.runtime.cps.tests/src/org/eclipse/viatra/query/runtime/cps/tests/queries/flattenerpredicate/FlattenerPredicateQueries.vql new file mode 100644 index 000000000..12268d04a --- /dev/null +++ b/query/tests/org.eclipse.viatra.query.runtime.cps.tests/src/org/eclipse/viatra/query/runtime/cps/tests/queries/flattenerpredicate/FlattenerPredicateQueries.vql @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2010-2018, Zoltan Ujhelyi, IncQuery Labs Ltd. + * 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: + * Zoltan Ujhelyi - initial API and implementation + *******************************************************************************/ +package org.eclipse.viatra.query.runtime.cps.tests.queries.flattenerpredicate + +import "http://org.eclipse.viatra/model/cps" + +pattern called_d(a : HostInstance) { + HostInstance(a); +} + +pattern callee_d(a1 : HostInstance, a2 : HostInstance) { + find called_d(a1); + HostInstance.communicateWith(a1, a2); +} + +search pattern called_s(a : HostInstance) { + HostInstance(a); +} + +pattern callee_s(a1 : HostInstance, a2 : HostInstance) { + find called_s(a1); + HostInstance.communicateWith(a1, a2); +} + +incremental pattern called_i(a : HostInstance) { + HostInstance(a); +} + +pattern callee_i(a1 : HostInstance, a2 : HostInstance) { + find called_i(a1); + HostInstance.communicateWith(a1, a2); +}
\ No newline at end of file |