basic2c/test_newfeatures.bas
2026-02-21 18:51:40 -06:00

192 lines
3.7 KiB
QBasic

' Test file for all new features
' ============================================================
' === CONST ===
PRINT "==== CONST ===="
CONST PI = 3.14159
CONST MAX_SIZE = 100
CONST GREETING$ = "Hello"
PRINT "PI = "; PI
PRINT "MAX_SIZE = "; MAX_SIZE
PRINT "GREETING$ = "; GREETING$
' === New Math Functions ===
PRINT ""
PRINT "==== Math Functions ===="
PRINT "TAN(0.7854) = "; TAN(0.7854)
PRINT "ATN(1) = "; ATN(1)
PRINT "LOG(2.71828) = "; LOG(2.71828)
PRINT "EXP(1) = "; EXP(1)
PRINT "SGN(-5) = "; SGN(-5)
PRINT "SGN(0) = "; SGN(0)
PRINT "SGN(42) = "; SGN(42)
' === RND / RANDOMIZE ===
PRINT ""
PRINT "==== RND / RANDOMIZE ===="
RANDOMIZE 12345
DIM r AS DOUBLE
r = RND
PRINT "RND (with seed 12345): "; r
r = RND()
PRINT "RND() again: "; r
RANDOMIZE
PRINT "RANDOMIZE (time-based) done"
' === New String Functions ===
PRINT ""
PRINT "==== String Functions ===="
PRINT "LTRIM$(' hello') = '"; LTRIM$(" hello"); "'"
PRINT "RTRIM$('hello ') = '"; RTRIM$("hello "); "'"
PRINT "TRIM$(' hello ') = '"; TRIM$(" hello "); "'"
PRINT "SPACE$(5) = '"; SPACE$(5); "'"
PRINT "HEX$(255) = "; HEX$(255)
PRINT "HEX$(16) = "; HEX$(16)
PRINT "OCT$(8) = "; OCT$(8)
PRINT "OCT$(255) = "; OCT$(255)
PRINT "STRING$(5, '*') = "; STRING$(5, "*")
PRINT "STRING$(3, 'AB') = "; STRING$(3, "AB")
' === SWAP ===
PRINT ""
PRINT "==== SWAP ===="
DIM a AS INTEGER
DIM b AS INTEGER
a = 10
b = 20
PRINT "Before: a="; a; " b="; b
SWAP a, b
PRINT "After: a="; a; " b="; b
DIM s1 AS STRING
DIM s2 AS STRING
s1 = "first"
s2 = "second"
PRINT "Before: s1="; s1; " s2="; s2
SWAP s1, s2
PRINT "After: s1="; s1; " s2="; s2
' === LBOUND / UBOUND ===
PRINT ""
PRINT "==== LBOUND / UBOUND ===="
DIM arr(10) AS INTEGER
PRINT "LBOUND(arr) = "; LBOUND(arr)
PRINT "UBOUND(arr) = "; UBOUND(arr)
' === Bitwise Operators ===
PRINT ""
PRINT "==== Bitwise Operators ===="
DIM x AS INTEGER
DIM y AS INTEGER
x = 15
y = 9
PRINT "15 AND 9 = "; x AND y
PRINT "15 OR 9 = "; x OR y
PRINT "15 XOR 9 = "; x XOR y
PRINT "NOT 0 = "; NOT 0
PRINT "NOT -1 = "; NOT -1
' Logical-style usage (with comparisons)
DIM c AS INTEGER
c = 5
IF c > 3 AND c < 10 THEN
PRINT "5 is between 3 and 10"
END IF
IF c > 10 OR c < 6 THEN
PRINT "5 > 10 OR 5 < 6 is TRUE"
END IF
IF NOT (c = 10) THEN
PRINT "NOT (5 = 10) is TRUE"
END IF
' === SELECT CASE ===
PRINT ""
PRINT "==== SELECT CASE ===="
DIM grade AS INTEGER
grade = 85
SELECT CASE grade
CASE 90 TO 100
PRINT "Grade A"
CASE 80 TO 89
PRINT "Grade B"
CASE 70 TO 79
PRINT "Grade C"
CASE ELSE
PRINT "Grade F"
END SELECT
DIM val AS INTEGER
val = 3
SELECT CASE val
CASE 1
PRINT "One"
CASE 2, 3
PRINT "Two or Three"
CASE IS > 5
PRINT "Greater than 5"
CASE ELSE
PRINT "Something else"
END SELECT
' String SELECT CASE
DIM color AS STRING
color = "red"
SELECT CASE color
CASE "red"
PRINT "Color is RED"
CASE "blue"
PRINT "Color is BLUE"
CASE ELSE
PRINT "Unknown color"
END SELECT
' === ON GOTO ===
PRINT ""
PRINT "==== ON GOTO ===="
DIM choice AS INTEGER
choice = 2
ON choice GOTO opt1, opt2, opt3
GOTO skipOpts
opt1:
PRINT "Option 1"
GOTO skipOpts
opt2:
PRINT "Option 2"
GOTO skipOpts
opt3:
PRINT "Option 3"
skipOpts:
' === ON GOSUB ===
PRINT ""
PRINT "==== ON GOSUB ===="
choice = 1
ON choice GOSUB sub1, sub2, sub3
choice = 3
ON choice GOSUB sub1, sub2, sub3
GOTO skipSubs
sub1:
PRINT "Subroutine 1"
RETURN
sub2:
PRINT "Subroutine 2"
RETURN
sub3:
PRINT "Subroutine 3"
RETURN
skipSubs:
' === MID$ Assignment ===
PRINT ""
PRINT "==== MID$ Assignment ===="
DIM msg AS STRING
msg = "Hello World"
PRINT "Before: "; msg
MID$(msg, 7, 5) = "BASIC"
PRINT "After: "; msg
MID$(msg, 1, 5) = "Howdy"
PRINT "After2: "; msg
PRINT ""
PRINT "All new feature tests complete!"