aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java')
-rw-r--r--subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java95
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 @@
6package tools.refinery.language.semantics; 6package tools.refinery.language.semantics;
7 7
8import com.google.inject.Inject; 8import com.google.inject.Inject;
9import com.google.inject.Provider;
9import org.eclipse.xtext.testing.InjectWith; 10import org.eclipse.xtext.testing.InjectWith;
10import org.eclipse.xtext.testing.extensions.InjectionExtension; 11import org.eclipse.xtext.testing.extensions.InjectionExtension;
11import org.junit.jupiter.api.extension.ExtendWith; 12import org.junit.jupiter.api.extension.ExtendWith;
12import org.junit.jupiter.params.ParameterizedTest; 13import org.junit.jupiter.params.ParameterizedTest;
13import org.junit.jupiter.params.provider.Arguments; 14import org.junit.jupiter.params.provider.Arguments;
14import org.junit.jupiter.params.provider.MethodSource; 15import org.junit.jupiter.params.provider.MethodSource;
15import tools.refinery.generator.ModelGeneratorFactory; 16import tools.refinery.language.model.tests.utils.ProblemParseHelper;
16import tools.refinery.generator.ProblemLoader;
17import tools.refinery.language.tests.ProblemInjectorProvider; 17import tools.refinery.language.tests.ProblemInjectorProvider;
18import tools.refinery.store.dse.propagation.PropagationAdapter;
19import tools.refinery.store.dse.strategy.BestFirstStoreManager;
20import tools.refinery.store.dse.transition.DesignSpaceExplorationAdapter;
21import tools.refinery.store.model.ModelStore;
22import tools.refinery.store.query.interpreter.QueryInterpreterAdapter;
23import tools.refinery.store.reasoning.ReasoningAdapter;
24import tools.refinery.store.reasoning.ReasoningStoreAdapter;
25import tools.refinery.store.reasoning.literal.Concreteness;
26import tools.refinery.store.statecoding.StateCoderAdapter;
18 27
19import java.io.ByteArrayOutputStream; 28import java.io.ByteArrayOutputStream;
20import java.io.IOException; 29import java.io.IOException;
21import java.util.Map; 30import java.util.Map;
31import java.util.Set;
22import java.util.stream.Stream; 32import java.util.stream.Stream;
23 33
24import static org.hamcrest.MatcherAssert.assertThat; 34import static org.hamcrest.MatcherAssert.assertThat;
@@ -28,21 +38,35 @@ import static org.hamcrest.Matchers.is;
28@InjectWith(ProblemInjectorProvider.class) 38@InjectWith(ProblemInjectorProvider.class)
29class SolutionSerializerTest { 39class 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}