aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMathias Magnusson <mathias@magnusson.space>2025-08-04 23:12:39 +0200
committerMathias Magnusson <mathias@magnusson.space>2025-08-04 23:12:39 +0200
commit392f0c4be0d4c034a4b161337f8f3c5fbf46358a (patch)
tree493cef6315b016e8ec7f9be051be7bb904e16add /tests
parent22f24043755ed320eff8a121aa1b80ede3b3a37f (diff)
downloadhuginn-392f0c4be0d4c034a4b161337f8f3c5fbf46358a.tar.gz
add a little test runnerHEADmain
Diffstat (limited to 'tests')
-rw-r--r--tests/fibonacci.hgn23
-rw-r--r--tests/fibonacci.json7
-rw-r--r--tests/rec_fib.hgn11
-rw-r--r--tests/rec_fib.json7
-rw-r--r--tests/recurse.hgn11
-rw-r--r--tests/recurse.json5
-rw-r--r--tests/ternary.hgn4
-rw-r--r--tests/ternary.json6
-rw-r--r--tests/triangle.hgn10
-rw-r--r--tests/triangle.json4
10 files changed, 88 insertions, 0 deletions
diff --git a/tests/fibonacci.hgn b/tests/fibonacci.hgn
new file mode 100644
index 0000000..f2ea776
--- /dev/null
+++ b/tests/fibonacci.hgn
@@ -0,0 +1,23 @@
+main := proc() {
+ n := read_int(0)
+ fib(n)
+ exit(0)
+}
+
+fib := proc(n) {
+ a := 0
+ b := 1
+ i := 0
+ while i < n {
+ c := a + b
+ a = b
+ b = c
+ i = i + 1
+ }
+ p(a)
+}
+
+p := proc(x) {
+ x2 := x
+ print(x2)
+}
diff --git a/tests/fibonacci.json b/tests/fibonacci.json
new file mode 100644
index 0000000..1be12db
--- /dev/null
+++ b/tests/fibonacci.json
@@ -0,0 +1,7 @@
+[
+ { "stdin": "0\n", "stdout": "0\n" },
+ { "stdin": "1\n", "stdout": "1\n" },
+ { "stdin": "10\n", "stdout": "55\n" },
+ { "stdin": "20\n", "stdout": "6765\n" },
+ { "stdin": "90\n", "stdout": "2880067194370816120\n" }
+]
diff --git a/tests/rec_fib.hgn b/tests/rec_fib.hgn
new file mode 100644
index 0000000..9cbeed8
--- /dev/null
+++ b/tests/rec_fib.hgn
@@ -0,0 +1,11 @@
+main := proc() {
+ n := read_int(0)
+ f := fib(n)
+ print(f)
+ exit(0)
+}
+
+fib := proc(n) {
+ if n < 2 { return n }
+ return fib(n - 2) + fib(n - 1)
+}
diff --git a/tests/rec_fib.json b/tests/rec_fib.json
new file mode 100644
index 0000000..d7b90c6
--- /dev/null
+++ b/tests/rec_fib.json
@@ -0,0 +1,7 @@
+[
+ { "stdin": "0\n", "stdout": "0\n" },
+ { "stdin": "1\n", "stdout": "1\n" },
+ { "stdin": "10\n", "stdout": "55\n" },
+ { "stdin": "20\n", "stdout": "6765\n" },
+ { "stdin": "30\n", "stdout": "832040\n" }
+]
diff --git a/tests/recurse.hgn b/tests/recurse.hgn
new file mode 100644
index 0000000..bf9a0fd
--- /dev/null
+++ b/tests/recurse.hgn
@@ -0,0 +1,11 @@
+main := proc() {
+ print_up_to(read_int(0))
+ exit(0)
+}
+
+print_up_to := proc(n) {
+ print(n)
+ if n > 0 {
+ print_up_to(n - 1)
+ }
+}
diff --git a/tests/recurse.json b/tests/recurse.json
new file mode 100644
index 0000000..ac3f3e6
--- /dev/null
+++ b/tests/recurse.json
@@ -0,0 +1,5 @@
+[
+ { "stdin": "0\n", "stdout": "0\n" },
+ { "stdin": "1\n", "stdout": "1\n0\n" },
+ { "stdin": "10\n", "stdout": "10\n9\n8\n7\n6\n5\n4\n3\n2\n1\n0\n" }
+]
diff --git a/tests/ternary.hgn b/tests/ternary.hgn
new file mode 100644
index 0000000..3740fd8
--- /dev/null
+++ b/tests/ternary.hgn
@@ -0,0 +1,4 @@
+main := proc() {
+ print(if read_int(0) 1 else 2)
+ if 1 exit(0)
+}
diff --git a/tests/ternary.json b/tests/ternary.json
new file mode 100644
index 0000000..ec1213c
--- /dev/null
+++ b/tests/ternary.json
@@ -0,0 +1,6 @@
+[
+ { "stdin": "0\n", "stdout": "2\n" },
+ { "stdin": "1\n", "stdout": "1\n" },
+ { "stdin": "2\n", "stdout": "1\n" },
+ { "stdin": "3\n", "stdout": "1\n" }
+]
diff --git a/tests/triangle.hgn b/tests/triangle.hgn
new file mode 100644
index 0000000..5459c12
--- /dev/null
+++ b/tests/triangle.hgn
@@ -0,0 +1,10 @@
+main := proc() {
+ n := read_int(0)
+ print(triangle(n))
+ exit(0)
+}
+
+triangle := proc(n) {
+ if n == 0 { return 0 }
+ return triangle(n - 1) + n
+}
diff --git a/tests/triangle.json b/tests/triangle.json
new file mode 100644
index 0000000..ff1246c
--- /dev/null
+++ b/tests/triangle.json
@@ -0,0 +1,4 @@
+[
+ { "stdin": "10\n", "stdout": "55\n" },
+ { "stdin": "20\n", "stdout": "210\n" }
+]