From 19af942889f84a7a25a911827441d09dd8d7853d Mon Sep 17 00:00:00 2001 From: Sam Vervaeck Date: Thu, 8 Sep 2022 23:33:07 +0200 Subject: [PATCH] Define some tests for the type-checker --- src/test/type-inference.md | 71 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/test/type-inference.md diff --git a/src/test/type-inference.md b/src/test/type-inference.md new file mode 100644 index 000000000..606335b0e --- /dev/null +++ b/src/test/type-inference.md @@ -0,0 +1,71 @@ + +## Record types can be unified without causing an error + +``` +struct Person. + email: String + age: Int + +let bert = Person { email = "bar@boo.com", age = 32 } +let bob = Person { email = "boo", age = 43 } + +bert == bob +``` + +## Return types are polymorphic + +``` +let id x = x + +id 1 +id "foo" +id True +``` + +## Nested definitions work + +``` +let foo x. + let bar y z = y + z - x + bar + +foo True +``` + +## Everything that can be type-checked will be type-checked + +``` +let foo n. + let f : String = 1 + return n +``` + +## Recursive definitions do not cause infinite loops in the type-checker + +``` +let fac n = fac_2 n + +let fac_2 n = fac_3 n + fac n + +let fac_3 n = fac_2 (n-1) + +not (fac 1) +``` + +## Example with mutual recursion works + +``` +let is_even x. + if x == 0. + return True + else. + return is_odd (x-1) + +let is_odd x. + if x == 1. + return False + else. + return is_even (x-1) + +not (is_even True) +```