22
33import static org .assertj .core .api .Assertions .*;
44
5+ import com .garciat .typeclasses .impl .ParsedType .App ;
6+ import com .garciat .typeclasses .impl .ParsedType .ArrayOf ;
7+ import com .garciat .typeclasses .impl .ParsedType .Const ;
8+ import com .garciat .typeclasses .impl .ParsedType .Primitive ;
9+ import com .garciat .typeclasses .impl .ParsedType .Var ;
510import com .garciat .typeclasses .types .Maybe ;
611import java .lang .reflect .TypeVariable ;
712import java .util .List ;
1116final class UnificationTest {
1217 @ Test
1318 void unifyEqualConsts () {
14- ParsedType t1 = new ParsedType . Const (String .class );
15- ParsedType t2 = new ParsedType . Const (String .class );
19+ ParsedType t1 = new Const (String .class );
20+ ParsedType t2 = new Const (String .class );
1621
17- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (t1 , t2 );
22+ Maybe <Map <Var , ParsedType >> result = Unification .unify (t1 , t2 );
1823
1924 assertThat (result ).isEqualTo (Maybe .just (Map .of ()));
2025 }
2126
2227 @ Test
2328 void unifyDifferentConsts () {
24- ParsedType t1 = new ParsedType . Const (String .class );
25- ParsedType t2 = new ParsedType . Const (Integer .class );
29+ ParsedType t1 = new Const (String .class );
30+ ParsedType t2 = new Const (Integer .class );
2631
27- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (t1 , t2 );
32+ Maybe <Map <Var , ParsedType >> result = Unification .unify (t1 , t2 );
2833
2934 assertThat (result ).isEqualTo (Maybe .nothing ());
3035 }
3136
3237 @ Test
3338 void unifyVarWithConst () throws Exception {
3439 TypeVariable <?> tv = getTypeVariable ();
35- ParsedType t1 = new ParsedType . Var (tv );
36- ParsedType t2 = new ParsedType . Const (String .class );
40+ ParsedType t1 = new Var (tv );
41+ ParsedType t2 = new Const (String .class );
3742
38- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (t1 , t2 );
43+ Maybe <Map <Var , ParsedType >> result = Unification .unify (t1 , t2 );
3944
4045 assertThat (result ).isEqualTo (Maybe .just (Map .of (t1 , t2 )));
4146 }
4247
4348 @ Test
4449 void unifyVarWithPrimitiveFails () throws Exception {
4550 TypeVariable <?> tv = getTypeVariable ();
46- ParsedType t1 = new ParsedType . Var (tv );
47- ParsedType t2 = new ParsedType . Primitive (int .class );
51+ ParsedType t1 = new Var (tv );
52+ ParsedType t2 = new Primitive (int .class );
4853
49- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (t1 , t2 );
54+ Maybe <Map <Var , ParsedType >> result = Unification .unify (t1 , t2 );
5055
5156 assertThat (result ).isEqualTo (Maybe .nothing ());
5257 }
5358
5459 @ Test
5560 void unifyApps () {
56- ParsedType list1 =
57- new ParsedType .App (new ParsedType .Const (List .class ), new ParsedType .Const (String .class ));
58- ParsedType list2 =
59- new ParsedType .App (new ParsedType .Const (List .class ), new ParsedType .Const (String .class ));
61+ ParsedType list1 = new App (new Const (List .class ), new Const (String .class ));
62+ ParsedType list2 = new App (new Const (List .class ), new Const (String .class ));
6063
61- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (list1 , list2 );
64+ Maybe <Map <Var , ParsedType >> result = Unification .unify (list1 , list2 );
6265
6366 assertThat (result ).isEqualTo (Maybe .just (Map .of ()));
6467 }
6568
6669 @ Test
6770 void unifyAppsDifferentArgs () {
68- ParsedType list1 =
69- new ParsedType .App (new ParsedType .Const (List .class ), new ParsedType .Const (String .class ));
70- ParsedType list2 =
71- new ParsedType .App (new ParsedType .Const (List .class ), new ParsedType .Const (Integer .class ));
71+ ParsedType list1 = new App (new Const (List .class ), new Const (String .class ));
72+ ParsedType list2 = new App (new Const (List .class ), new Const (Integer .class ));
7273
73- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (list1 , list2 );
74+ Maybe <Map <Var , ParsedType >> result = Unification .unify (list1 , list2 );
7475
7576 assertThat (result ).isEqualTo (Maybe .nothing ());
7677 }
7778
7879 @ Test
7980 void unifyAppsWithVar () throws Exception {
8081 TypeVariable <?> tv = getTypeVariable ();
81- ParsedType .Var var = new ParsedType .Var (tv );
82- ParsedType list1 = new ParsedType .App (new ParsedType .Const (List .class ), var );
83- ParsedType list2 =
84- new ParsedType .App (new ParsedType .Const (List .class ), new ParsedType .Const (String .class ));
82+ Var var = new Var (tv );
83+ ParsedType list1 = new App (new Const (List .class ), var );
84+ ParsedType list2 = new App (new Const (List .class ), new Const (String .class ));
8585
86- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (list1 , list2 );
86+ Maybe <Map <Var , ParsedType >> result = Unification .unify (list1 , list2 );
8787
88- assertThat (result ).isEqualTo (Maybe .just (Map .of (var , new ParsedType . Const (String .class ))));
88+ assertThat (result ).isEqualTo (Maybe .just (Map .of (var , new Const (String .class ))));
8989 }
9090
9191 @ Test
9292 void unifyNestedAppsWithVar () throws Exception {
9393 TypeVariable <?> tv = getTypeVariable ();
94- ParsedType .Var var = new ParsedType .Var (tv );
95- ParsedType map1 =
96- new ParsedType .App (
97- new ParsedType .App (new ParsedType .Const (Map .class ), var ),
98- new ParsedType .Const (Integer .class ));
94+ Var var = new Var (tv );
95+ ParsedType map1 = new App (new App (new Const (Map .class ), var ), new Const (Integer .class ));
9996 ParsedType map2 =
100- new ParsedType .App (
101- new ParsedType .App (new ParsedType .Const (Map .class ), new ParsedType .Const (String .class )),
102- new ParsedType .Const (Integer .class ));
97+ new App (new App (new Const (Map .class ), new Const (String .class )), new Const (Integer .class ));
10398
104- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (map1 , map2 );
99+ Maybe <Map <Var , ParsedType >> result = Unification .unify (map1 , map2 );
105100
106- assertThat (result ).isEqualTo (Maybe .just (Map .of (var , new ParsedType . Const (String .class ))));
101+ assertThat (result ).isEqualTo (Maybe .just (Map .of (var , new Const (String .class ))));
107102 }
108103
109104 @ Test
110105 void unifyArrays () {
111- ParsedType arr1 = new ParsedType . ArrayOf (new ParsedType . Const (String .class ));
112- ParsedType arr2 = new ParsedType . ArrayOf (new ParsedType . Const (String .class ));
106+ ParsedType arr1 = new ArrayOf (new Const (String .class ));
107+ ParsedType arr2 = new ArrayOf (new Const (String .class ));
113108
114- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (arr1 , arr2 );
109+ Maybe <Map <Var , ParsedType >> result = Unification .unify (arr1 , arr2 );
115110
116111 assertThat (result ).isEqualTo (Maybe .just (Map .of ()));
117112 }
118113
119114 @ Test
120115 void unifyPrimitives () {
121- ParsedType p1 = new ParsedType . Primitive (int .class );
122- ParsedType p2 = new ParsedType . Primitive (int .class );
116+ ParsedType p1 = new Primitive (int .class );
117+ ParsedType p2 = new Primitive (int .class );
123118
124- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (p1 , p2 );
119+ Maybe <Map <Var , ParsedType >> result = Unification .unify (p1 , p2 );
125120
126121 assertThat (result ).isEqualTo (Maybe .just (Map .of ()));
127122 }
128123
129124 @ Test
130125 void unifyDifferentPrimitives () {
131- ParsedType p1 = new ParsedType . Primitive (int .class );
132- ParsedType p2 = new ParsedType . Primitive (boolean .class );
126+ ParsedType p1 = new Primitive (int .class );
127+ ParsedType p2 = new Primitive (boolean .class );
133128
134- Maybe <Map <ParsedType . Var , ParsedType >> result = Unification .unify (p1 , p2 );
129+ Maybe <Map <Var , ParsedType >> result = Unification .unify (p1 , p2 );
135130
136131 assertThat (result ).isEqualTo (Maybe .nothing ());
137132 }
138133
139134 @ Test
140135 void substituteVar () throws Exception {
141136 TypeVariable <?> tv = getTypeVariable ();
142- ParsedType . Var var = new ParsedType . Var (tv );
143- ParsedType replacement = new ParsedType . Const (String .class );
137+ Var var = new Var (tv );
138+ ParsedType replacement = new Const (String .class );
144139
145140 ParsedType result = Unification .substitute (Map .of (var , replacement ), var );
146141
@@ -149,7 +144,7 @@ void substituteVar() throws Exception {
149144
150145 @ Test
151146 void substituteConst () {
152- ParsedType type = new ParsedType . Const (String .class );
147+ ParsedType type = new Const (String .class );
153148
154149 ParsedType result = Unification .substitute (Map .of (), type );
155150
@@ -159,48 +154,43 @@ void substituteConst() {
159154 @ Test
160155 void substituteApp () throws Exception {
161156 TypeVariable <?> tv = getTypeVariable ();
162- ParsedType . Var var = new ParsedType . Var (tv );
163- ParsedType replacement = new ParsedType . Const (String .class );
157+ Var var = new Var (tv );
158+ ParsedType replacement = new Const (String .class );
164159
165160 ParsedType result =
166- Unification .substitute (
167- Map .of (var , replacement ), new ParsedType .App (new ParsedType .Const (List .class ), var ));
161+ Unification .substitute (Map .of (var , replacement ), new App (new Const (List .class ), var ));
168162
169- assertThat (result ).isEqualTo (new ParsedType . App (new ParsedType . Const (List .class ), replacement ));
163+ assertThat (result ).isEqualTo (new App (new Const (List .class ), replacement ));
170164 }
171165
172166 @ Test
173167 void substituteArrayOf () throws Exception {
174168 TypeVariable <?> tv = getTypeVariable ();
175- ParsedType . Var var = new ParsedType . Var (tv );
176- ParsedType replacement = new ParsedType . Const (String .class );
169+ Var var = new Var (tv );
170+ ParsedType replacement = new Const (String .class );
177171
178- ParsedType result =
179- Unification .substitute (Map .of (var , replacement ), new ParsedType .ArrayOf (var ));
172+ ParsedType result = Unification .substitute (Map .of (var , replacement ), new ArrayOf (var ));
180173
181- assertThat (result ).isEqualTo (new ParsedType . ArrayOf (replacement ));
174+ assertThat (result ).isEqualTo (new ArrayOf (replacement ));
182175 }
183176
184177 @ Test
185178 void substituteAll () throws Exception {
186179 TypeVariable <?> tv = getTypeVariable ();
187- ParsedType . Var var = new ParsedType . Var (tv );
188- ParsedType replacement = new ParsedType . Const (String .class );
180+ Var var = new Var (tv );
181+ ParsedType replacement = new Const (String .class );
189182
190183 List <ParsedType > result =
191184 Unification .substituteAll (
192185 Map .of (var , replacement ),
193- List .of (
194- var ,
195- new ParsedType .Const (Integer .class ),
196- new ParsedType .App (new ParsedType .Const (List .class ), var )));
186+ List .of (var , new Const (Integer .class ), new App (new Const (List .class ), var )));
197187
198188 assertThat (result )
199189 .isEqualTo (
200190 List .of (
201191 replacement ,
202- new ParsedType . Const (Integer .class ),
203- new ParsedType . App (new ParsedType . Const (List .class ), replacement )));
192+ new Const (Integer .class ),
193+ new App (new Const (List .class ), replacement )));
204194 }
205195
206196 // Helper to get a type variable for testing
0 commit comments