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

176 lines
3.6 KiB
QBasic

' ============================================================
' Test program for multidimensional arrays
' ============================================================
PRINT "==== Multidimensional Array Tests ===="
' ---- Test 1: 2D integer array ----
PRINT ""
PRINT "---- Test 1: 2D integer array ----"
DIM matrix(3, 4) AS INTEGER
DIM i AS INTEGER
DIM j AS INTEGER
' Fill with i*10 + j
FOR i = 0 TO 3
FOR j = 0 TO 4
matrix(i, j) = i * 10 + j
NEXT j
NEXT i
' Read back specific elements
PRINT "matrix(0,0) = "; matrix(0, 0)
PRINT "matrix(1,2) = "; matrix(1, 2)
PRINT "matrix(3,4) = "; matrix(3, 4)
PRINT "matrix(2,3) = "; matrix(2, 3)
' ---- Test 2: 2D string array ----
PRINT ""
PRINT "---- Test 2: 2D string array ----"
DIM grid$(2, 2) AS STRING
grid$(0, 0) = "NW"
grid$(0, 1) = "N"
grid$(0, 2) = "NE"
grid$(1, 0) = "W"
grid$(1, 1) = "C"
grid$(1, 2) = "E"
grid$(2, 0) = "SW"
grid$(2, 1) = "S"
grid$(2, 2) = "SE"
FOR i = 0 TO 2
FOR j = 0 TO 2
PRINT grid$(i, j); " ";
NEXT j
PRINT ""
NEXT i
' ---- Test 3: 3D array ----
PRINT ""
PRINT "---- Test 3: 3D array ----"
DIM cube(2, 3, 4) AS INTEGER
DIM k AS INTEGER
' Fill with i*100 + j*10 + k
FOR i = 0 TO 2
FOR j = 0 TO 3
FOR k = 0 TO 4
cube(i, j, k) = i * 100 + j * 10 + k
NEXT k
NEXT j
NEXT i
PRINT "cube(0,0,0) = "; cube(0, 0, 0)
PRINT "cube(1,2,3) = "; cube(1, 2, 3)
PRINT "cube(2,3,4) = "; cube(2, 3, 4)
PRINT "cube(2,0,1) = "; cube(2, 0, 1)
' ---- Test 4: 2D with expressions ----
PRINT ""
PRINT "---- Test 4: 2D with expressions ----"
DIM r AS INTEGER
DIM c AS INTEGER
r = 5
c = 3
DIM table(r, c) AS DOUBLE
table(1, 1) = 3.14
table(4, 2) = 2.71
table(r, c) = 9.99
PRINT "table(1,1) = "; table(1, 1)
PRINT "table(4,2) = "; table(4, 2)
PRINT "table(5,3) = "; table(r, c)
' ---- Test 5: Loop over 2D array ----
PRINT ""
PRINT "---- Test 5: Loop over 2D ----"
DIM small(2, 3) AS INTEGER
DIM sum AS INTEGER
sum = 0
FOR i = 0 TO 2
FOR j = 0 TO 3
small(i, j) = (i + 1) * (j + 1)
sum = sum + small(i, j)
NEXT j
NEXT i
PRINT "Sum of multiplication table: "; sum
' Print the table
FOR i = 0 TO 2
FOR j = 0 TO 3
PRINT small(i, j); " ";
NEXT j
PRINT ""
NEXT i
' ---- Test 6: REDIM 2D ----
PRINT ""
PRINT "---- Test 6: REDIM 2D ----"
DIM resizable(2, 2) AS INTEGER
resizable(0, 0) = 1
resizable(1, 1) = 5
resizable(2, 2) = 9
PRINT "Before REDIM: "; resizable(1, 1)
REDIM resizable(4, 4) AS INTEGER
PRINT "After REDIM (0,0): "; resizable(0, 0)
resizable(3, 3) = 42
PRINT "After REDIM (3,3): "; resizable(3, 3)
' ---- Test 7: Mixed 1D and 2D ----
PRINT ""
PRINT "---- Test 7: Mixed 1D and 2D ----"
DIM arr1d(5) AS INTEGER
DIM arr2d(3, 3) AS INTEGER
FOR i = 0 TO 5
arr1d(i) = i * 2
NEXT i
FOR i = 0 TO 3
FOR j = 0 TO 3
arr2d(i, j) = arr1d(i) + arr1d(j)
NEXT j
NEXT i
PRINT "arr1d(3) = "; arr1d(3)
PRINT "arr2d(2,3) = "; arr2d(2, 3)
PRINT "arr2d(1,2) = "; arr2d(1, 2)
' ---- Test 8: 2D array in SUB (BYREF) ----
PRINT ""
PRINT "---- Test 8: 2D array element BYREF ----"
DIM val AS INTEGER
val = 100
DIM testArr(3, 3) AS INTEGER
testArr(1, 2) = 50
GOSUB addTen
PRINT "val after GOSUB: "; val
GOTO afterAddTen
addTen:
val = val + 10
RETURN
afterAddTen:
' ---- Test 9: 2D DOUBLE array ----
PRINT ""
PRINT "---- Test 9: 2D DOUBLE array ----"
DIM dbl2d(2, 2) AS DOUBLE
dbl2d(0, 0) = 1.1
dbl2d(0, 1) = 2.2
dbl2d(0, 2) = 3.3
dbl2d(1, 0) = 4.4
dbl2d(1, 1) = 5.5
dbl2d(1, 2) = 6.6
dbl2d(2, 0) = 7.7
dbl2d(2, 1) = 8.8
dbl2d(2, 2) = 9.9
DIM dsum AS DOUBLE
dsum = 0
FOR i = 0 TO 2
FOR j = 0 TO 2
dsum = dsum + dbl2d(i, j)
NEXT j
NEXT i
PRINT "Sum of doubles: "; dsum
PRINT ""
PRINT "==== ALL MULTIDIMENSIONAL TESTS COMPLETE ===="