' EndBASIC
' Copyright 2020 Julio Merino
'
' Licensed under the Apache License, Version 2.0 (the "License"); you may not
' use this file except in compliance with the License. You may obtain a copy
' of the License at:
'
' http://www.apache.org/licenses/LICENSE-2.0
'
' Unless required by applicable law or agreed to in writing, software
' distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
' WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
' License for the specific language governing permissions and limitations
' under the License.
' Tests for types, including type annotations and type inference.
'
' This is must be run through the REPL (as opposed to running as a script)
' because the statements below may trigger compilation errors and abort
' execution right away. The REPL compiles each statement separately so it
' can print those errors.
PRINT ">>> Type inference"
b = FALSE: b? = FALSE: PRINT b; b?
d = 0.0: d# = 0.0: PRINT d; d#
i = 3: i% = 3: PRINT i; i%
s = "Hello": s$ = "Hello": PRINT s; s$
PRINT ">>> Automatic type promotion"
d = 2.4: d = d + 3: PRINT d
i = 5: i = i + 2.6: PRINT i
PRINT ">>> Inconsistent type annotations in expressions"
d = 0.0: PRINT 2.1 + d? + 3.1
DIM a1(10) AS INTEGER: PRINT 3 + a1#(2) + 8
PRINT ">>> Inconsistent type annotations in commands"
i = 0: PRINT i#
DIM a2(10) AS INTEGER: PRINT a2#(2)
PRINT ">>> Type annotations in function calls"
PRINT LEN("foo")
PRINT LEN%("foo")
PRINT LEN$("foo")
PRINT ">>> Invalid type access"
i = 0: PRINT i(3)
PRINT LEN
PRINT PRINT
PRINT ">>> Argless function calls"
PRINT PI
PRINT PI()
PRINT ">>> Function references"
INPUT PI