]> ocean-lang.org Git - ocean/blobdiff - csrc/oceani-tests.mdc
oceani: exercise more parsing options for blocks.
[ocean] / csrc / oceani-tests.mdc
index 3e2f411dc2ad36f6203ffe12e9f82d063290827e..d2628815b35d190dc8ff70182cb7351a5f2a29ae 100644 (file)
@@ -97,7 +97,7 @@ arguments separated from the name by commas.  For each test, there is a section
                ## valgrind test code
                @[ -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.98) exit(1) }' \
+                        if (ran < (ran + skip) *0.99) exit(1) }' \
                        coverage/oceani.mdc.gcov
 
        coverage_oceani: oceani.c
@@ -221,12 +221,11 @@ Test merging of variables from multiple cases
                print
 
                for i:=0; then i=i+1; while i < 5:
-                       switch i:
-                               case 0: num:="zero"
-                               case 1: num:="one"
-                               case 2: num:="two"
-                               case 3: num:="three"
-                               else    num:="many"
+                       switch { use i }
+                               case 0: num:="zero" ;
+                               case 1: num:="one" ;
+                               case 2 { num:="two" } case 3 { num:="three" }
+                               else  num:="many"
                        // re-declare a CondScope variable
                        num := i*i
                        print num,", ",
@@ -610,6 +609,11 @@ Time to test if structure declarations and accesses work correctly.
                active:Boolean = True
 
        struct baz { a:number; b:Boolean; }
+       struct bat {
+               a:string
+               b:Boolean
+       }
+       struct bat2 a:string; b:Boolean
 
        func main
        do
@@ -630,6 +634,8 @@ Time to test if structure declarations and accesses work correctly.
                for i:=0; then i=i+1; while i < 4:
                        print info[i].name, info[i].active, info[i].size[0]
                info[0].thing.b = True
+               x:bat
+               x.a = "Hello"
 
 ###### output: structs
 
@@ -687,6 +693,22 @@ Test functions.  They don't return anything, so we need to get them to print
                angular := to_polar(32, 23)
                print angular.rho, angular.theta
 
+       func test2(n:number; s:string;) : (ret:number)
+               ret = n + $s
+
+       func random
+       return
+               n:number
+       do
+               n = 4 // xkcd:221
+
+       // exercise the parsing options
+       func t1 (a:number) {
+               print "t1"
+       }
+       func t2 (a:string) {print "string"}
+       func t3() print "t3"
+
 ###### output: functions
        done
        1  done
@@ -922,7 +944,7 @@ various places that `type_err()` are called.
 
        struct foo
                a: number
-               b:string = "hello"
+               b:string = "hello"; d:Boolean
 
        func main()
                c := "hello"
@@ -963,6 +985,12 @@ various places that `type_err()` are called.
 
                x:Boolean = $"42"
 
+               five ::= 5
+               four ::= 4
+               x1:[five]number
+               x2:[four]number
+               x1 = x2
+
 ###### output: type_err3
        .tmp.code:8:12: error: expected number but variable 'c' is string
        .tmp.code:7:8: info: this is where 'c' was set to string
@@ -1001,6 +1029,10 @@ various places that `type_err()` are called.
        .tmp.code:41:29: error: string cannot provide length
        .tmp.code:43:21: error: Can only convert string to number, not Boolean
        .tmp.code:43:8: info: variable 'x' was set as Boolean here.
+       .tmp.code:49:13: error: expected [five]number but variable 'x2' is [four]number
+       .tmp.code:48:8: info: this is where 'x2' was set to [four]number
+       .tmp.code:49:8: error: cannot assign value of type [five]number
+       .tmp.code:47:8: info: variable 'x1' was set as [five]number here.
        oceani: type error in program - not running.
 
 ###### test: type_err4
@@ -1023,10 +1055,12 @@ various places that `type_err()` are called.
                b:string
        struct foo
                c:number
+               x:[5]:string
 
 ###### output: type_err5
        .tmp.code:8:7: error: type already declared: foo
        .tmp.code:2:7: info: this is location of declartion: foo
+       .tmp.code:10:13: Syntax error in struct field: :
        .tmp.code:5:7: error: type has recursive definition: baz
        .tmp.code:2:7: error: type has recursive definition: foo