diff options
author | Leo Tenenbaum <pommicket@gmail.com> | 2020-01-24 22:50:50 -0500 |
---|---|---|
committer | Leo Tenenbaum <pommicket@gmail.com> | 2020-01-24 22:50:50 -0500 |
commit | a8e52c1e13a6cea5cf4197393002c0da206a99d4 (patch) | |
tree | ea2f0d314e6d92dd71649de99020cb24bef9bc73 /tests | |
parent | 56464a272cac9e3dfa7d4c702faa23155b3d0134 (diff) |
fixed return declarations
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/arr/test.sh | 2 | ||||
-rw-r--r-- | tests/foreign/expected | 1 | ||||
-rw-r--r-- | tests/foreign/foreign.toc | 32 | ||||
-rw-r--r-- | tests/foreign/got | 1 | ||||
-rwxr-xr-x | tests/foreign/test.sh | 3 | ||||
-rw-r--r-- | tests/params/expected | 15 | ||||
-rw-r--r-- | tests/params/got | 15 | ||||
-rw-r--r-- | tests/params/params.toc | 37 | ||||
-rwxr-xr-x | tests/params/test.sh | 3 | ||||
-rwxr-xr-x | tests/test.sh | 31 |
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 |