+ oceani: no main function found.
+
+###### test: bad_main
+ func main(foo:string)
+ print foo
+
+###### output: bad_main
+ .tmp.code:??:??: error: expected argv but variable 'foo' is string
+ .tmp.code:??:??: info: this is where 'NOTVAR' was set to string
+ oceani: main has wrong type.
+
+Test for type errors with functions
+
+###### test list
+ oceani_failing_tests += func_err_args func_err_redeclare
+
+###### test: func_err_args
+
+ func test1(a:number; b:string; c:[3]Boolean)
+ print a, b, c[1]
+
+ func test2(a:number; b:string; c:[3]Boolean)
+ print a, b, c[1]
+
+ func main()
+ truth:[3]Boolean
+ truth[1] = True
+ test1(1,"hello")
+ test1("hello",1)
+ test1(1, "two", truth)
+ test1(1, 2, truth)
+ test1(1, "lo", truth, 4)
+ print test(), test1(1,2,3)
+ if test1 == test2:
+ pass
+
+###### 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:??:??: info: this is where 'NOTVAR' was set to func
+ oceani: type error in program - not running.
+
+###### test: func_err_redeclare
+
+ func test1(a:number; b:string; c:[3]Boolean)
+ print a, b, c[1]
+
+ func test1
+ do
+ pass
+
+ func test1
+ b:Boolean
+ do
+ pass
+
+###### output: func_err_redeclare
+ .tmp.code:5:5: error: function 'test1' redeclared
+ .tmp.code:2:5: info: this is where 'test1' was first declared
+ .tmp.code:9:5: error: function 'test1' redeclared
+ .tmp.code:2:5: info: this is where 'test1' was first declared