X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=blobdiff_plain;f=csrc%2Foceani-tests.mdc;h=dccfb2a47bc2bdb50f7f3a39e7c3adf09ccf1b01;hp=11c3f19ffcd93a4c8760d9cbe85a3505befd46ae;hb=84f4783c47a0fcb74b7f46d3ff96fe8a3ad1b278;hpb=85e747e065a6f4b2236acc8b3a2471de4d831c95 diff --git a/csrc/oceani-tests.mdc b/csrc/oceani-tests.mdc index 11c3f19..dccfb2a 100644 --- a/csrc/oceani-tests.mdc +++ b/csrc/oceani-tests.mdc @@ -80,7 +80,7 @@ arguments separated from the name by commas. For each test, there is a section @mv *.gcov coverage ; [ -f .gcov ] && mv .gcov coverage || true @ awk '/NOTEST/ { next } /^ *[1-9]/ {ran+=1} /^ *###/ {skip+=1} \ END {printf "coverage: %6.2f%%\n", ran * 100 / (ran + skip); \ - if (ran < (ran + skip) *0.9495) exit(1) }' \ + if (ran < (ran + skip) *0.959) exit(1) }' \ coverage/oceani.mdc.gcov @rm -f .tmp* @@ -110,7 +110,9 @@ calculations on them. ###### test: valvar - program: + func main + argv:[argc::]string + do a := 23; b:=12 ; b1 := -b print a, b, a+b, a-b, a*b, a/b, a%b print ab, a>=b, a 0 and b > 0: while a != b: if a < b: @@ -363,18 +374,20 @@ Here I break it into two parts, keeping the array code separate. else hi = mid if hi - lo < 1: + lo = mid use GiveUp use True do pass case Found: print "Yay, I found", target case GiveUp: - print "Closest I found was", mid + print "Closest I found was", lo ###### output: sayhello,55,33,hello,True Hello World, what lovely oceans you have! Is 55 bigger than 33 ? yes double 33 is 66 + still yes GCD of 55 and 33 is 11 Fibonacci: 1 1 2 3 5 8 13 21 34 55 89 144 hello was the str @@ -384,6 +397,7 @@ Here I break it into two parts, keeping the array code separate. Hello World, what lovely oceans you have! Is 12 bigger than 60 ? no double 60 is 120 + still no GCD of 12 and 60 is 12 Fibonacci: 1 1 2 3 5 8 13 21 34 55 89 144 I found the str over there @@ -392,7 +406,7 @@ Here I break it into two parts, keeping the array code separate. ###### test list oceani_tests += "insert_sort" ###### test: insert_sort - program: + func main() size::=55 list:[size]number list[0] = 1_234 @@ -538,7 +552,7 @@ ad-hoc things array related. ###### test: arrays - program: + func main() bools:[5]Boolean strings:[4]string @@ -573,7 +587,8 @@ Time to test if structure declarations and accesses work correctly. struct baz { a:number; b:Boolean; } - program: + func main + do info:[4]foo for i:=0; then i=i+1; while i < 4: @@ -634,14 +649,14 @@ separate file first, then run from there. ###### test: syn1 - program: + func main() if then else while do ###### output: syn1 .tmp.code:3:11: Syntax error in statement: then ###### test: tokerr - program: + func main() a := 1i // imaginary numbers aren't understood b:[2i]number // array sizes are handled separately c:[3.14159]Boolean // array sizes must be integers @@ -691,7 +706,7 @@ various places that `type_err()` are called. ###### test: type_err1 - program: + func main() print "hello" ++ 5, 5 ++ "hello" b ::= 3 @@ -711,7 +726,7 @@ various places that `type_err()` are called. ###### test: type_err2 - program: + func main() a := 1 a := 2 a ::= 3 @@ -736,7 +751,7 @@ various places that `type_err()` are called. a: number b:string = "hello" - program: + func main() c := "hello" c = c + 1 c = "hello" ++ (True and False) @@ -765,6 +780,13 @@ various places that `type_err()` are called. foo.c = 43 print c.foo print bar.c + print bar.b + 42 + + + // trigger 'labels not permitted' error message + while 1 if True else False: + print + case 2: print "two" ###### output: type_err3 .tmp.code:8:12: error: expected number but variable 'c' is string @@ -795,10 +817,12 @@ various places that `type_err()` are called. .tmp.code:32:16: error: expected none found number .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 oceani: type error in program - not running. ###### test: type_err4 - program: + func main() a:=1; b=2; c::=3 print a, b, c @@ -817,22 +841,30 @@ various places that `type_err()` are called. bar ::= "string" + 56 const bar ::= "baz" - program: + func main() foo := 4 print foo, bar + // trigger duplicate-main error + func main() + foo := 6 + print bar, foo + ###### output: type_err_const .tmp.code:4:16: error: expected number found string .tmp.code:6:8: error: name already declared: bar .tmp.code:4:8: info: this is where 'bar' was first declared .tmp.code:8:8: error: variable 'foo' redeclared .tmp.code:3:8: info: this is where 'foo' was first declared + .tmp.code:13:8: error: variable 'foo' redeclared + .tmp.code:3:8: info: this is where 'foo' was first declared + .tmp.code:13:8: "main" defined a second time ###### test: type_err_const1 const foo : number = 45 bar := "string" - program: + func main() foo := 4 print foo, bar @@ -845,7 +877,7 @@ various places that `type_err()` are called. foo::="bar" ###### output: missing_program - oceani: no program found. + oceani: no main function found. ## Test erroneous command line args