diff options
author | Kristóf Marussy <marussy@mit.bme.hu> | 2024-02-19 00:44:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-19 00:44:05 +0100 |
commit | 201c3da912aeaab8a3f51b84198b35c7936d0446 (patch) | |
tree | e427986134c41b540b10b9a9576f5a1788d8fbed /subprojects/language-semantics/src/test/java | |
parent | chore(deps): bump dependencies (diff) | |
parent | docs: update README (diff) | |
download | refinery-201c3da912aeaab8a3f51b84198b35c7936d0446.tar.gz refinery-201c3da912aeaab8a3f51b84198b35c7936d0446.tar.zst refinery-201c3da912aeaab8a3f51b84198b35c7936d0446.zip |
Merge pull request #53 from kris7t/imports
Module and import resolution support
Diffstat (limited to 'subprojects/language-semantics/src/test/java')
-rw-r--r-- | subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java | 95 |
1 files changed, 86 insertions, 9 deletions
diff --git a/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java b/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java index 2d759c86..be675a80 100644 --- a/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java +++ b/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java | |||
@@ -6,19 +6,29 @@ | |||
6 | package tools.refinery.language.semantics; | 6 | package tools.refinery.language.semantics; |
7 | 7 | ||
8 | import com.google.inject.Inject; | 8 | import com.google.inject.Inject; |
9 | import com.google.inject.Provider; | ||
9 | import org.eclipse.xtext.testing.InjectWith; | 10 | import org.eclipse.xtext.testing.InjectWith; |
10 | import org.eclipse.xtext.testing.extensions.InjectionExtension; | 11 | import org.eclipse.xtext.testing.extensions.InjectionExtension; |
11 | import org.junit.jupiter.api.extension.ExtendWith; | 12 | import org.junit.jupiter.api.extension.ExtendWith; |
12 | import org.junit.jupiter.params.ParameterizedTest; | 13 | import org.junit.jupiter.params.ParameterizedTest; |
13 | import org.junit.jupiter.params.provider.Arguments; | 14 | import org.junit.jupiter.params.provider.Arguments; |
14 | import org.junit.jupiter.params.provider.MethodSource; | 15 | import org.junit.jupiter.params.provider.MethodSource; |
15 | import tools.refinery.generator.ModelGeneratorFactory; | 16 | import tools.refinery.language.model.tests.utils.ProblemParseHelper; |
16 | import tools.refinery.generator.ProblemLoader; | ||
17 | import tools.refinery.language.tests.ProblemInjectorProvider; | 17 | import tools.refinery.language.tests.ProblemInjectorProvider; |
18 | import tools.refinery.store.dse.propagation.PropagationAdapter; | ||
19 | import tools.refinery.store.dse.strategy.BestFirstStoreManager; | ||
20 | import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter; | ||
21 | import tools.refinery.store.model.ModelStore; | ||
22 | import tools.refinery.store.query.interpreter.QueryInterpreterAdapter; | ||
23 | import tools.refinery.store.reasoning.ReasoningAdapter; | ||
24 | import tools.refinery.store.reasoning.ReasoningStoreAdapter; | ||
25 | import tools.refinery.store.reasoning.literal.Concreteness; | ||
26 | import tools.refinery.store.statecoding.StateCoderAdapter; | ||
18 | 27 | ||
19 | import java.io.ByteArrayOutputStream; | 28 | import java.io.ByteArrayOutputStream; |
20 | import java.io.IOException; | 29 | import java.io.IOException; |
21 | import java.util.Map; | 30 | import java.util.Map; |
31 | import java.util.Set; | ||
22 | import java.util.stream.Stream; | 32 | import java.util.stream.Stream; |
23 | 33 | ||
24 | import static org.hamcrest.MatcherAssert.assertThat; | 34 | import static org.hamcrest.MatcherAssert.assertThat; |
@@ -28,21 +38,35 @@ import static org.hamcrest.Matchers.is; | |||
28 | @InjectWith(ProblemInjectorProvider.class) | 38 | @InjectWith(ProblemInjectorProvider.class) |
29 | class SolutionSerializerTest { | 39 | class SolutionSerializerTest { |
30 | @Inject | 40 | @Inject |
31 | ProblemLoader loader; | 41 | private ProblemParseHelper parseHelper; |
32 | 42 | ||
33 | @Inject | 43 | @Inject |
34 | ModelGeneratorFactory generatorFactory; | 44 | private Provider<ModelInitializer> initializerProvider; |
35 | 45 | ||
36 | @Inject | 46 | @Inject |
37 | SolutionSerializer serializer; | 47 | private Provider<SolutionSerializer> serializerProvider; |
38 | 48 | ||
39 | @ParameterizedTest | 49 | @ParameterizedTest |
40 | @MethodSource | 50 | @MethodSource |
41 | void solutionSerializerTest(String prefix, String input, String expectedOutput) throws IOException { | 51 | void solutionSerializerTest(String prefix, String input, String expectedOutput) throws IOException { |
42 | var problem = loader.loadString(prefix + "\n" + input); | 52 | var problem = parseHelper.parse(prefix + "\n" + input).problem(); |
43 | var generator = generatorFactory.createGenerator(problem); | 53 | var storeBuilder = ModelStore.builder() |
44 | generator.generate(); | 54 | .with(QueryInterpreterAdapter.builder()) |
45 | var solution = serializer.serializeSolution(generator.getProblemTrace(), generator.getModel()); | 55 | .with(PropagationAdapter.builder()) |
56 | .with(StateCoderAdapter.builder()) | ||
57 | .with(DesignSpaceExplorationAdapter.builder()) | ||
58 | .with(ReasoningAdapter.builder() | ||
59 | .requiredInterpretations(Set.of(Concreteness.CANDIDATE))); | ||
60 | var initializer = initializerProvider.get(); | ||
61 | var modelSeed = initializer.createModel(problem, storeBuilder); | ||
62 | var store = storeBuilder.build(); | ||
63 | var model = store.getAdapter(ReasoningStoreAdapter.class).createInitialModel(modelSeed); | ||
64 | var initialVersion = model.commit(); | ||
65 | var bestFirst = new BestFirstStoreManager(store, 1); | ||
66 | bestFirst.startExploration(initialVersion, 0); | ||
67 | model.restore(bestFirst.getSolutionStore().getSolutions().getFirst().version()); | ||
68 | var serializer = serializerProvider.get(); | ||
69 | var solution = serializer.serializeSolution(initializer.getProblemTrace(), model); | ||
46 | String actualOutput; | 70 | String actualOutput; |
47 | try (var outputStream = new ByteArrayOutputStream()) { | 71 | try (var outputStream = new ByteArrayOutputStream()) { |
48 | solution.eResource().save(outputStream, Map.of()); | 72 | solution.eResource().save(outputStream, Map.of()); |
@@ -57,6 +81,7 @@ class SolutionSerializerTest { | |||
57 | """, """ | 81 | """, """ |
58 | scope Foo = 3. | 82 | scope Foo = 3. |
59 | """, """ | 83 | """, """ |
84 | declare foo1, foo2, foo3. | ||
60 | !exists(Foo::new). | 85 | !exists(Foo::new). |
61 | Foo(foo1). | 86 | Foo(foo1). |
62 | Foo(foo2). | 87 | Foo(foo2). |
@@ -70,6 +95,7 @@ class SolutionSerializerTest { | |||
70 | """, """ | 95 | """, """ |
71 | scope Foo = 1. | 96 | scope Foo = 1. |
72 | """, """ | 97 | """, """ |
98 | declare foo1, bar1, bar2. | ||
73 | !exists(Foo::new). | 99 | !exists(Foo::new). |
74 | !exists(Bar::new). | 100 | !exists(Bar::new). |
75 | Foo(foo1). | 101 | Foo(foo1). |
@@ -88,6 +114,7 @@ class SolutionSerializerTest { | |||
88 | """, """ | 114 | """, """ |
89 | scope Foo = 1, Bar = 2. | 115 | scope Foo = 1, Bar = 2. |
90 | """, """ | 116 | """, """ |
117 | declare foo1, bar1, bar2. | ||
91 | !exists(Foo::new). | 118 | !exists(Foo::new). |
92 | !exists(Bar::new). | 119 | !exists(Bar::new). |
93 | Foo(foo1). | 120 | Foo(foo1). |
@@ -107,6 +134,7 @@ class SolutionSerializerTest { | |||
107 | 134 | ||
108 | scope Person += 0. | 135 | scope Person += 0. |
109 | """, """ | 136 | """, """ |
137 | declare a, b, c. | ||
110 | !exists(Person::new). | 138 | !exists(Person::new). |
111 | Person(a). | 139 | Person(a). |
112 | Person(b). | 140 | Person(b). |
@@ -132,6 +160,7 @@ class SolutionSerializerTest { | |||
132 | 160 | ||
133 | scope Foo += 0. | 161 | scope Foo += 0. |
134 | """, """ | 162 | """, """ |
163 | declare foo. | ||
135 | !exists(Foo::new). | 164 | !exists(Foo::new). |
136 | Foo(foo). | 165 | Foo(foo). |
137 | default !bar(*, *). | 166 | default !bar(*, *). |
@@ -142,6 +171,7 @@ class SolutionSerializerTest { | |||
142 | """, """ | 171 | """, """ |
143 | scope Foo = 1, Bar = 0. | 172 | scope Foo = 1, Bar = 0. |
144 | """, """ | 173 | """, """ |
174 | declare foo1. | ||
145 | !exists(Foo::new). | 175 | !exists(Foo::new). |
146 | !exists(Bar::new). | 176 | !exists(Bar::new). |
147 | Foo(foo1). | 177 | Foo(foo1). |
@@ -156,9 +186,56 @@ class SolutionSerializerTest { | |||
156 | 186 | ||
157 | scope Foo += 0. | 187 | scope Foo += 0. |
158 | """, """ | 188 | """, """ |
189 | declare a. | ||
159 | !exists(Foo::new). | 190 | !exists(Foo::new). |
160 | Foo(a). | 191 | Foo(a). |
161 | default !ref(*, *). | 192 | default !ref(*, *). |
193 | """), Arguments.of(""" | ||
194 | atom a. | ||
195 | class Foo. | ||
196 | """, """ | ||
197 | Foo(a). | ||
198 | scope Foo += 0. | ||
199 | """, """ | ||
200 | !exists(Foo::new). | ||
201 | Foo(a). | ||
202 | """), Arguments.of(""" | ||
203 | multi a. | ||
204 | class Foo. | ||
205 | """, """ | ||
206 | Foo(a). | ||
207 | !exists(Foo::new). | ||
208 | scope Foo = 2. | ||
209 | """, """ | ||
210 | declare foo1, foo2. | ||
211 | !exists(a). | ||
212 | !exists(Foo::new). | ||
213 | Foo(foo1). | ||
214 | Foo(foo2). | ||
215 | """), Arguments.of(""" | ||
216 | declare a. | ||
217 | class Foo. | ||
218 | """, """ | ||
219 | Foo(a). | ||
220 | ?exists(a). | ||
221 | scope Foo = 2, Foo += 1. | ||
222 | """, """ | ||
223 | declare foo1. | ||
224 | !exists(Foo::new). | ||
225 | Foo(a). | ||
226 | Foo(foo1). | ||
227 | """), Arguments.of(""" | ||
228 | declare a. | ||
229 | class Foo. | ||
230 | """, """ | ||
231 | Foo(a). | ||
232 | ?exists(a). | ||
233 | scope Foo = 1, Foo += 1. | ||
234 | """, """ | ||
235 | declare foo1. | ||
236 | !exists(a). | ||
237 | !exists(Foo::new). | ||
238 | Foo(foo1). | ||
162 | """)); | 239 | """)); |
163 | } | 240 | } |
164 | } | 241 | } |