| # Test Overview |
| |
| ## `test01.bas` |
| |
| Scalar variable assignment |
| |
| ### Test File |
| |
| ```basic |
| 10 a=1 |
| 20 print a |
| 30 a$="hello" |
| 40 print a$ |
| 50 a=0.0002 |
| 60 print a |
| 70 a=2.e-6 |
| 80 print a |
| 90 a=.2e-6 |
| 100 print a |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 |
| hello |
| 0.0002 |
| 0.000 |
| 0.0000020 |
| 0.0000002 |
| ``` |
| |
| ### Notes |
| |
| Output would differ on other platforms NttX does not use scientific notation in |
| floating point output. |
| |
| ## `test02.bas` |
| |
| Array variable assignment |
| |
| ### Test File |
| |
| ```basic |
| 10 dim a(1) |
| 20 a(0)=10 |
| 30 a(1)=11 |
| 40 a=12 |
| 50 print a(0) |
| 60 print a(1) |
| 70 print a |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 10 |
| 11 |
| 12 |
| ``` |
| |
| ## `test03.bas` |
| |
| `FOR` loops |
| |
| ### Test File |
| |
| ```basic |
| 10 for i=0 to 10 |
| 20 print i |
| 30 if i=5 then exit for |
| 40 next |
| 50 for i=0 to 0 |
| 60 print i |
| 70 next I |
| 80 for i=1 to 0 step -1 |
| 90 print i |
| 100 next |
| 110 for i=1 to 0 |
| 120 print i |
| 130 next |
| 140 for i$="" to "aaaaaaaaaa" step "a" |
| 150 print i$ |
| 160 next |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 0 |
| 1 |
| 0 |
| |
| a |
| aa |
| aaa |
| aaaa |
| aaaaa |
| aaaaaa |
| aaaaaaa |
| aaaaaaaa |
| aaaaaaaaa |
| aaaaaaaaaa |
| ``` |
| |
| ## `test04.bas` |
| |
| `REPEAT` `UNTIL` loop |
| |
| ### Test File |
| |
| ```basic |
| 10 a=1 |
| 20 repeat |
| 30 print a |
| 40 a=a+1 |
| 50 until a=10 |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| ``` |
| |
| ## `test05.bas` |
| |
| `GOSUB` `RETURN` subroutines |
| |
| ### Test File |
| |
| ```basic |
| 10 gosub 100 |
| 20 gosub 100 |
| 30 end |
| 100 gosub 200 |
| 110 gosub 200 |
| 120 return |
| 200 print "hello, world":return |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| hello, world |
| hello, world |
| hello, world |
| hello, world |
| ``` |
| |
| ## `test06.bas` |
| |
| Recursive function without arguments |
| |
| ### Test File |
| |
| ```basic |
| 10 def fnloop |
| 20 if n=0.0 then |
| 30 r=0.0 |
| 40 else |
| 50 print n |
| 60 n=n-1.0 |
| 70 r=fnloop() |
| 80 end if |
| 90 =r |
| 100 n=10 |
| 110 print fnloop |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 10 |
| 9 |
| 8 |
| 7 |
| 6 |
| 5 |
| 4 |
| 3 |
| 2 |
| 1 |
| 0 |
| ``` |
| |
| ## `test07.bas` |
| |
| Recursive function with arguments |
| |
| ### Test File |
| |
| ```basic |
| 10 def fna(x) |
| 20 if x=0 then r=1 else r=x*fna(x-1) |
| 30 =r |
| 40 print fna(7) |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 5040 |
| ``` |
| |
| ## `test08.bas` |
| |
| `DATA`, `READ` and `RESTORE` |
| |
| ### Test File |
| |
| ```basic |
| 10 data "a",b |
| 20 data "c","d |
| 40 read j$ |
| 50 print "j=";j$ |
| 60 restore 20 |
| 70 for i=1 to 3 |
| 80 read j$,k$ |
| 90 print "j=";j$;" k=";k$ |
| 100 next |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| j=a |
| j=c k=d |
| Error: end of `data' in line 80 at: |
| 80 read j$,k$ |
| ^ |
| ``` |
| |
| ## `test09.bas` |
| |
| `LOCAL` variables |
| |
| ### Test File |
| |
| ```basic |
| 10 def fna(a) |
| 20 local b |
| 30 b=a+1 |
| 40 =b |
| 60 b=3 |
| 70 print b |
| 80 print fna(4) |
| 90 print b |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 3 |
| 5 |
| 3 |
| ``` |
| |
| ## `test10.bas` |
| |
| `PRINT USING` |
| |
| ### Test File |
| |
| ```basic |
| 10 print using "!";"abcdef" |
| 20 print using "\ \";"abcdef" |
| 30 print using "###-";-1 |
| 40 print using "###-";0 |
| 50 print using "###-";1 |
| 60 print using "###+";-1 |
| 70 print using "###+";0 |
| 80 print using "###+";1 |
| 90 print using "#####,";1000 |
| 100 print using "**#,##.##";1000.00 |
| 110 print using "+##.##";1 |
| 120 print using "+##.##";1.23400 |
| 130 print using "+##.##";123.456 |
| 140 print using "+##.";123.456 |
| 150 print using "+##";123.456 |
| 160 print using "abc def ###.## efg";1.3 |
| 170 print using "###.##^^^^^";5 |
| 180 print using "###.##^^^^";1000 |
| 190 print using ".##^^^^";5.0 |
| 200 print using "##^^^^";2.3e-9 |
| 210 print using ".##^^^^";2.3e-9 |
| 220 print using "#.#^^^^";2.3e-9 |
| 230 print using ".####^^^^^";-011466 |
| 240 print using "$*,***,***,***.**";3729825.24 |
| 250 print using "$**********.**";3729825.24 |
| 260 print using "$$###.##";456.78 |
| 270 print using "a!b";"S" |
| 280 print using "a!b";"S","T" |
| 290 print using "a!b!c";"S" |
| 300 print using "a!b!c";"S","T" |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| a |
| abc |
| 1- |
| 0 |
| 1 |
| 1- |
| 0+ |
| 1+ |
| 1,000 |
| *1,000.00 |
| +1.00 |
| +1.23 |
| +123.46 |
| +123. |
| +123 |
| abc def 1.30 efg |
| 500.00E-002 |
| 100.00E+01 |
| .50E+01 |
| 23E-10 |
| .23E-08 |
| 2.3E-09 |
| -.1147E+005 |
| $***3,729,825.24 |
| $**3729825.24 |
| $456.78 |
| aSb |
| aSbaTb |
| aSb |
| aSbTc |
| ``` |
| |
| ## `test11.bas` |
| |
| `OPEN` and `LINE INPUT` |
| |
| ### Test File |
| |
| ```basic |
| 10 open "i",1,"test.bas" |
| 20 while not eof(1) |
| 30 line input #1,a$ |
| 40 print a$ |
| 50 wend |
| ``` |
| |
| ### Expected Result |
| |
| ```basic |
| 10 open "i",1,"test.bas" |
| 20 while not eof(1) |
| 30 line input #1,a$ |
| 40 print a$ |
| 50 wend |
| ``` |
| |
| ## `test12.bas` |
| |
| Exception handling |
| |
| ### Test File |
| |
| ```basic |
| 10 on error print "global handler 1 caught error in line ";erl : resume 30 |
| 20 print mid$("",-1) |
| 30 on error print "global handler 2 caught error in line ";erl : end |
| 40 def procx |
| 50 on error print "local handler caught error in line";erl : goto 70 |
| 60 print 1/0 |
| 70 end proc |
| 80 procx |
| 90 print 1 mod 0 |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| global handler 1 caught error in line 20 |
| local handler caught error in line 60 |
| global handler 2 caught error in line 90 |
| ``` |
| |
| ## `test13.bas` |
| |
| Unnumbered lines |
| |
| ### Test File |
| |
| ```basic |
| print "a" |
| goto 20 |
| print "b" |
| 20 print "c" |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| a |
| c |
| ``` |
| |
| ## `test14.bas` |
| |
| `SELECT CASE` |
| |
| ### Test File |
| |
| ```basic |
| 10 for i=0 to 9 |
| 20 for j=0 to 9 |
| 30 print i,j |
| 40 select case i |
| 50 case 0 |
| 60 print "i after case 0" |
| 70 case 1 |
| 80 print "i after case 1" |
| 90 select case j |
| 100 case 0 |
| 110 print "j after case 0" |
| 120 end select |
| 130 case 3 to 5,7 |
| 140 print "i after case 3 to 5, 7" |
| 150 case is <9 |
| 160 print "is after case is <9" |
| 170 case else |
| 180 print "i after case else" |
| 190 end select |
| 200 next |
| 210 next |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 0 0 |
| i after case 0 |
| 0 1 |
| i after case 0 |
| 0 2 |
| i after case 0 |
| 0 3 |
| i after case 0 |
| 0 4 |
| i after case 0 |
| 0 5 |
| i after case 0 |
| 0 6 |
| i after case 0 |
| 0 7 |
| i after case 0 |
| 0 8 |
| i after case 0 |
| 0 9 |
| i after case 0 |
| 1 0 |
| i after case 1 |
| j after case 0 |
| 1 1 |
| i after case 1 |
| 1 2 |
| i after case 1 |
| 1 3 |
| i after case 1 |
| 1 4 |
| i after case 1 |
| 1 5 |
| i after case 1 |
| 1 6 |
| i after case 1 |
| 1 7 |
| i after case 1 |
| 1 8 |
| i after case 1 |
| 1 9 |
| i after case 1 |
| 2 0 |
| is after case is <9 |
| 2 1 |
| is after case is <9 |
| 2 2 |
| is after case is <9 |
| 2 3 |
| is after case is <9 |
| 2 4 |
| is after case is <9 |
| 2 5 |
| is after case is <9 |
| 2 6 |
| is after case is <9 |
| 2 7 |
| is after case is <9 |
| 2 8 |
| is after case is <9 |
| 2 9 |
| is after case is <9 |
| 3 0 |
| i after case 3 to 5, 7 |
| 3 1 |
| i after case 3 to 5, 7 |
| 3 2 |
| i after case 3 to 5, 7 |
| 3 3 |
| i after case 3 to 5, 7 |
| 3 4 |
| i after case 3 to 5, 7 |
| 3 5 |
| i after case 3 to 5, 7 |
| 3 6 |
| i after case 3 to 5, 7 |
| 3 7 |
| i after case 3 to 5, 7 |
| 3 8 |
| i after case 3 to 5, 7 |
| 3 9 |
| i after case 3 to 5, 7 |
| 4 0 |
| i after case 3 to 5, 7 |
| 4 1 |
| i after case 3 to 5, 7 |
| 4 2 |
| i after case 3 to 5, 7 |
| 4 3 |
| i after case 3 to 5, 7 |
| 4 4 |
| i after case 3 to 5, 7 |
| 4 5 |
| i after case 3 to 5, 7 |
| 4 6 |
| i after case 3 to 5, 7 |
| 4 7 |
| i after case 3 to 5, 7 |
| 4 8 |
| i after case 3 to 5, 7 |
| 4 9 |
| i after case 3 to 5, 7 |
| 5 0 |
| i after case 3 to 5, 7 |
| 5 1 |
| i after case 3 to 5, 7 |
| 5 2 |
| i after case 3 to 5, 7 |
| 5 3 |
| i after case 3 to 5, 7 |
| 5 4 |
| i after case 3 to 5, 7 |
| 5 5 |
| i after case 3 to 5, 7 |
| 5 6 |
| i after case 3 to 5, 7 |
| 5 7 |
| i after case 3 to 5, 7 |
| 5 8 |
| i after case 3 to 5, 7 |
| 5 9 |
| i after case 3 to 5, 7 |
| 6 0 |
| is after case is <9 |
| 6 1 |
| is after case is <9 |
| 6 2 |
| is after case is <9 |
| 6 3 |
| is after case is <9 |
| 6 4 |
| is after case is <9 |
| 6 5 |
| is after case is <9 |
| 6 6 |
| is after case is <9 |
| 6 7 |
| is after case is <9 |
| 6 8 |
| is after case is <9 |
| 6 9 |
| is after case is <9 |
| 7 0 |
| i after case 3 to 5, 7 |
| 7 1 |
| i after case 3 to 5, 7 |
| 7 2 |
| i after case 3 to 5, 7 |
| 7 3 |
| i after case 3 to 5, 7 |
| 7 4 |
| i after case 3 to 5, 7 |
| 7 5 |
| i after case 3 to 5, 7 |
| 7 6 |
| i after case 3 to 5, 7 |
| 7 7 |
| i after case 3 to 5, 7 |
| 7 8 |
| i after case 3 to 5, 7 |
| 7 9 |
| i after case 3 to 5, 7 |
| 8 0 |
| is after case is <9 |
| 8 1 |
| is after case is <9 |
| 8 2 |
| is after case is <9 |
| 8 3 |
| is after case is <9 |
| 8 4 |
| is after case is <9 |
| 8 5 |
| is after case is <9 |
| 8 6 |
| is after case is <9 |
| 8 7 |
| is after case is <9 |
| 8 8 |
| is after case is <9 |
| 8 9 |
| is after case is <9 |
| 9 0 |
| i after case else |
| 9 1 |
| i after case else |
| 9 2 |
| i after case else |
| 9 3 |
| i after case else |
| 9 4 |
| i after case else |
| 9 5 |
| i after case else |
| 9 6 |
| i after case else |
| 9 7 |
| i after case else |
| 9 8 |
| i after case else |
| 9 9 |
| i after case else |
| ``` |
| |
| ## `test15.bas` |
| |
| `FIELD`, `PUT` and `GET` |
| |
| ### Test File |
| |
| ```basic |
| a$="a" |
| open "r",1,"test.dat",128 |
| print "before field a$=";a$ |
| field #1,10 as a$ |
| field #1,5 as b$,5 as c$ |
| lset b$="hi" |
| rset c$="ya" |
| print "a$=";a$ |
| put #1 |
| close #1 |
| print "after close a$=";a$ |
| open "r",2,"test.dat",128 |
| field #2,10 as b$ |
| get #2 |
| print "after get b$=";b$ |
| close #2 |
| kill "test.dat" |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| before field a$=a |
| a$=hi ya |
| after close a$= |
| after get b$=hi ya |
| ``` |
| |
| ## `test16.bas` |
| |
| `SWAP` |
| |
| ### Test File |
| |
| ```basic |
| a=1 : b=2 |
| print "a=";a;"b=";b |
| swap a,b |
| print "a=";a;"b=";b |
| dim a$(1,1),b$(1,1) |
| a$(1,0)="a" : b$(0,1)="b" |
| print "a$(1,0)=";a$(1,0);"b$(0,1)=";b$(0,1) |
| swap a$(1,0),b$(0,1) |
| print "a$(1,0)=";a$(1,0);"b$(0,1)=";b$(0,1) |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| a= 1 b= 2 |
| a= 2 b= 1 |
| a$(1,0)=ab$(0,1)=b |
| a$(1,0)=bb$(0,1)=a |
| ``` |
| |
| ## `test17.bas` |
| |
| `DO`, `EXIT DO`, `LOOP` |
| |
| ### Test File |
| |
| ```basic |
| print "loop started" |
| i=1 |
| do |
| print "i is";i |
| i=i+1 |
| if i>10 then exit do |
| loop |
| print "loop ended" |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| loop started |
| i is 1 |
| i is 2 |
| i is 3 |
| i is 4 |
| i is 5 |
| i is 6 |
| i is 7 |
| i is 8 |
| i is 9 |
| i is 10 |
| loop ended |
| ``` |
| |
| ## `test18.bas` |
| |
| `DO WHILE`, `LOOP` |
| |
| ### Test File |
| |
| ```basic |
| print "loop started" |
| x$="" |
| do while len(x$)<3 |
| print "x$ is ";x$ |
| x$=x$+"a" |
| y$="" |
| do while len(y$)<2 |
| print "y$ is ";y$ |
| y$=y$+"b" |
| loop |
| loop |
| print "loop ended" |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| loop started |
| x$ is |
| y$ is |
| y$ is b |
| x$ is a |
| y$ is |
| y$ is b |
| x$ is aa |
| y$ is |
| y$ is b |
| loop ended |
| ``` |
| |
| ## `test19.bas` |
| |
| `ELSEIF` |
| |
| ### Test File |
| |
| ```basic |
| for x=1 to 3 |
| if x=1 then |
| print "1a" |
| else |
| if x=2 then |
| print "2a" |
| else |
| print "3a" |
| end if |
| end if |
| next |
| |
| for x=1 to 3 |
| if x=1 then |
| print "1b" |
| elseif x=2 then |
| print "2b" |
| elseif x=3 then print "3b" |
| next |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1a |
| 2a |
| 3a |
| 1b |
| 2b |
| 3b |
| ``` |
| |
| ## `test20.bas` |
| |
| Caller trace |
| |
| ### Test File |
| |
| ```basic |
| 10 gosub 20 |
| 20 gosub 30 |
| 30 procb |
| 40 def proca |
| 50 print "hi" |
| 60 stop |
| 70 end proc |
| 80 def procb |
| 90 proca |
| 100 end proc |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| hi |
| Break in line 60 at: |
| 60 stop |
| ^ |
| Proc Called in line 90 at: |
| 90 proca |
| ^ |
| Proc Called in line 30 at: |
| 30 procb |
| ^ |
| Called in line 20 at: |
| 20 gosub 30 |
| ^ |
| Called in line 10 at: |
| 10 gosub 20 |
| ^ |
| ``` |
| |
| ## `test21.bas` |
| |
| Matrix assignment |
| |
| ### Test File |
| |
| ```basic |
| dim a(3,4) |
| for i=0 to 3 |
| for j=0 to 4 |
| a(i,j)=i*10+j |
| print a(i,j); |
| next |
| print |
| next |
| mat b=a |
| for i=0 to 3 |
| for j=0 to 4 |
| print b(i,j); |
| next |
| print |
| next |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 0 1 2 3 4 |
| 10 11 12 13 14 |
| 20 21 22 23 24 |
| 30 31 32 33 34 |
| 0 0 0 0 0 |
| 0 11 12 13 14 |
| 0 21 22 23 24 |
| 0 31 32 33 34 |
| ``` |
| |
| ## `test22.bas` |
| |
| `MAT PRINT` |
| |
| ### Test File |
| |
| ```basic |
| dim a(2,2) |
| for i=0 to 2 |
| for j=0 to 2 |
| a(i,j)=i*10+j |
| next |
| next |
| for j=1 to 2 |
| for i=1 to 2 |
| print using " ##.##";a(i,j), |
| next |
| print |
| next |
| mat print using " ##.##";a,a |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 11.00 21.00 |
| 12.00 22.00 |
| 11.00 12.00 |
| 21.00 22.00 |
| |
| 11.00 12.00 |
| 21.00 22.00 |
| ``` |
| |
| ## `test23.bas` |
| |
| Matrix addition and subtraction |
| |
| ### Test File |
| |
| ```basic |
| dim a(2,2) |
| a(2,2)=2.5 |
| dim b%(2,2) |
| b%(2,2)=3 |
| mat print a |
| mat a=a-b% |
| mat print a |
| dim c$(2,2) |
| c$(2,1)="hi" |
| mat print c$ |
| mat c$=c$+c$ |
| mat print c$ |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 0 0 |
| 0 2.5 |
| 0 0 |
| 0 -0.5 |
| |
| hi |
| |
| hihi |
| ``` |
| |
| ## `test24.bas` |
| |
| Matrix multiplication |
| |
| ### Test File |
| |
| ```basic |
| 10 dim b(2,3),c(3,2) |
| 20 for i=1 to 2 : for j=1 to 3 : read b(i,j) : next : next |
| 30 for i=1 to 3 : for j=1 to 2 : read c(i,j) : next : next |
| 40 mat a=b*c |
| 50 mat print b,c,a |
| 60 data 1,2,3,3,2,1 |
| 70 data 1,2,2,1,3,3 |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 2 3 |
| 3 2 1 |
| |
| 1 2 |
| 2 1 |
| 3 3 |
| |
| 14 13 |
| 10 11 |
| ``` |
| |
| ## `test25.bas` |
| |
| Matrix scalar multiplication |
| |
| ### Test File |
| |
| ```basic |
| 10 dim a(3,3) |
| 20 for i=1 to 3 : for j=1 to 3 : read a(i,j) : next : next |
| 30 mat print a |
| 40 mat a=(3)*a |
| 45 print |
| 50 mat print a |
| 60 data 1,2,3,4,5,6,7,8,9 |
| 80 dim inch_array(5,1),cm_array(5,1) |
| 90 mat read inch_array |
| 100 data 1,12,36,100,39.37 |
| 110 mat print inch_array |
| 120 mat cm_array=(2.54)*inch_array |
| 130 mat print cm_array |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 2 3 |
| 4 5 6 |
| 7 8 9 |
| |
| 3 6 9 |
| 12 15 18 |
| 21 24 27 |
| 1 |
| 12 |
| 36 |
| 100 |
| 39.37 |
| 2.54 |
| 30.48 |
| 91.44 |
| 254 |
| 99.9998 |
| ``` |
| |
| ## `test26.bas` |
| |
| MAT READ |
| |
| ### Test File |
| |
| ```basic |
| dim a(3,3) |
| data 5,5,5,8,8,8,3,3 |
| mat read a(2,3) |
| mat print a |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 5 5 5 |
| 8 8 8 |
| ``` |
| |
| ## `test27.bas` |
| |
| Matrix inversion |
| |
| ### Test File |
| |
| ```basic |
| data 1,2,3,4 |
| mat read a(2,2) |
| mat print a |
| mat b=inv(a) |
| mat print b |
| mat c=a*b |
| mat print c |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 2 |
| 3 4 |
| -2 1 |
| 1.5 -0.5 |
| 1 0 |
| 0 1 |
| ``` |
| |
| ## `test28.bas` |
| |
| TDL BASIC `FNRETURN`/`FNEND` |
| |
| ### Test File |
| |
| ```basic |
| def fnfac(n) |
| if n=1 then fnreturn 1 |
| fnend n*fnfac(n-1) |
| |
| print fnfac(10) |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 3628800 |
| ``` |
| |
| ## `test29.bas` |
| |
| TDL INSTR |
| |
| ### Test File |
| |
| ```basic |
| print instr("123456789","456");" = 4?" |
| print INSTR("123456789","654");" = 0?" |
| print INSTR("1234512345","34");" = 3?" |
| print INSTR("1234512345","34",6);" = 8?" |
| print INSTR("1234512345","34",6,2);" = 0?" |
| print INSTR("1234512345","34",6,4);" = 8?" |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 4 = 4? |
| 0 = 0? |
| 3 = 3? |
| 8 = 8? |
| 0 = 0? |
| 8 = 8? |
| ``` |
| |
| ## `test30.bas` |
| |
| Type mismatch check |
| |
| ### Test File |
| |
| ```basic |
| print 1+"a" |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| Error: Invalid binary operand at: end of program |
| ``` |
| |
| ## `test31.bas` |
| |
| PRINT default format |
| |
| ### Test File |
| |
| ```basic |
| 10 for i=-8 to 8 |
| 20 x=1+1/3 : y=1 : j=i |
| 30 for j=i to -1 : x=x/10 : y=y/10 : next |
| 40 for j=i to 1 step -1 : x=x*10 : y=y*10 : next |
| 50 print x,y |
| 60 next |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 0.0000000 0.0000000 |
| 0.0000001 0.0000001 |
| 0.0000013 0.0000010 |
| 0.0000133 0.0000100 |
| 0.000133 0.0001 |
| 0.001333 0.001 |
| 0.013333 0.01 |
| 0.133333 0.1 |
| 1.333333 1 |
| 13.33333 10 |
| 133.3333 100 |
| 1333.333 1000 |
| 13333.33 10000 |
| 133333.3 100000 |
| 1333333 1000000 |
| 13333333.3333333 10000000.0000000 |
| 133333333.3333333 100000000.0000000 |
| ``` |
| |
| ### Notes |
| |
| Output would differ on other platforms NttX does not use scientific notation in |
| floating point output. |
| |
| ## `test32.bas` |
| |
| `SUB` routines |
| |
| ### Test File |
| |
| ```basic |
| PUTS("abc") |
| END |
| |
| SUB PUTS(s$) |
| FOR i=1 to LEN(s$) : print mid$(s$,i,1); : NEXT |
| PRINT |
| END SUB |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| abc |
| ``` |
| |
| ## `test33.bas` |
| |
| `OPEN FOR BINARY` |
| |
| ### Test File |
| |
| ```basic |
| open "/tmp/test.out" for binary as 1 |
| put 1,1,"xy" |
| put 1,3,"z!" |
| put 1,10,1/3 |
| put 1,20,9999 |
| close 1 |
| open "/tmp/test.out" for binary as 1 |
| s$=" " |
| get 1,1,s$ |
| get 1,10,x |
| get 1,20,n% |
| close |
| print s$ |
| print x |
| print n% |
| kill "/tmp/test.out" |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| xyz! |
| 0.333333 |
| 9999 |
| ``` |
| |
| ### Notes |
| |
| The logic in this test will fail if there is no writable file system mount at |
| `/tmp`. |
| |
| ## `test34.bas` |
| |
| `OPTION BASE` |
| |
| ### Test File |
| |
| ```basic |
| option base 3 |
| dim a(3,5) |
| a(3,3)=1 |
| a(3,5)=2 |
| |
| print a(3,3) |
| print a(3,5) |
| |
| option base -2 |
| dim b(-1,2) |
| b(-2,-2)=10 |
| b(-1,2)=20 |
| |
| print a(3,3) |
| print a(3,5) |
| print b(-2,-2) |
| print b(-1,2) |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 |
| 2 |
| 1 |
| 2 |
| 10 |
| 20 |
| ``` |
| |
| ## `test35.bas` |
| |
| Real to integer conversion |
| |
| ### Test File |
| |
| ```basic |
| a%=1.2 |
| print a% |
| a%=1.7 |
| print a% |
| a%=-0.2 |
| print a% |
| a%=-0.7 |
| print a% |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 |
| 2 |
| 0 |
| -1 |
| ``` |
| |
| ## `test36.bas` |
| |
| `OPEN` file locking |
| |
| ### Test File |
| |
| ```basic |
| on error goto 10 |
| print "opening file" |
| open "/tmp/test.out" for output lock write as #1 |
| print "open succeeded" |
| if command$<>"enough" then shell "sh ./test/runbas test.bas enough" |
| end |
| 10 print "open failed" |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| opening file |
| open succeeded |
| opening file |
| open failed |
| ``` |
| |
| ### Notes |
| |
| 1. The logic in this test will fail opening the test.out file if there is no |
| writable file system mount at `/tmp`. |
| 2. This test will still currently fail when try to fork the shell because |
| support for that feature is not implemented. The following error message |
| should be received: |
| |
| ``` |
| Error: Forking child process failed (Unknown error) in line 5 at: |
| if command$<>"enough" then shell "sh ./test/runbas test.bas enough" |
| ^ |
| ``` |
| |
| ## `test37.bas` |
| |
| `LINE INPUT` reaching `EOF` |
| |
| ### Test File |
| |
| ```basic |
| 10 open "i",1,"/mnt/romfs/test37.dat" |
| 20 while not eof(1) |
| 30 line input #1,a$ |
| 40 if a$="abc" then print a$; else print "def" |
| 50 wend |
| ``` |
| |
| ## Data file (`/mnt/romfs/test37.dat`) |
| |
| ``` |
| abc |
| ``` |
| |
| ## Result |
| |
| ``` |
| abc |
| ``` |
| |
| ## `test38.bas` |
| |
| `MAT REDIM` |
| |
| ### Test File |
| |
| ```basic |
| dim x(10) |
| mat read x |
| mat print x |
| mat redim x(7) |
| mat print x |
| mat redim x(12) |
| mat print x |
| data 1,2,3,4,5,6,7,8,9,10 |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| ``` |
| |
| ## `test39.bas` |
| |
| Nested function and procedure calls |
| |
| ### Test File |
| |
| ```basic |
| def proc_a(x) |
| print fn_b(1,x) |
| end proc |
| |
| def fn_b(a,b) |
| = a+fn_c(b) |
| |
| def fn_c(b) |
| = b+3 |
| |
| proc_a(2) |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 6 |
| ``` |
| |
| ## `test40.bas` |
| |
| `IMAGE` |
| |
| ### Test File |
| |
| ```basic |
| d=3.1 |
| print using "#.#";d |
| print using 10;d |
| 10 image #.## |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 3.1 |
| 3.10 |
| ``` |
| |
| ## `test41.bas` |
| |
| `EXIT FUNCTION` |
| |
| ### Test File |
| |
| ```basic |
| function f(c) |
| print "f running" |
| if (c) then f=42 : exit function |
| f=43 |
| end function |
| |
| print f(0) |
| print f(1) |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| f running |
| 43 |
| f running |
| 42 |
| ``` |
| |
| ## `test42.bas` |
| |
| Arithmetic |
| |
| ### Test File |
| |
| ```basic |
| 10 print 4.7\3 |
| 20 print -2.3\1 |
| 30 print int(-2.3) |
| 40 print int(2.3) |
| 50 print fix(-2.3) |
| 60 print fix(2.3) |
| 70 print fp(-2.3) |
| 80 print fp(2.3) |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 |
| -2 |
| -3 |
| 2 |
| -2 |
| 2 |
| -0.3 |
| 0.3 |
| ``` |
| |
| ## `test43.bas` |
| |
| Matrix multiplication size checks |
| |
| ### Test File |
| |
| ```basic |
| DIM a(3,3),b(3,1),c(3,3) |
| MAT READ a |
| MAT READ b |
| MAT c=a*b |
| MAT PRINT c |
| DATA 1,2,3,4,5,6,7,8,9 |
| DATA 5,3,2 |
| |
| erase b |
| DIM b(3) |
| RESTORE |
| MAT READ a |
| MAT READ b |
| MAT c=a*b |
| MAT PRINT c |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 17 |
| 47 |
| 77 |
| Error: Dimension mismatch in line 14 at: |
| mat c=a*b |
| ^ |
| ``` |
| |
| ## `test44.bas` |
| |
| `DELETE` |
| |
| ### Test File |
| |
| ```basic |
| 10 print 10 |
| 20 print 20 |
| 30 print 30 |
| 40 print 40 |
| 50 print 50 |
| 60 print 60 |
| 70 print 70 |
| ``` |
| |
| ## Usage |
| |
| ```basic |
| load "test.bas" |
| delete -20 |
| delete 60- |
| delete 30-40 |
| delete 15 |
| list |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| Error: No such line at: 15 |
| 50 print 50 |
| ``` |
| |
| ## `test45.bas` |
| |
| `MID$` on left side |
| |
| ### Test File |
| |
| ```basic |
| 10 mid$(a$,6,4) = "ABCD" |
| 20 print a$ |
| 30 a$="0123456789" |
| 40 mid$(a$,6,4) = "ABCD" |
| 50 print a$ |
| 60 a$="0123456789" |
| 70 let mid$(a$,6,4) = "ABCD" |
| 80 print a$ |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| |
| 01234ABCD9 |
| 01234ABCD9 |
| ``` |
| |
| ## `test46.bas` |
| |
| `END` used without program |
| |
| ### Test File |
| |
| ```basic |
| for i=1 to 10:print i;:next i:end |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 2 3 4 5 6 7 8 9 10 |
| ``` |
| |
| ## `test47.bas` |
| |
| `MAT WRITE` |
| |
| ### Test File |
| |
| ```basic |
| dim a(3,4) |
| for i=0 to 3 |
| for j=0 to 4 |
| a(i,j)=i*10+j |
| print a(i,j); |
| next |
| print |
| next |
| mat write a |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 0 1 2 3 4 |
| 10 11 12 13 14 |
| 20 21 22 23 24 |
| 30 31 32 33 34 |
| 11,12,13,14 |
| 21,22,23,24 |
| 31,32,33,34 |
| ``` |
| |
| ## `test48.bas` |
| |
| Multi assignment |
| |
| ### Test File |
| |
| ```basic |
| a,b = 10 |
| print a,b |
| dim c(10) |
| a,c(a) = 2 |
| print a,c(2),c(10) |
| a$,b$="test" |
| print a$,b$ |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 10 10 |
| 2 0 2 |
| test test |
| ``` |
| |
| ## `test49.bas` |
| |
| Matrix determinant |
| |
| ### Test File |
| |
| ```basic |
| width 120 |
| dim a(7,7),b(7,7) |
| mat read a |
| mat print a; |
| print |
| data 58,71,67,36,35,19,60 |
| data 50,71,71,56,45,20,52 |
| data 64,40,84,50,51,43,69 |
| data 31,28,41,54,31,18,33 |
| data 45,23,46,38,50,43,50 |
| data 41,10,28,17,33,41,46 |
| data 66,72,71,38,40,27,69 |
| mat b=inv(a) |
| mat print b |
| print det |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 58 71 67 36 35 19 60 |
| 50 71 71 56 45 20 52 |
| 64 40 84 50 51 43 69 |
| 31 28 41 54 31 18 33 |
| 45 23 46 38 50 43 50 |
| 41 10 28 17 33 41 46 |
| 66 72 71 38 40 27 69 |
| |
| 9.636025e+07 320206 -537449 2323650 -1.135486e+07 3.019632e+07 |
| -9.650941e+07 |
| 4480 15 -25 108 -528 1404 -4487 |
| -39436 -131 220 -951 4647 -12358 39497 |
| 273240 908 -1524 6589 -32198 85625 -273663 |
| -1846174 -6135 10297 -44519 217549 -578534 1849032 |
| 1.315035e+07 43699 -73346 317110 -1549606 4120912 -1.31707e+07 |
| |
| -9.636079e+07 -320208 537452 -2323663 1.135493e+07 -3.019649e+07 |
| 9.650995e+07 |
| 1 |
| ``` |
| |
| ### Notes |
| |
| Output will differ because NuttX does not use scientific notation in output. |
| Some minor rounding differences may also be expected. |
| |
| ## `test50.bas` |
| |
| `min` and `max` function |
| |
| ### Test File |
| |
| ```basic |
| print min(1,2) |
| print min(2,1) |
| print min(-0.3,0.3) |
| print min(-0.3,4) |
| print max(1,2) |
| print max(2,1) |
| print max(-0.3,0.3) |
| print max(-0.3,4) |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| 1 |
| 1 |
| -0.3 |
| -0.3 |
| 2 |
| 2 |
| 0.3 |
| 4 |
| ``` |
| |
| ## `test51.bas` |
| |
| Print items |
| |
| ### Test File |
| |
| ```basic |
| PRINT "Line 1";TAB(78);1.23456789 |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| Line 1 1.234568 |
| ``` |
| |
| ## `test52.bas` |
| |
| `MAT INPUT` |
| |
| ### Test File |
| |
| ```basic |
| dim a(2,2) |
| mat input a |
| mat print a |
| mat input a |
| mat print a |
| ``` |
| |
| ### Test File |
| |
| ```basic |
| 1,2,3,4,5 |
| 1 |
| 3,4 |
| ``` |
| |
| ### Expected Result |
| |
| ``` |
| ? |
| 1 2 |
| 3 4 |
| ? ? |
| 1 0 |
| 3 4 |
| ``` |