Detect cycles in type declarations
[tiger.ml.git] / compiler / src / lib / tiger / tiger_test_cases.ml
index 45a4e1d..082e02f 100644 (file)
@@ -55,21 +55,19 @@ let micro =
           (Some [ID "f"; LPAREN; STRING "a"; COMMA; INT 3; COMMA; ID "foo"; RPAREN])
         ~is_error_expected_semant:(Some Error.is_unknown_id)
     )
-  ; ( let code =
-        "let \
-            type a = int \
-            type b = a \
-            type c = b \
-            var i : a := 2 \
-            var j : c := 3 \
-        in \
-            i := j \
-        end \
-        "
-      in
-      Test.case
+  ; ( Test.case
         "Type aliases"
-        ~code
+        ~code:
+          "let \
+              type a = int \
+              type b = a \
+              type c = b \
+              var i : a := 2 \
+              var j : c := 3 \
+          in \
+              i := j \
+          end \
+          "
     )
   ; ( let code =
         "let \
@@ -88,6 +86,40 @@ let micro =
         (* TODO: Be more specific *)
         ~is_error_expected_semant:(Some Error.is_wrong_type)
     )
+  ; ( Test.case
+        "Recursive type def: int list"
+        ~code:"\
+          let \n\
+            type intlist = {hd: int, tl: intlist} \n\
+            var lst : intlist := intlist {hd=0, tl = nil} \n\
+          in \n\
+            lst \n\
+          end"
+    )
+  ; ( Test.case
+        "Cycle in type dec"
+        ~code:"\
+          let \n\
+            type a = b \n\
+            type b = a \n\
+          in \n\
+          end \
+        "
+        ~is_error_expected_semant:(Some Error.is_cycle_in_type_dec)
+    )
+  ; ( Test.case
+        "Cycle in type dec"
+        ~code:"\
+          let \n\
+            type a = b \n\
+            type b = c \n\
+            type c = a \n\
+            var x : a := 1 \n\
+          in \n\
+          end \
+        "
+        ~is_error_expected_semant:(Some Error.is_cycle_in_type_dec)
+    )
   ]
 
 let book ~dir =
This page took 0.031077 seconds and 4 git commands to generate.