]> ocean-lang.org Git - ocean/blobdiff - csrc/oceani-tests.mdc
oceani-tests: perform coverage test last.
[ocean] / csrc / oceani-tests.mdc
index 2314ce3ea4d9ec070c7cf23867f04f3072fd71b3..6bc40cba9004457b875c25935e34f84fe35ee5ba 100644 (file)
@@ -78,10 +78,6 @@ arguments separated from the name by commas.  For each test, there is a section
                @for i in coverage/#*.gcda; do mv $$i coverage/$${i##*#}; done
                @gcov -o coverage oceani.mdc > /dev/null 2> /dev/null
                @mv *.gcov coverage ; [ -f .gcov ] && mv .gcov coverage || true
-               @[ -n "$$SKIP_COVERAGE_CHECK" ] || awk '/NOTEST/ { next } /^ *[1-9]/ {ran+=1} /^ *###/ {skip+=1} \
-                   END {printf "coverage: %6.2f%%\n", ran * 100 / (ran + skip); \
-                        if (ran < (ran + skip) *0.968) exit(1) }' \
-                       coverage/oceani.mdc.gcov
                @rm -f .tmp*
 
                @[ -n "$$SKIP_VALGRIND" ] || for T in $(oceani_tests); do \
@@ -96,6 +92,10 @@ arguments separated from the name by commas.  For each test, there is a section
                       echo "valgrind found memory in use at exit"; cat .tmp.valg ; exit 1 ; fi; \
                    echo " passed"; \
                done
+               @[ -n "$$SKIP_COVERAGE_CHECK" ] || awk '/NOTEST/ { next } /^ *[1-9]/ {ran+=1} /^ *###/ {skip+=1} \
+                   END {printf "coverage: %6.2f%%\n", ran * 100 / (ran + skip); \
+                        if (ran < (ran + skip) *0.968) exit(1) }' \
+                       coverage/oceani.mdc.gcov
 
        coverage_oceani: oceani.c
                $(CC) $(CFLAGS) --coverage -fprofile-dir=coverage -o coverage_oceani oceani.c $(LDLIBS)
@@ -616,7 +616,7 @@ Time to test if structure declarations and accesses work correctly.
 Test functions.  They don't return anything, so we need to get them to print
 
 ###### test list
-       oceani_tests += functions
+       oceani_tests += functions func_ret_type
 
 ###### test: functions
 
@@ -630,6 +630,14 @@ Test functions.  They don't return anything, so we need to get them to print
        do
                pass
 
+       func twoarg
+               a:number
+               b:string
+       do
+               while a > 0:
+                       print b
+                       a = a - 1
+
        func test(n:number; s:string)
                if n >= 1:
                        print n,s,
@@ -647,6 +655,34 @@ Test functions.  They don't return anything, so we need to get them to print
        3  2 . 1 .. done
        4  3 . 2 .. 1 ... done
 
+###### test: func_ret_type
+
+       func double(n:number):number
+               use n+n
+
+       func answer
+               prefix:string
+               suffix:string
+       return string
+       do
+               use prefix ++ suffix
+
+       func noarg_returns
+       return Boolean
+       do
+               use 22/7 == 3.14159
+
+       func main()
+               for j:=10; then j = j - 3; while j > -5:
+                       print answer("dou","ble"), j, "is", double(j)
+
+###### output: func_ret_type
+       double 10 is 20
+       double 7 is 14
+       double 4 is 8
+       double 1 is 2
+       double -2 is -4
+
 ## Test code with syntax errors
 
 Syntax errors aren't handled well yet - the result is almost always a
@@ -815,7 +851,6 @@ various places that `type_err()` are called.
                print c.foo
                print bar.c
                print bar.b + 42
-               
 
                // trigger 'labels not permitted' error message
                while 1 if True else False:
@@ -852,7 +887,7 @@ various places that `type_err()` are called.
        .tmp.code:33:14: error: field reference attempted on string, not a struct
        .tmp.code:34:14: error: cannot find requested field in foo
        .tmp.code:35:17: error: have string but need number
-       .tmp.code:39:29: error: expected number (labels not permitted) found Boolean
+       .tmp.code:38:29: error: expected number (labels not permitted) found Boolean
        oceani: type error in program - not running.
 
 ###### test: type_err4
@@ -936,6 +971,10 @@ Test for type errors with functions
        func test2(a:number; b:string; c:[3]Boolean)
                print a, b, c[1]
 
+       func test3()
+               # use undefined names
+               print a, z
+
        func main()
                truth:[3]Boolean
                truth[1] = True
@@ -948,18 +987,28 @@ Test for type errors with functions
                if test1 == test2:
                        pass
 
+       func test4(a:number):string
+               use a * a
+
+       func test5(a:number):string
+               print a
+
 ###### output: func_err_args
-       .tmp.code:11:14: error: insufficient arguments to function.
-       .tmp.code:12:14: error: expected number found string
-       .tmp.code:12:22: error: expected string found number
-       .tmp.code:12:14: error: insufficient arguments to function.
-       .tmp.code:14:17: error: expected string found number
-       .tmp.code:15:14: error: too many arguments to function.
-       .tmp.code:16:14: error: attempt to call a non-function.
-       .tmp.code:16:32: error: expected string found number
-       .tmp.code:16:28: error: insufficient arguments to function.
-       .tmp.code:17:20: error: expected  func but variable 'test2' is  func
+       .tmp.code:28:14: error: expected string, found none
+       .tmp.code:25:8: error: expected string, found number
+       .tmp.code:15:14: error: insufficient arguments to function.
+       .tmp.code:16:14: error: expected number found string
+       .tmp.code:16:22: error: expected string found number
+       .tmp.code:16:14: error: insufficient arguments to function.
+       .tmp.code:18:17: error: expected string found number
+       .tmp.code:19:14: error: too many arguments to function.
+       .tmp.code:20:14: error: attempt to call a non-function.
+       .tmp.code:20:32: error: expected string found number
+       .tmp.code:20:28: error: insufficient arguments to function.
+       .tmp.code:21:20: error: expected  func but variable 'test2' is  func
        .tmp.code:??:??: info: this is where 'NOTVAR' was set to  func
+       .tmp.code:10:14: error: variable used but not declared: a
+       .tmp.code:10:17: error: variable used but not declared: z
        oceani: type error in program - not running.
 
 ###### test: func_err_redeclare