@@ -3,7 +3,7 @@ package core
33
44import effekt .core .Type .*
55import effekt .util .messages .{ DebugMessaging , ErrorReporter }
6- import scala . collection . immutable . HashMap
6+ import effekt . util . DB
77
88class TypeInferenceTests extends CoreTests {
99
@@ -87,13 +87,13 @@ class TypeInferenceTests extends CoreTests {
8787 }
8888
8989 test(" compatibility" ) {
90- Free .mergeValues(HashMap .empty, HashMap .empty)
91- Free .mergeValues(HashMap (f -> TInt ), HashMap .empty)
92- Free .mergeValues(HashMap (f -> TInt ), HashMap (f -> TInt ))
93- Free .mergeValues(HashMap (f -> TInt ), HashMap (f -> TInt , g -> TByte ))
90+ Free .mergeValues(DB .empty, DB .empty)
91+ Free .mergeValues(DB (f -> TInt ), DB .empty)
92+ Free .mergeValues(DB (f -> TInt ), DB (f -> TInt ))
93+ Free .mergeValues(DB (f -> TInt ), DB (f -> TInt , g -> TByte ))
9494
9595 intercept[TypeError ] {
96- Free .mergeValues(HashMap (f -> TInt ), HashMap (f -> TBoolean , g -> TByte ))
96+ Free .mergeValues(DB (f -> TInt ), DB (f -> TBoolean , g -> TByte ))
9797 }
9898 }
9999
@@ -113,15 +113,12 @@ class TypeInferenceTests extends CoreTests {
113113 assertEquals(ex1.capt, Set .empty)
114114 assertEquals(ex1.free, Free .value(x, TInt ).withoutValue(x, TInt ))
115115
116- intercept[TypeError ] {
117- Stmt .Val (x,
118- Stmt .Return (Expr .Literal (true , TBoolean )),
119- Stmt .Return (Expr .ValueVar (x, TInt ))).free.wellformed()
120- }
121-
122116 // we can even type check open terms:
123- assertEquals(typecheck(Stmt .Return (Expr .ValueVar (x, TInt ))),
124- Typing (TInt , Set .empty, Free .value(x, TInt )))
117+ val ex2 = Stmt .Return (Expr .ValueVar (x, TInt ))
118+ assertEquals(typecheck(ex2),
119+ Typing (TInt , Set .empty, Constraints .empty))
120+
121+ assertEquals(ex2.free, Free .value(x, TInt ))
125122
126123 val add : Block .BlockVar = Block .BlockVar (infixPlus, BlockType .Function (Nil , Nil , List (TInt , TInt ), Nil , TInt ), Set .empty)
127124
@@ -132,8 +129,7 @@ class TypeInferenceTests extends CoreTests {
132129 val result3 = typecheck(ex3)
133130 assertEquals(result3.tpe, TInt )
134131 assertEquals(result3.capt, Set .empty)
135- assert(result3.free.freeIds == Set (add.id))
136- result3.free.wellformed()
132+ assert(ex3.free.freeIds == Set (add.id))
137133
138134 // [A](Option[A], A): A
139135 val orElse : Block .BlockVar = Block .BlockVar (f, BlockType .Function (A :: Nil , Nil , List (OptionT (ValueType .Var (A )), ValueType .Var (A )), Nil , ValueType .Var (A )), Set .empty)
@@ -143,26 +139,21 @@ class TypeInferenceTests extends CoreTests {
143139 // swapped arguments
144140 intercept[TypeError ] {
145141 val res = typecheck(Expr .PureApp (orElse, TInt :: Nil , Expr .ValueVar (y, TInt ) :: Expr .ValueVar (x, OptionT (TInt )) :: Nil ))
146- res.free.wellformed ()
142+ res.check ()
147143 }
148144 // too few arguments
149145 intercept[TypeError ] {
150146 val res = typecheck(Expr .PureApp (orElse, TInt :: Nil , Expr .ValueVar (x, OptionT (TInt )) :: Nil ))
151- res.free.wellformed()
152- }
153- // incompatible free variables in arguments
154- intercept[TypeError ] {
155- val res = typecheck(Expr .PureApp (orElse, TInt :: Nil , Expr .ValueVar (x, OptionT (TInt )) :: Expr .ValueVar (x, TInt ) :: Nil ))
156- res.free.wellformed()
147+ res.check()
157148 }
158149
159150 val ex4 : Expr .Make = Make (OptionT (TInt ), SomeC , List (), List (Literal (42 , TInt )))
160151 assertSameType(ex4.tpe, OptionT (TInt ))
161- assertEquals(ex4.free, Free .defer (ex4))
152+ assertEquals(ex4.typing.constraints, Vector (ex4))
162153
163154 val ex5 : Expr .Make = Make (OptionT (TInt ), NoneC , List (), List ())
164155 assertSameType(ex5.tpe, OptionT (TInt ))
165- assertEquals(ex5.free, Free .defer (ex5))
156+ assertEquals(ex5.typing.constraints, Vector (ex5))
166157 }
167158
168159 val ex6 = Stmt .Region (Block .BlockLit (Nil , r :: Nil , Nil , BlockParam (r, TRegion , Set (r)) :: Nil ,
@@ -176,6 +167,6 @@ class TypeInferenceTests extends CoreTests {
176167 assertEquals(Type .equals(got, expected), true )
177168
178169 inline def shouldTypeCheckAs (expected : ValueType , expr : Expr )(using DeclarationContext ): Unit =
179- expr.free.wellformed ()
170+ expr.typing.check ()
180171 assertSameType(expr.tpe, expected)
181172}
0 commit comments