aboutsummaryrefslogtreecommitdiffstats
path: root/progs/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'progs/tests/auto')
-rw-r--r--progs/tests/auto/add.sy3
-rw-r--r--progs/tests/auto/advanced_break.sy22
-rw-r--r--progs/tests/auto/advanced_continue.sy22
-rw-r--r--progs/tests/auto/assignment.sy7
-rw-r--r--progs/tests/auto/blob_complex.sy19
-rw-r--r--progs/tests/auto/blob_infer.sy8
-rw-r--r--progs/tests/auto/blob_simple.sy10
-rw-r--r--progs/tests/auto/calls_inside_calls.sy11
-rw-r--r--progs/tests/auto/cluster.sy14
-rw-r--r--progs/tests/auto/compare_constants_equality.sy5
-rw-r--r--progs/tests/auto/compare_constants_unequality.sy5
-rw-r--r--progs/tests/auto/compare_variable.sy9
-rw-r--r--progs/tests/auto/conflict_markers.sy11
-rw-r--r--progs/tests/auto/constant_function.sy4
-rw-r--r--progs/tests/auto/constant_function_closure.sy13
-rw-r--r--progs/tests/auto/constant_function_complex.sy19
-rw-r--r--progs/tests/auto/constants_in_inner_functions.sy20
-rw-r--r--progs/tests/auto/div.sy5
-rw-r--r--progs/tests/auto/else_.sy10
-rw-r--r--progs/tests/auto/else_if.sy12
-rw-r--r--progs/tests/auto/expressions.sy6
-rw-r--r--progs/tests/auto/factorial.sy12
-rw-r--r--progs/tests/auto/field.sy3
-rw-r--r--progs/tests/auto/field_assign.sy5
-rw-r--r--progs/tests/auto/field_get.sy7
-rw-r--r--progs/tests/auto/in_rhs.sy3
-rw-r--r--progs/tests/auto/instantiate.sy5
-rw-r--r--progs/tests/auto/invalid_assign.sy7
-rw-r--r--progs/tests/auto/more_types.sy4
-rw-r--r--progs/tests/auto/mul.sy3
-rw-r--r--progs/tests/auto/multiple_fields.sy11
-rw-r--r--progs/tests/auto/multiple_returns.sy12
-rw-r--r--progs/tests/auto/negation.sy7
-rw-r--r--progs/tests/auto/not.sy5
-rw-r--r--progs/tests/auto/one_arg.sy5
-rw-r--r--progs/tests/auto/param_1.sy4
-rw-r--r--progs/tests/auto/param_2.sy7
-rw-r--r--progs/tests/auto/param_and_return.sy7
-rw-r--r--progs/tests/auto/parenthesis.sy3
-rw-r--r--progs/tests/auto/passing_functions.sy9
-rw-r--r--progs/tests/auto/passing_functions_mixed.sy9
-rw-r--r--progs/tests/auto/precedence.sy8
-rw-r--r--progs/tests/auto/return_1.sy6
-rw-r--r--progs/tests/auto/returning_closures.sy24
-rw-r--r--progs/tests/auto/simple.sy10
-rw-r--r--progs/tests/auto/simple_add.sy9
-rw-r--r--progs/tests/auto/simple_break.sy12
-rw-r--r--progs/tests/auto/simple_continue.sy12
-rw-r--r--progs/tests/auto/simple_sub.sy9
-rw-r--r--progs/tests/auto/simplest.sy4
-rw-r--r--progs/tests/auto/single_variable.sy4
-rw-r--r--progs/tests/auto/stack_ordering.sy6
-rw-r--r--progs/tests/auto/strange.sy15
-rw-r--r--progs/tests/auto/sub.sy3
-rw-r--r--progs/tests/auto/terms_and_factors.sy4
-rw-r--r--progs/tests/auto/three_arg.sy5
-rw-r--r--progs/tests/auto/two_arg.sy5
-rw-r--r--progs/tests/auto/two_variables.sy6
-rw-r--r--progs/tests/auto/types.sy4
-rw-r--r--progs/tests/auto/uncallable_type.sy9
-rw-r--r--progs/tests/auto/wrong_params.sy7
-rw-r--r--progs/tests/auto/wrong_ret.sy7
62 files changed, 532 insertions, 0 deletions
diff --git a/progs/tests/auto/add.sy b/progs/tests/auto/add.sy
new file mode 100644
index 0000000..4e8e643
--- /dev/null
+++ b/progs/tests/auto/add.sy
@@ -0,0 +1,3 @@
+start :: fn {
+(1, 2, 3, 4) + (4, 3, 2, 1) <=> (5, 5, 5, 5)
+}
diff --git a/progs/tests/auto/advanced_break.sy b/progs/tests/auto/advanced_break.sy
new file mode 100644
index 0000000..1cfcece
--- /dev/null
+++ b/progs/tests/auto/advanced_break.sy
@@ -0,0 +1,22 @@
+start :: fn {
+
+a := 0
+for i := 0, i < 10, i += 1 {
+ q := 0
+ qq := 0
+ qqq := 0
+ qqqq := 0
+
+ a = a + 1
+ if i == 2 {
+ break
+ }
+
+ q
+ qq
+ qqq
+ qqqq
+}
+a <=> 3
+
+}
diff --git a/progs/tests/auto/advanced_continue.sy b/progs/tests/auto/advanced_continue.sy
new file mode 100644
index 0000000..70a8671
--- /dev/null
+++ b/progs/tests/auto/advanced_continue.sy
@@ -0,0 +1,22 @@
+start :: fn {
+
+a := 0
+for i := 0, i < 4, i += 1 {
+ q := 0
+ qq := 0
+ qqq := 0
+ qqqq := 0
+
+ if i == 2 {
+ continue
+ }
+ a = a + 1
+
+ q
+ qq
+ qqq
+ qqqq
+}
+a <=> 3
+
+}
diff --git a/progs/tests/auto/assignment.sy b/progs/tests/auto/assignment.sy
new file mode 100644
index 0000000..51cbecc
--- /dev/null
+++ b/progs/tests/auto/assignment.sy
@@ -0,0 +1,7 @@
+start :: fn {
+a := 1
+ b := 2
+ a = b
+ a <=> 2
+ b <=> 2
+}
diff --git a/progs/tests/auto/blob_complex.sy b/progs/tests/auto/blob_complex.sy
new file mode 100644
index 0000000..d40082f
--- /dev/null
+++ b/progs/tests/auto/blob_complex.sy
@@ -0,0 +1,19 @@
+start :: fn {
+
+a := A()
+b := B()
+c := C()
+b2 := B()
+
+a
+b
+c
+b2
+
+blob A {
+ c: C
+}
+blob C { }
+blob B { }
+
+}
diff --git a/progs/tests/auto/blob_infer.sy b/progs/tests/auto/blob_infer.sy
new file mode 100644
index 0000000..cee18bf
--- /dev/null
+++ b/progs/tests/auto/blob_infer.sy
@@ -0,0 +1,8 @@
+start :: fn {
+
+blob A { }
+
+a : A = A()
+a
+
+}
diff --git a/progs/tests/auto/blob_simple.sy b/progs/tests/auto/blob_simple.sy
new file mode 100644
index 0000000..f05ec07
--- /dev/null
+++ b/progs/tests/auto/blob_simple.sy
@@ -0,0 +1,10 @@
+start :: fn {
+
+a := A()
+a
+
+blob A {
+ a: int
+}
+
+}
diff --git a/progs/tests/auto/calls_inside_calls.sy b/progs/tests/auto/calls_inside_calls.sy
new file mode 100644
index 0000000..578f418
--- /dev/null
+++ b/progs/tests/auto/calls_inside_calls.sy
@@ -0,0 +1,11 @@
+start :: fn {
+one := fn -> int {
+ ret 1
+ }
+ add := fn a: int, b: int -> int {
+ ret a + b
+ }
+ add(one(), one()) <=> 2
+ add(add(one(), one()), one()) <=> 3
+ add(one(), add(one(), one())) <=> 3
+}
diff --git a/progs/tests/auto/cluster.sy b/progs/tests/auto/cluster.sy
new file mode 100644
index 0000000..8f279e7
--- /dev/null
+++ b/progs/tests/auto/cluster.sy
@@ -0,0 +1,14 @@
+start :: fn {
+
+blob A { a: int }
+a := A()
+a.a = 0
+a.a += 1
+a.a <=> 1
+a.a *= 2
+a.a <=> 2
+a.a /= 2
+a.a <=> 1
+a.a -= 1
+a.a <=> 0
+}
diff --git a/progs/tests/auto/compare_constants_equality.sy b/progs/tests/auto/compare_constants_equality.sy
new file mode 100644
index 0000000..c8c399b
--- /dev/null
+++ b/progs/tests/auto/compare_constants_equality.sy
@@ -0,0 +1,5 @@
+start :: fn {
+if 1 == 2 {
+ <!>
+ }
+}
diff --git a/progs/tests/auto/compare_constants_unequality.sy b/progs/tests/auto/compare_constants_unequality.sy
new file mode 100644
index 0000000..8c115b4
--- /dev/null
+++ b/progs/tests/auto/compare_constants_unequality.sy
@@ -0,0 +1,5 @@
+start :: fn {
+if 1 != 1 {
+ <!>
+ }
+}
diff --git a/progs/tests/auto/compare_variable.sy b/progs/tests/auto/compare_variable.sy
new file mode 100644
index 0000000..25d21f4
--- /dev/null
+++ b/progs/tests/auto/compare_variable.sy
@@ -0,0 +1,9 @@
+start :: fn {
+a := 1
+ if a == 0 {
+ <!>
+ }
+ if a != 1 {
+ <!>
+ }
+}
diff --git a/progs/tests/auto/conflict_markers.sy b/progs/tests/auto/conflict_markers.sy
new file mode 100644
index 0000000..715a859
--- /dev/null
+++ b/progs/tests/auto/conflict_markers.sy
@@ -0,0 +1,11 @@
+start :: fn {
+
+<<<<<<< HEAD
+print extern_test(4.0)
+=======
+print extern_test(5.0)
+>>>>>>> 2
+
+}
+
+// errors: [ErrorKind::SyntaxError(_, _), ErrorKind::GitConflictError(2, 6)]
diff --git a/progs/tests/auto/constant_function.sy b/progs/tests/auto/constant_function.sy
new file mode 100644
index 0000000..2ec4019
--- /dev/null
+++ b/progs/tests/auto/constant_function.sy
@@ -0,0 +1,4 @@
+a :: fn {}
+start :: fn {
+ a()
+}
diff --git a/progs/tests/auto/constant_function_closure.sy b/progs/tests/auto/constant_function_closure.sy
new file mode 100644
index 0000000..8c54249
--- /dev/null
+++ b/progs/tests/auto/constant_function_closure.sy
@@ -0,0 +1,13 @@
+q := 1
+
+f :: fn -> int {
+ q += 1
+ ret q
+}
+
+start :: fn {
+ f() <=> 2
+ f() <=> 3
+ f() <=> 4
+ f() <=> 5
+}
diff --git a/progs/tests/auto/constant_function_complex.sy b/progs/tests/auto/constant_function_complex.sy
new file mode 100644
index 0000000..6a60ebe
--- /dev/null
+++ b/progs/tests/auto/constant_function_complex.sy
@@ -0,0 +1,19 @@
+h :: fn -> int {
+ ret 3
+}
+
+k :: fn -> int {
+ ret h()
+}
+
+a :: fn -> int {
+ ret q()
+}
+
+q :: fn -> int {
+ ret k()
+}
+
+start :: fn {
+ a() <=> 3
+}
diff --git a/progs/tests/auto/constants_in_inner_functions.sy b/progs/tests/auto/constants_in_inner_functions.sy
new file mode 100644
index 0000000..3371393
--- /dev/null
+++ b/progs/tests/auto/constants_in_inner_functions.sy
@@ -0,0 +1,20 @@
+start :: fn {
+
+q : int = 0
+
+f :: fn -> fn -> {
+ g :: fn {
+ q += 1
+ }
+ ret g
+}
+
+g := f()
+g()
+q <=> 1
+g()
+q <=> 2
+g()
+q <=> 3
+
+}
diff --git a/progs/tests/auto/div.sy b/progs/tests/auto/div.sy
new file mode 100644
index 0000000..3073270
--- /dev/null
+++ b/progs/tests/auto/div.sy
@@ -0,0 +1,5 @@
+start :: fn {
+a := 2
+a /= 2
+a <=> 1
+}
diff --git a/progs/tests/auto/else_.sy b/progs/tests/auto/else_.sy
new file mode 100644
index 0000000..896aeb4
--- /dev/null
+++ b/progs/tests/auto/else_.sy
@@ -0,0 +1,10 @@
+start :: fn {
+a := 1
+ res := 0
+ if a == 0 {
+ <!>
+ } else {
+ res = 1
+ }
+ res <=> 1
+}
diff --git a/progs/tests/auto/else_if.sy b/progs/tests/auto/else_if.sy
new file mode 100644
index 0000000..18b64f6
--- /dev/null
+++ b/progs/tests/auto/else_if.sy
@@ -0,0 +1,12 @@
+start :: fn {
+a := 1
+ res := 0
+ if a == 0 {
+ <!>
+ } else if a == 1 {
+ res = 1
+ } else {
+ <!>
+ }
+ res <=> 1
+}
diff --git a/progs/tests/auto/expressions.sy b/progs/tests/auto/expressions.sy
new file mode 100644
index 0000000..0f6d6fc
--- /dev/null
+++ b/progs/tests/auto/expressions.sy
@@ -0,0 +1,6 @@
+start :: fn {
+1 + 1 // blargh
+ 2 // blargh
+ // HARGH
+
+}
diff --git a/progs/tests/auto/factorial.sy b/progs/tests/auto/factorial.sy
new file mode 100644
index 0000000..770bc33
--- /dev/null
+++ b/progs/tests/auto/factorial.sy
@@ -0,0 +1,12 @@
+factorial :: fn n: int -> int {
+ if n <= 1 {
+ ret 1
+ }
+ ret n * factorial(n - 1)
+}
+
+start :: fn {
+ factorial(5) <=> 120
+ factorial(6) <=> 720
+ factorial(12) <=> 479001600
+}
diff --git a/progs/tests/auto/field.sy b/progs/tests/auto/field.sy
new file mode 100644
index 0000000..c985297
--- /dev/null
+++ b/progs/tests/auto/field.sy
@@ -0,0 +1,3 @@
+start :: fn {
+blob A { a: int }
+}
diff --git a/progs/tests/auto/field_assign.sy b/progs/tests/auto/field_assign.sy
new file mode 100644
index 0000000..93837ea
--- /dev/null
+++ b/progs/tests/auto/field_assign.sy
@@ -0,0 +1,5 @@
+start :: fn {
+blob A { a: int }
+ a := A()
+ a.a = 2
+}
diff --git a/progs/tests/auto/field_get.sy b/progs/tests/auto/field_get.sy
new file mode 100644
index 0000000..0905f6f
--- /dev/null
+++ b/progs/tests/auto/field_get.sy
@@ -0,0 +1,7 @@
+start :: fn {
+blob A { a: int }
+ a := A()
+ a.a = 2
+ a.a <=> 2
+ 2 <=> a.a
+}
diff --git a/progs/tests/auto/in_rhs.sy b/progs/tests/auto/in_rhs.sy
new file mode 100644
index 0000000..60e4873
--- /dev/null
+++ b/progs/tests/auto/in_rhs.sy
@@ -0,0 +1,3 @@
+start :: fn {
+5 <=> 1 * 2 + 3
+}
diff --git a/progs/tests/auto/instantiate.sy b/progs/tests/auto/instantiate.sy
new file mode 100644
index 0000000..7d32bf9
--- /dev/null
+++ b/progs/tests/auto/instantiate.sy
@@ -0,0 +1,5 @@
+start :: fn {
+blob A {}
+ a := A()
+ a
+}
diff --git a/progs/tests/auto/invalid_assign.sy b/progs/tests/auto/invalid_assign.sy
new file mode 100644
index 0000000..a8b18f0
--- /dev/null
+++ b/progs/tests/auto/invalid_assign.sy
@@ -0,0 +1,7 @@
+start :: fn {
+a := 1
+a = 0.1
+a
+}
+
+// errors: [ErrorKind::TypeMismatch(Type::Int, Type::Float)]
diff --git a/progs/tests/auto/more_types.sy b/progs/tests/auto/more_types.sy
new file mode 100644
index 0000000..18d825e
--- /dev/null
+++ b/progs/tests/auto/more_types.sy
@@ -0,0 +1,4 @@
+start :: fn {
+a: (str, bool, int) = ("abc", true, 1)
+a
+}
diff --git a/progs/tests/auto/mul.sy b/progs/tests/auto/mul.sy
new file mode 100644
index 0000000..78cc14e
--- /dev/null
+++ b/progs/tests/auto/mul.sy
@@ -0,0 +1,3 @@
+start :: fn {
+(0, 1, 2) * (2, 3, 4) <=> (0, 3, 8)
+}
diff --git a/progs/tests/auto/multiple_fields.sy b/progs/tests/auto/multiple_fields.sy
new file mode 100644
index 0000000..2a4b3c0
--- /dev/null
+++ b/progs/tests/auto/multiple_fields.sy
@@ -0,0 +1,11 @@
+start :: fn {
+blob A {
+ a: int
+ b: int
+ }
+ a := A()
+ a.a = 2
+ a.b = 3
+ a.a + a.b <=> 5
+ 5 <=> a.a + a.b
+}
diff --git a/progs/tests/auto/multiple_returns.sy b/progs/tests/auto/multiple_returns.sy
new file mode 100644
index 0000000..8abc000
--- /dev/null
+++ b/progs/tests/auto/multiple_returns.sy
@@ -0,0 +1,12 @@
+start :: fn {
+f := fn a: int -> int {
+ if a == 1 {
+ ret 2
+ } else {
+ ret 3
+ }
+ }
+ f(0) <=> 3
+ f(1) <=> 2
+ f(2) <=> 3
+}
diff --git a/progs/tests/auto/negation.sy b/progs/tests/auto/negation.sy
new file mode 100644
index 0000000..41388d8
--- /dev/null
+++ b/progs/tests/auto/negation.sy
@@ -0,0 +1,7 @@
+start :: fn {
+-1 <=> 0 - 1
+ -1 + 2 <=> 1
+ -(1 + 2) <=> -3
+ 1 + -1 <=> 0
+ 2 * -1 <=> -2
+}
diff --git a/progs/tests/auto/not.sy b/progs/tests/auto/not.sy
new file mode 100644
index 0000000..712690a
--- /dev/null
+++ b/progs/tests/auto/not.sy
@@ -0,0 +1,5 @@
+start :: fn {
+f := fn {}
+ f!
+
+}
diff --git a/progs/tests/auto/one_arg.sy b/progs/tests/auto/one_arg.sy
new file mode 100644
index 0000000..9523a67
--- /dev/null
+++ b/progs/tests/auto/one_arg.sy
@@ -0,0 +1,5 @@
+start :: fn {
+f := fn a:int { a <=> 1 }
+ f! 1
+
+}
diff --git a/progs/tests/auto/param_1.sy b/progs/tests/auto/param_1.sy
new file mode 100644
index 0000000..1781eaf
--- /dev/null
+++ b/progs/tests/auto/param_1.sy
@@ -0,0 +1,4 @@
+start :: fn {
+f := fn a: int {}
+ f(1)
+}
diff --git a/progs/tests/auto/param_2.sy b/progs/tests/auto/param_2.sy
new file mode 100644
index 0000000..ac5fdfd
--- /dev/null
+++ b/progs/tests/auto/param_2.sy
@@ -0,0 +1,7 @@
+start :: fn {
+add := fn a: int, b: int -> int {
+ ret a + b
+ }
+ add(1, 1) <=> 2
+ add(10, 20) <=> 30
+}
diff --git a/progs/tests/auto/param_and_return.sy b/progs/tests/auto/param_and_return.sy
new file mode 100644
index 0000000..7e39775
--- /dev/null
+++ b/progs/tests/auto/param_and_return.sy
@@ -0,0 +1,7 @@
+start :: fn {
+f := fn a: int -> int {
+ ret a * 2
+ }
+ f(1) <=> 2
+ f(5) <=> 10
+}
diff --git a/progs/tests/auto/parenthesis.sy b/progs/tests/auto/parenthesis.sy
new file mode 100644
index 0000000..b456769
--- /dev/null
+++ b/progs/tests/auto/parenthesis.sy
@@ -0,0 +1,3 @@
+start :: fn {
+(1 + 2) * 3 <=> 9
+}
diff --git a/progs/tests/auto/passing_functions.sy b/progs/tests/auto/passing_functions.sy
new file mode 100644
index 0000000..d1ff70e
--- /dev/null
+++ b/progs/tests/auto/passing_functions.sy
@@ -0,0 +1,9 @@
+start :: fn {
+g := fn -> int {
+ ret 1
+ }
+ f := fn inner: fn -> int -> int {
+ ret inner()
+ }
+ f(g) <=> 1
+}
diff --git a/progs/tests/auto/passing_functions_mixed.sy b/progs/tests/auto/passing_functions_mixed.sy
new file mode 100644
index 0000000..292e7ce
--- /dev/null
+++ b/progs/tests/auto/passing_functions_mixed.sy
@@ -0,0 +1,9 @@
+start :: fn {
+g := fn a: int -> int {
+ ret a * 2
+ }
+ f := fn inner: fn int -> int, a: int -> int {
+ ret inner(a)
+ }
+ f(g, 2) <=> 4
+}
diff --git a/progs/tests/auto/precedence.sy b/progs/tests/auto/precedence.sy
new file mode 100644
index 0000000..0aee658
--- /dev/null
+++ b/progs/tests/auto/precedence.sy
@@ -0,0 +1,8 @@
+start :: fn {
+f := fn a: int, b: int -> int {
+ ret a + b
+ }
+ 1 + f(2, 3) <=> 6
+ 2 * f(2, 3) <=> 10
+ f(2, 3) - (2 + 3) <=> 0
+}
diff --git a/progs/tests/auto/return_1.sy b/progs/tests/auto/return_1.sy
new file mode 100644
index 0000000..993f9fd
--- /dev/null
+++ b/progs/tests/auto/return_1.sy
@@ -0,0 +1,6 @@
+start :: fn {
+f := fn -> int {
+ ret 1
+ }
+ f() <=> 1
+}
diff --git a/progs/tests/auto/returning_closures.sy b/progs/tests/auto/returning_closures.sy
new file mode 100644
index 0000000..1c4c091
--- /dev/null
+++ b/progs/tests/auto/returning_closures.sy
@@ -0,0 +1,24 @@
+start :: fn {
+
+f : fn -> fn -> int = fn -> fn -> int {
+ x : int = 0
+ f := fn -> int {
+ x = x + 1
+ ret x
+ }
+ f() <=> 1
+ ret f
+}
+
+a := f()
+b := f()
+
+a() <=> 2
+a() <=> 3
+
+b() <=> 2
+b() <=> 3
+
+a() <=> 4
+
+}
diff --git a/progs/tests/auto/simple.sy b/progs/tests/auto/simple.sy
new file mode 100644
index 0000000..436dcae
--- /dev/null
+++ b/progs/tests/auto/simple.sy
@@ -0,0 +1,10 @@
+start :: fn {
+
+a :: 1
+a <=> 1
+b := 2
+{
+ a <=> 1
+ b <=> 2
+}
+}
diff --git a/progs/tests/auto/simple_add.sy b/progs/tests/auto/simple_add.sy
new file mode 100644
index 0000000..f1952d3
--- /dev/null
+++ b/progs/tests/auto/simple_add.sy
@@ -0,0 +1,9 @@
+start :: fn {
+
+a := 0
+b := 99999
+a += 1
+a <=> 1
+b <=> 99999
+
+}
diff --git a/progs/tests/auto/simple_break.sy b/progs/tests/auto/simple_break.sy
new file mode 100644
index 0000000..11c06ad
--- /dev/null
+++ b/progs/tests/auto/simple_break.sy
@@ -0,0 +1,12 @@
+start :: fn {
+
+a := 0
+for i := 0, i < 10, i += 1 {
+ a = a + 1
+ if i == 2 {
+ break
+ }
+}
+a <=> 3
+
+}
diff --git a/progs/tests/auto/simple_continue.sy b/progs/tests/auto/simple_continue.sy
new file mode 100644
index 0000000..ac2bf81
--- /dev/null
+++ b/progs/tests/auto/simple_continue.sy
@@ -0,0 +1,12 @@
+start :: fn {
+
+a := 0
+for i := 0, i < 4, i += 1 {
+ if i == 2 {
+ continue
+ }
+ a = a + 1
+}
+a <=> 3
+
+}
diff --git a/progs/tests/auto/simple_sub.sy b/progs/tests/auto/simple_sub.sy
new file mode 100644
index 0000000..5dad340
--- /dev/null
+++ b/progs/tests/auto/simple_sub.sy
@@ -0,0 +1,9 @@
+start :: fn {
+
+a := 0
+b := 99999
+a -= 1
+a <=> -1
+b <=> 99999
+
+}
diff --git a/progs/tests/auto/simplest.sy b/progs/tests/auto/simplest.sy
new file mode 100644
index 0000000..5669dc0
--- /dev/null
+++ b/progs/tests/auto/simplest.sy
@@ -0,0 +1,4 @@
+start :: fn {
+f := fn {}
+ f()
+}
diff --git a/progs/tests/auto/single_variable.sy b/progs/tests/auto/single_variable.sy
new file mode 100644
index 0000000..00217d2
--- /dev/null
+++ b/progs/tests/auto/single_variable.sy
@@ -0,0 +1,4 @@
+start :: fn {
+a := 1
+ a <=> 1
+}
diff --git a/progs/tests/auto/stack_ordering.sy b/progs/tests/auto/stack_ordering.sy
new file mode 100644
index 0000000..85a36bd
--- /dev/null
+++ b/progs/tests/auto/stack_ordering.sy
@@ -0,0 +1,6 @@
+start :: fn {
+a := 1
+ b := 2
+ b <=> 2
+ a <=> 1
+}
diff --git a/progs/tests/auto/strange.sy b/progs/tests/auto/strange.sy
new file mode 100644
index 0000000..c495041
--- /dev/null
+++ b/progs/tests/auto/strange.sy
@@ -0,0 +1,15 @@
+start :: fn {
+
+a := 0
+{
+ b := 99999
+ {
+ a := 99999
+ a
+ }
+ b
+ a -= 1
+}
+a <=> -1
+
+}
diff --git a/progs/tests/auto/sub.sy b/progs/tests/auto/sub.sy
new file mode 100644
index 0000000..755ae67
--- /dev/null
+++ b/progs/tests/auto/sub.sy
@@ -0,0 +1,3 @@
+start :: fn {
+(1, -2, 3, -4) - (4, 3, -2, -1) <=> (-3, 1, 1, -5)
+}
diff --git a/progs/tests/auto/terms_and_factors.sy b/progs/tests/auto/terms_and_factors.sy
new file mode 100644
index 0000000..1fef724
--- /dev/null
+++ b/progs/tests/auto/terms_and_factors.sy
@@ -0,0 +1,4 @@
+start :: fn {
+1 + 1 * 2 <=> 3
+ 1 * 2 + 3 <=> 5
+}
diff --git a/progs/tests/auto/three_arg.sy b/progs/tests/auto/three_arg.sy
new file mode 100644
index 0000000..d948fa0
--- /dev/null
+++ b/progs/tests/auto/three_arg.sy
@@ -0,0 +1,5 @@
+start :: fn {
+f := fn a:int, b:int, c:int { c <=> 13 }
+ f! 1, 1 + 2, 1 + 4 * 3
+
+}
diff --git a/progs/tests/auto/two_arg.sy b/progs/tests/auto/two_arg.sy
new file mode 100644
index 0000000..60645b5
--- /dev/null
+++ b/progs/tests/auto/two_arg.sy
@@ -0,0 +1,5 @@
+start :: fn {
+f := fn a:int, b:int { b <=> 3 }
+ f! 1, 1 + 2
+
+}
diff --git a/progs/tests/auto/two_variables.sy b/progs/tests/auto/two_variables.sy
new file mode 100644
index 0000000..9ae183f
--- /dev/null
+++ b/progs/tests/auto/two_variables.sy
@@ -0,0 +1,6 @@
+start :: fn {
+a := 1
+ b := 2
+ a <=> 1
+ b <=> 2
+}
diff --git a/progs/tests/auto/types.sy b/progs/tests/auto/types.sy
new file mode 100644
index 0000000..c045b34
--- /dev/null
+++ b/progs/tests/auto/types.sy
@@ -0,0 +1,4 @@
+start :: fn {
+a: (int, float, int) = (1, 1., 1)
+a
+}
diff --git a/progs/tests/auto/uncallable_type.sy b/progs/tests/auto/uncallable_type.sy
new file mode 100644
index 0000000..06ff71a
--- /dev/null
+++ b/progs/tests/auto/uncallable_type.sy
@@ -0,0 +1,9 @@
+start :: fn {
+
+ f := fn i: int {
+ i()
+ }
+ f
+}
+
+// errors: [ErrorKind::InvalidProgram]
diff --git a/progs/tests/auto/wrong_params.sy b/progs/tests/auto/wrong_params.sy
new file mode 100644
index 0000000..6b56e90
--- /dev/null
+++ b/progs/tests/auto/wrong_params.sy
@@ -0,0 +1,7 @@
+start :: fn {
+
+ f : fn -> int = fn a: int -> int {}
+f
+}
+
+// errors: [ErrorKind::TypeMismatch(_, _), ErrorKind::TypeMismatch(Type::Void, Type::Int)]
diff --git a/progs/tests/auto/wrong_ret.sy b/progs/tests/auto/wrong_ret.sy
new file mode 100644
index 0000000..81f2517
--- /dev/null
+++ b/progs/tests/auto/wrong_ret.sy
@@ -0,0 +1,7 @@
+start :: fn {
+
+ f : fn -> int = fn {}
+f
+}
+
+// errors: [ErrorKind::TypeMismatch(_, _)]