summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rwxr-xr-xtests/arr/test.sh2
-rw-r--r--tests/foreign/expected1
-rw-r--r--tests/foreign/foreign.toc32
-rw-r--r--tests/foreign/got1
-rwxr-xr-xtests/foreign/test.sh3
-rw-r--r--tests/params/expected15
-rw-r--r--tests/params/got15
-rw-r--r--tests/params/params.toc37
-rwxr-xr-xtests/params/test.sh3
-rwxr-xr-xtests/test.sh31
10 files changed, 124 insertions, 16 deletions
diff --git a/tests/arr/test.sh b/tests/arr/test.sh
index 4977e56..d50fb1a 100755
--- a/tests/arr/test.sh
+++ b/tests/arr/test.sh
@@ -1,3 +1,3 @@
#!/bin/sh
./arr.bin > got || exit 1
-diff got expected > /dev/null || exit 1
+diff got expected || exit 1
diff --git a/tests/foreign/expected b/tests/foreign/expected
new file mode 100644
index 0000000..af5626b
--- /dev/null
+++ b/tests/foreign/expected
@@ -0,0 +1 @@
+Hello, world!
diff --git a/tests/foreign/foreign.toc b/tests/foreign/foreign.toc
new file mode 100644
index 0000000..beaa822
--- /dev/null
+++ b/tests/foreign/foreign.toc
@@ -0,0 +1,32 @@
+voidptr ::= &u8;
+
+getstdout ::= fn() voidptr {
+ #builtin("stdout")
+};
+
+
+fwrite :: fn(voidptr, u64, u64, voidptr) u64 = #foreign "fwrite", "libc.so.6";
+fputc :: fn(i32, voidptr) i32 = #foreign "fputc", "libc.so.6";
+
+writes ::= fn(x : []char) {
+ fwrite(&x[0] as voidptr, 1, x.len as u64, getstdout());
+};
+
+puts ::= fn(x : []char) {
+ writes(x);
+ fputc('\n' as i32, getstdout());
+};
+
+hw ::= fn() int {
+ writes("Hello,");
+ if #builtin("compiling") {
+ writes(" compiling");
+ }
+ puts(" world!");
+ 3
+};
+
+main ::= fn() {
+ hw();
+ x ::= hw();
+}; \ No newline at end of file
diff --git a/tests/foreign/got b/tests/foreign/got
new file mode 100644
index 0000000..af5626b
--- /dev/null
+++ b/tests/foreign/got
@@ -0,0 +1 @@
+Hello, world!
diff --git a/tests/foreign/test.sh b/tests/foreign/test.sh
new file mode 100755
index 0000000..1d6eb8f
--- /dev/null
+++ b/tests/foreign/test.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+./foreign.bin > got || exit 1
+diff got expected || exit 1
diff --git a/tests/params/expected b/tests/params/expected
new file mode 100644
index 0000000..082b847
--- /dev/null
+++ b/tests/params/expected
@@ -0,0 +1,15 @@
+0
+0
+10
+21
+5
+0
+17
+0
+0
+0
+10
+21
+39
+-13
+-13
diff --git a/tests/params/got b/tests/params/got
new file mode 100644
index 0000000..082b847
--- /dev/null
+++ b/tests/params/got
@@ -0,0 +1,15 @@
+0
+0
+10
+21
+5
+0
+17
+0
+0
+0
+10
+21
+39
+-13
+-13
diff --git a/tests/params/params.toc b/tests/params/params.toc
new file mode 100644
index 0000000..3d8800d
--- /dev/null
+++ b/tests/params/params.toc
@@ -0,0 +1,37 @@
+addmul ::= fn (x:=0, y:=0) add := x+y, mul := x*y {
+};
+
+do_foo ::= fn (x := 3) y := x {
+ y *= 12;
+ y += x;
+};
+
+puti ::= fn(x: int) {
+ #C("extern int printf(const char *fmt, ...)");
+ #C("printf(\"%ld\\n\", x)");
+};
+
+
+main ::= fn() {
+ a, m := addmul();
+ puti(a); puti(m);
+ a, m = addmul(7,3);
+ puti(a); puti(m);
+ a, m = addmul(5);
+ puti(a); puti(m);
+ a, m = addmul(y = 17);
+ puti(a); puti(m);
+
+ c, d ::= addmul();
+ puti(c); puti(d);
+ e, f ::= addmul(y = 3, x = 7);
+ puti(e); puti(f);
+
+
+ z := do_foo();
+ puti(z);
+ z = do_foo(-1);
+ puti(z);
+ z = do_foo(x = -1);
+ puti(z);
+}; \ No newline at end of file
diff --git a/tests/params/test.sh b/tests/params/test.sh
new file mode 100755
index 0000000..582bdec
--- /dev/null
+++ b/tests/params/test.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+./params.bin > got || exit 1
+diff got expected || exit 1
diff --git a/tests/test.sh b/tests/test.sh
index 0ac4e1a..ceb6cbe 100755
--- a/tests/test.sh
+++ b/tests/test.sh
@@ -2,28 +2,27 @@
DIR=$(dirname $0)
TOC=$DIR/../toc
CFLAGS="-g -Wno-parentheses-equality"
-if [ "$COMPILERS" = "" ]; then
- COMPILERS="gcc tcc clang"
-fi
-
echo $$
compile() {
- $CC $EXTRA_CFLAGS $CFLAGS -o $DIR/$1/$1.bin $DIR/$1/$1.c || exit 1
+ EXTRA_FLAGS=""
+ if [ "$CC" = "gcc -O0 -g" ]; then
+ EXTRA_FLAGS="-Wno-builtin-declaration-mismatch"
+ elif [ "$CC" = "clang -O3 -s" ]; then
+ EXTRA_FLAGS="-Wno-builtin-requires-header"
+ fi
+ $CC $CFLAGS $EXTRA_FLAGS -o $DIR/$1/$1.bin $DIR/$1/$1.c || exit 1
}
do_tests() {
valgrind -q --exit-on-first-error=yes --error-exitcode=1 $TOC "$DIR/$1/$1.toc" -o "$DIR/$1/$1.c" >/dev/null || exit 1
- for CC in $COMPILERS; do
-
- for EXTRA_CFLAGS in "-O0 -g" "-O3 -s"; do
- printf "Running test $1 with C compiler $CC and flags $EXTRA_CFLAGS... "
- compile "$1"
- cd "$DIR/$1"
- ./test.sh || { printf "\x1b[91mfailed!\x1b[0m\n"; exit 1; }
- printf '\x1b[92mpassed!\x1b[0m\n'
- cd $STARTPWD
- done
+ for CC in "gcc -O0 -g" "tcc" "clang -O3 -s"; do
+ printf "Running test $1 with C compiler $CC... "
+ compile "$1"
+ cd "$DIR/$1"
+ ./test.sh || { printf "\x1b[91mfailed!\x1b[0m\n"; exit 1; }
+ printf '\x1b[92mpassed!\x1b[0m\n'
+ cd $STARTPWD
done
}
@@ -33,3 +32,5 @@ STARTPWD="$(pwd)"
do_tests bf
do_tests arr
do_tests arr2
+do_tests foreign
+do_tests params