1 package org.simantics.scl.compiler.tests.unit;
3 import java.util.ArrayList;
5 import org.junit.Assert;
7 import org.simantics.scl.compiler.errors.ErrorLog;
8 import org.simantics.scl.compiler.errors.Locations;
9 import org.simantics.scl.compiler.internal.elaboration.subsumption.Subsumption;
10 import org.simantics.scl.compiler.internal.elaboration.subsumption2.SubSolver2;
11 import org.simantics.scl.compiler.types.TMetaVar;
12 import org.simantics.scl.compiler.types.Type;
13 import org.simantics.scl.compiler.types.Types;
14 import org.simantics.scl.compiler.types.kinds.Kinds;
15 import org.simantics.scl.compiler.types.util.Polarity;
17 public class TestSubSolver2 {
18 ErrorLog errorLog = new ErrorLog();
19 ArrayList<Subsumption> subsumptions = new ArrayList<Subsumption>();
21 private void sub(Type a, Type b) {
22 subsumptions.add(new Subsumption(Locations.NO_LOCATION, a, b));
25 private TMetaVar metaVar(Polarity p) {
26 TMetaVar var = Types.metaVar(Kinds.EFFECT);
33 TMetaVar a = metaVar(Polarity.NO_POLARITY);
34 TMetaVar b = metaVar(Polarity.NO_POLARITY);
36 SubSolver2.solve(errorLog, subsumptions);
37 Assert.assertEquals(0, errorLog.getErrorCount());
38 Assert.assertEquals(a, b);
43 TMetaVar a = metaVar(Polarity.POSITIVE);
44 TMetaVar b = metaVar(Polarity.POSITIVE);
46 SubSolver2.solve(errorLog, subsumptions);
47 Assert.assertEquals(0, errorLog.getErrorCount());
48 Assert.assertEquals(a, b);
53 TMetaVar a = metaVar(Polarity.NEGATIVE);
54 TMetaVar b = metaVar(Polarity.NEGATIVE);
56 SubSolver2.solve(errorLog, subsumptions);
57 Assert.assertEquals(0, errorLog.getErrorCount());
58 Assert.assertEquals(a, b);
63 TMetaVar a = metaVar(Polarity.POSITIVE);
64 TMetaVar b = metaVar(Polarity.NEGATIVE);
66 SubSolver2.solve(errorLog, subsumptions);
67 Assert.assertEquals(0, errorLog.getErrorCount());
68 Assert.assertNotEquals(a, b);
73 TMetaVar a = metaVar(Polarity.NEGATIVE);
74 TMetaVar b = metaVar(Polarity.POSITIVE);
76 SubSolver2.solve(errorLog, subsumptions);
77 Assert.assertEquals(0, errorLog.getErrorCount());
78 Assert.assertEquals(a, b);
83 TMetaVar a = metaVar(Polarity.BIPOLAR);
84 TMetaVar b = metaVar(Polarity.BIPOLAR);
85 TMetaVar c = metaVar(Polarity.BIPOLAR);
89 SubSolver2.solve(errorLog, subsumptions);
90 Assert.assertEquals(0, errorLog.getErrorCount());
91 Assert.assertEquals(a, b);
92 Assert.assertEquals(a, c);
97 TMetaVar a = metaVar(Polarity.POSITIVE);
98 TMetaVar b = metaVar(Polarity.POSITIVE);
99 sub(a, Types.union(a, b));
101 SubSolver2.solve(errorLog, subsumptions);
102 Assert.assertEquals(0, errorLog.getErrorCount());
103 Assert.assertEquals(Types.PROC, b);
107 public void union2() {
108 TMetaVar a = metaVar(Polarity.POSITIVE);
109 TMetaVar b = metaVar(Polarity.POSITIVE);
110 sub(Types.union(a, Types.PROC), Types.union(a, b));
111 SubSolver2.solve(errorLog, subsumptions);
112 Assert.assertEquals(0, errorLog.getErrorCount());
113 Assert.assertNotEquals(Types.NO_EFFECTS, b);