]> ocean-lang.org Git - ocean/blobdiff - csrc/oceani-tests.mdc
oceani-tests: Add testing for --bracket printing.
[ocean] / csrc / oceani-tests.mdc
index e502822eca852eab30e7c320ddc9bb079c862282..6759c542d6d7dd72093a99babcbcd02fafb26173 100644 (file)
@@ -66,6 +66,12 @@ arguments separated from the name by commas.  For each test, there is a section
                    ./oceani --noexec --print .tmp.code1a >> .tmp.code2a || exit 1;\
                    if ! cmp -s .tmp.code1 .tmp.code2a; then \
                       echo " Failed"; diff -u .tmp.code1 .tmp.code2a; exit 1; fi ; \
+                   echo -n "brackets.. "; \
+                   echo '``````' > .tmp.code2b ; echo '``````' > .tmp.code2c ;\
+                   ./oceani --noexec --print --brackets .tmp.code1 >> .tmp.code2b || exit 1; \
+                   ./oceani -npb .tmp.code2b >> .tmp.code2c || exit 1 ; \
+                   if ! cmp -s .tmp.code2b .tmp.code2c; then \
+                       echo " Failed"; diff -u .tmp.code2b .tmp.code2c; exit 1; fi; \
                    echo -n "exec-after-print.. "; \
                    ./oceani .tmp.code1 $${1+"$$@"} > .tmp.have ; \
                    if ! cmp -s .tmp.want .tmp.have; then \
@@ -97,7 +103,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 +227,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,", ",
@@ -296,6 +301,19 @@ Now we need to test if/else and some different loops
                else
                        print 'larger'
 
+               // different parsing options
+               for {
+                       x:=1; sum := 0
+               } then {
+                       x = x + 1
+               } while {
+                       use x < 10 
+               } do {
+                       sum = sum + x
+               } case 1 {
+                       print "impossible"
+               }
+
 ###### output: cond_loop
        Success
         1 2 4 8 16 32 64
@@ -610,6 +628,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 +653,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 +712,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