summaryrefslogtreecommitdiff
path: root/apps/examples
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-11-07 14:02:53 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-11-07 14:02:53 -0600
commit20c645e1cdf2456d09e3c85d2b21e4c32b88b83e (patch)
treec6832ac6658ee21dfd732cada7a06196f13fcd0f /apps/examples
parent7711da2981698ff86c0b7a4b49bbc44f0f26a834 (diff)
downloadnuttx-20c645e1cdf2456d09e3c85d2b21e4c32b88b83e.tar.gz
nuttx-20c645e1cdf2456d09e3c85d2b21e4c32b88b83e.tar.bz2
nuttx-20c645e1cdf2456d09e3c85d2b21e4c32b88b83e.zip
BAS: Move test files from apps/interpreter/bas to apps/examples/bas
Diffstat (limited to 'apps/examples')
-rw-r--r--apps/examples/bas/README.txt1577
-rw-r--r--apps/examples/bas/tests/test01.bas35
-rw-r--r--apps/examples/bas/tests/test02.bas30
-rw-r--r--apps/examples/bas/tests/test03.bas56
-rw-r--r--apps/examples/bas/tests/test04.bas34
-rw-r--r--apps/examples/bas/tests/test05.bas31
-rw-r--r--apps/examples/bas/tests/test06.bas42
-rw-r--r--apps/examples/bas/tests/test07.bas25
-rw-r--r--apps/examples/bas/tests/test08.bas34
-rw-r--r--apps/examples/bas/tests/test09.bas31
-rw-r--r--apps/examples/bas/tests/test10.bas80
-rw-r--r--apps/examples/bas/tests/test11.bas30
-rw-r--r--apps/examples/bas/tests/test12.bas32
-rw-r--r--apps/examples/bas/tests/test13.bas26
-rw-r--r--apps/examples/bas/tests/test14.bas242
-rw-r--r--apps/examples/bas/tests/test15.bas41
-rw-r--r--apps/examples/bas/tests/test16.bas33
-rw-r--r--apps/examples/bas/tests/test17.bas40
-rw-r--r--apps/examples/bas/tests/test18.bas43
-rw-r--r--apps/examples/bas/tests/test19.bas45
-rw-r--r--apps/examples/bas/tests/test20.bas46
-rw-r--r--apps/examples/bas/tests/test21.bas43
-rw-r--r--apps/examples/bas/tests/test22.bas40
-rw-r--r--apps/examples/bas/tests/test23.bas40
-rw-r--r--apps/examples/bas/tests/test24.bas36
-rw-r--r--apps/examples/bas/tests/test25.bas50
-rw-r--r--apps/examples/bas/tests/test26.bas26
-rw-r--r--apps/examples/bas/tests/test27.bas33
-rw-r--r--apps/examples/bas/tests/test28.bas26
-rw-r--r--apps/examples/bas/tests/test29.bas32
-rw-r--r--apps/examples/bas/tests/test30.bas22
-rw-r--r--apps/examples/bas/tests/test31.bas43
-rw-r--r--apps/examples/bas/tests/test32.bas28
-rw-r--r--apps/examples/bas/tests/test33.bas39
-rw-r--r--apps/examples/bas/tests/test34.bas43
-rw-r--r--apps/examples/bas/tests/test35.bas32
-rw-r--r--apps/examples/bas/tests/test36.bas31
-rw-r--r--apps/examples/bas/tests/test37.bas24
-rw-r--r--apps/examples/bas/tests/test38.bas57
-rw-r--r--apps/examples/bas/tests/test39.bas32
-rw-r--r--apps/examples/bas/tests/test40.bas26
-rw-r--r--apps/examples/bas/tests/test41.bas32
-rw-r--r--apps/examples/bas/tests/test42.bas36
-rw-r--r--apps/examples/bas/tests/test43.bas41
-rw-r--r--apps/examples/bas/tests/test44.bas38
-rw-r--r--apps/examples/bas/tests/test45.bas31
-rw-r--r--apps/examples/bas/tests/test46.bas22
-rw-r--r--apps/examples/bas/tests/test47.bas36
-rw-r--r--apps/examples/bas/tests/test48.bas30
-rw-r--r--apps/examples/bas/tests/test49.bas54
-rw-r--r--apps/examples/bas/tests/test50.bas36
-rw-r--r--apps/examples/bas/tests/test51.bas23
-rw-r--r--apps/examples/bas/tests/test52.bas37
53 files changed, 3672 insertions, 0 deletions
diff --git a/apps/examples/bas/README.txt b/apps/examples/bas/README.txt
new file mode 100644
index 000000000..0903bbbf7
--- /dev/null
+++ b/apps/examples/bas/README.txt
@@ -0,0 +1,1577 @@
+test01.bas
+==========
+Scalar variable assignment
+
+Test File
+---------
+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
+ 2e-06
+ 2e-07
+
+test01.bas
+==========
+Array variable assignment
+
+Test File
+---------
+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
+
+test01.bas
+==========
+FOR loops
+
+Test File
+---------
+ 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
+
+test01.bas
+==========
+REPEAT UNTIL loop
+
+Test File
+---------
+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
+
+test01.bas
+==========
+GOSUB RETURN subroutines
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Recursive function without arguments
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Recursive function with arguments
+
+Test File
+---------
+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
+
+test01.bas
+==========
+DATA, READ and RESTORE
+
+Test File
+---------
+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$
+ ^
+
+test01.bas
+==========
+LOCAL variables
+
+Test File
+---------
+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
+
+test01.bas
+==========
+PRINT USING
+
+Test File
+---------
+ 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
+
+test01.bas
+==========
+OPEN and LINE INPUT
+
+Test File
+---------
+10 open "i",1,"test.bas"
+20 while not eof(1)
+30 line input #1,a$
+40 print a$
+50 wend
+
+Expected Result
+---------------
+10 open "i",1,"test.bas"
+20 while not eof(1)
+30 line input #1,a$
+40 print a$
+50 wend
+
+test01.bas
+==========
+Exception handling
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Unnumbered lines
+
+Test File
+---------
+print "a"
+goto 20
+print "b"
+20 print "c"
+
+Expected Result
+---------------
+a
+c
+
+test01.bas
+==========
+SELECT CASE
+
+Test File
+---------
+ 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
+
+test01.bas
+==========
+FIELD, PUT and GET
+
+Test File
+---------
+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
+
+test01.bas
+==========
+SWAP
+
+Test File
+---------
+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
+
+test01.bas
+==========
+DO, EXIT DO, LOOP
+
+Test File
+---------
+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
+
+test01.bas
+==========
+DO WHILE, LOOP
+
+Test File
+---------
+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
+
+test01.bas
+==========
+ELSEIF
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Caller trace
+
+Test File
+---------
+ 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
+ ^
+
+test01.bas
+==========
+Matrix assignment
+
+Test File
+---------
+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
+
+test01.bas
+==========
+MAT PRINT
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Matrix addition and subtraction
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Matrix multiplication
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Matrix scalar multiplication
+
+Test File
+---------
+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
+
+test01.bas
+==========
+MAT READ
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Matrix inversion
+
+Test File
+---------
+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
+
+test01.bas
+==========
+TDL BASIC FNRETURN/FNEND
+
+Test File
+---------
+def fnfac(n)
+ if n=1 then fnreturn 1
+fnend n*fnfac(n-1)
+
+print fnfac(10)
+
+Expected Result
+---------------
+ 3628800
+
+test01.bas
+==========
+TDL INSTR
+
+Test File
+---------
+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?
+
+test01.bas
+==========
+Type mismatch check
+
+Test File
+---------
+print 1+"a"
+
+Expected Result
+---------------
+Error: Invalid binary operand at: end of program
+
+test01.bas
+==========
+PRINT default format
+
+Test File
+---------
+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
+---------------
+ 1.333333e-08 1e-08
+ 1.333333e-07 1e-07
+ 1.333333e-06 1e-06
+ 1.333333e-05 1e-05
+ 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
+ 1.333333e+07 1e+07
+ 1.333333e+08 1e+08
+
+test01.bas
+==========
+SUB routines
+
+Test File
+---------
+PUTS("abc")
+END
+
+SUB PUTS(s$)
+ FOR i=1 to LEN(s$) : print mid$(s$,i,1); : NEXT
+ PRINT
+END SUB
+
+Expected Result
+---------------
+abc
+
+test01.bas
+==========
+OPEN FOR BINARY
+
+Test File
+---------
+open "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 "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 "test.out"
+
+Expected Result
+---------------
+xyz!
+ 0.333333
+ 9999
+
+test01.bas
+==========
+OPTION BASE
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Real to integer conversion
+
+Test File
+---------
+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
+
+test01.bas
+==========
+OPEN file locking
+
+Test File
+---------
+on error goto 10
+print "opening file"
+open "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
+
+test01.bas
+==========
+LINE INPUT reaching EOF
+
+Test File
+---------
+10 open "i",1,"test.ref"
+20 while not eof(1)
+30 line input #1,a$
+40 if a$="abc" then print a$; else print "def"
+50 wend
+
+Result
+------
+ Output should match test.ref
+
+test01.bas
+==========
+MAT REDIM
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Nested function and procedure calls
+
+Test File
+---------
+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
+
+test01.bas
+==========
+IMAGE
+
+Test File
+---------
+ d=3.1
+ print using "#.#";d
+ print using 10;d
+10 image #.##
+
+Expected Result
+---------------
+3.1
+3.10
+
+test01.bas
+==========
+EXIT FUNCTION
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Arithmetic
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Matrix multiplication size checks
+
+Test File
+---------
+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
+ ^
+
+test01.bas
+==========
+DELETE
+
+Test File
+---------
+10 print 10
+20 print 20
+30 print 30
+40 print 40
+50 print 50
+60 print 60
+70 print 70
+
+Usage
+-----
+
+load "test.bas"
+delete -20
+delete 60-
+delete 30-40
+delete 15
+list
+
+Expected Result
+---------------
+Error: No such line at: 15
+50 print 50
+
+test01.bas
+==========
+MID$ on left side
+
+Test File
+---------
+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
+
+test01.bas
+==========
+END used without program
+
+Test File
+---------
+for i=1 to 10:print i;:next i:end
+
+Expected Result
+---------------
+ 1 2 3 4 5 6 7 8 9 10
+
+test01.bas
+==========
+MAT WRITE
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Multi assignment
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Matrix determinant
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Min and max function
+
+Test File
+---------
+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
+
+test01.bas
+==========
+Print items
+
+Test File
+---------
+PRINT "Line 1";TAB(78);1.23456789
+
+Expected Result
+---------------
+Line 1
+ 1.234568
+
+test01.bas
+==========
+MAT INPUT
+
+Test File
+---------
+dim a(2,2)
+mat input a
+mat print a
+mat input a
+mat print a
+
+Test File
+---------
+1,2,3,4,5
+1
+3,4
+
+Expected Result
+---------------
+?
+ 1 2
+ 3 4
+? ?
+ 1 0
+ 3 4
diff --git a/apps/examples/bas/tests/test01.bas b/apps/examples/bas/tests/test01.bas
new file mode 100644
index 000000000..b89c7a73a
--- /dev/null
+++ b/apps/examples/bas/tests/test01.bas
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+echo -n $0: 'Scalar variable assignment... '
+
+cat >test.bas <<eof
+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
+eof
+
+cat >test.ref <<eof
+ 1
+hello
+ 0.0002
+ 2e-06
+ 2e-07
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test02.bas b/apps/examples/bas/tests/test02.bas
new file mode 100644
index 000000000..88615fa61
--- /dev/null
+++ b/apps/examples/bas/tests/test02.bas
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+echo -n $0: 'Array variable assignment... '
+
+cat >test.bas <<eof
+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
+eof
+
+cat >test.ref <<eof
+ 10
+ 11
+ 12
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test03.bas b/apps/examples/bas/tests/test03.bas
new file mode 100644
index 000000000..b7b1496e0
--- /dev/null
+++ b/apps/examples/bas/tests/test03.bas
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+echo -n $0: 'FOR loops... '
+
+cat >test.bas <<eof
+ 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
+eof
+
+cat >test.ref <<eof
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 0
+ 1
+ 0
+
+a
+aa
+aaa
+aaaa
+aaaaa
+aaaaaa
+aaaaaaa
+aaaaaaaa
+aaaaaaaaa
+aaaaaaaaaa
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test04.bas b/apps/examples/bas/tests/test04.bas
new file mode 100644
index 000000000..547f4ec28
--- /dev/null
+++ b/apps/examples/bas/tests/test04.bas
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+echo -n $0: 'REPEAT UNTIL loop... '
+
+cat >test.bas <<eof
+10 a=1
+20 repeat
+30 print a
+40 a=a+1
+50 until a=10
+eof
+
+cat >test.ref <<eof
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test05.bas b/apps/examples/bas/tests/test05.bas
new file mode 100644
index 000000000..28322325f
--- /dev/null
+++ b/apps/examples/bas/tests/test05.bas
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+echo -n $0: 'GOSUB RETURN subroutines... '
+
+cat >test5.bas <<eof
+10 gosub 100
+20 gosub 100
+30 end
+100 gosub 200
+110 gosub 200
+120 return
+200 print "hello, world":return
+eof
+
+cat >test5.ref <<eof
+hello, world
+hello, world
+hello, world
+hello, world
+eof
+
+sh ./test/runbas test5.bas >test5.data
+
+if cmp test5.ref test5.data
+then
+ rm -f test5.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test06.bas b/apps/examples/bas/tests/test06.bas
new file mode 100644
index 000000000..8a5402d04
--- /dev/null
+++ b/apps/examples/bas/tests/test06.bas
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+echo -n $0: 'Recursive function without arguments... '
+
+cat >test.bas <<eof
+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
+eof
+
+cat >test.ref <<eof
+ 10
+ 9
+ 8
+ 7
+ 6
+ 5
+ 4
+ 3
+ 2
+ 1
+ 0
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test07.bas b/apps/examples/bas/tests/test07.bas
new file mode 100644
index 000000000..57f2899a6
--- /dev/null
+++ b/apps/examples/bas/tests/test07.bas
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+echo -n $0: 'Recursive function with arguments... '
+
+cat >test.bas <<eof
+10 def fna(x)
+20 if x=0 then r=1 else r=x*fna(x-1)
+30 =r
+40 print fna(7)
+eof
+
+cat >test.ref <<eof
+ 5040
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test08.bas b/apps/examples/bas/tests/test08.bas
new file mode 100644
index 000000000..82209c91b
--- /dev/null
+++ b/apps/examples/bas/tests/test08.bas
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+echo -n $0: 'DATA, READ and RESTORE... '
+
+cat >test.bas <<eof
+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
+eof
+
+cat >test.ref <<'eof'
+j=a
+j=c k=d
+Error: end of `data' in line 80 at:
+80 read j$,k$
+ ^
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test09.bas b/apps/examples/bas/tests/test09.bas
new file mode 100644
index 000000000..d751b2474
--- /dev/null
+++ b/apps/examples/bas/tests/test09.bas
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+echo -n $0: 'LOCAL variables... '
+
+cat >test.bas <<eof
+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
+eof
+
+cat >test.ref <<eof
+ 3
+ 5
+ 3
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test10.bas b/apps/examples/bas/tests/test10.bas
new file mode 100644
index 000000000..35d65ca4a
--- /dev/null
+++ b/apps/examples/bas/tests/test10.bas
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+echo -n $0: 'PRINT USING... '
+
+cat >test.bas <<'eof'
+ 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"
+eof
+
+cat >test.ref <<'eof'
+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
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test11.bas b/apps/examples/bas/tests/test11.bas
new file mode 100644
index 000000000..88801c730
--- /dev/null
+++ b/apps/examples/bas/tests/test11.bas
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+echo -n $0: 'OPEN and LINE INPUT... '
+
+cat >test.bas <<'eof'
+10 open "i",1,"test.bas"
+20 while not eof(1)
+30 line input #1,a$
+40 print a$
+50 wend
+eof
+
+cat >test.ref <<eof
+10 open "i",1,"test.bas"
+20 while not eof(1)
+30 line input #1,a$
+40 print a$
+50 wend
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test12.bas b/apps/examples/bas/tests/test12.bas
new file mode 100644
index 000000000..b78f53747
--- /dev/null
+++ b/apps/examples/bas/tests/test12.bas
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+echo -n $0: 'Exception handling... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<eof
+global handler 1 caught error in line 20
+local handler caught error in line 60
+global handler 2 caught error in line 90
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test13.bas b/apps/examples/bas/tests/test13.bas
new file mode 100644
index 000000000..c4e3e3d2b
--- /dev/null
+++ b/apps/examples/bas/tests/test13.bas
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+echo -n $0: 'Unnumbered lines... '
+
+cat >test.bas <<'eof'
+print "a"
+goto 20
+print "b"
+20 print "c"
+eof
+
+cat >test.ref <<eof
+a
+c
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test14.bas b/apps/examples/bas/tests/test14.bas
new file mode 100644
index 000000000..1699d3bd9
--- /dev/null
+++ b/apps/examples/bas/tests/test14.bas
@@ -0,0 +1,242 @@
+#!/bin/sh
+
+echo -n $0: 'SELECT CASE... '
+
+cat >test.bas <<'eof'
+ 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
+eof
+
+cat >test.ref <<eof
+ 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
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test15.bas b/apps/examples/bas/tests/test15.bas
new file mode 100644
index 000000000..5d4c7545b
--- /dev/null
+++ b/apps/examples/bas/tests/test15.bas
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+echo -n $0: 'FIELD, PUT and GET... '
+
+cat >test.bas <<'eof'
+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"
+eof
+
+cat >test.ref <<eof
+before field a$=a
+a$=hi ya
+after close a$=
+after get b$=hi ya
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test16.bas b/apps/examples/bas/tests/test16.bas
new file mode 100644
index 000000000..9e9942381
--- /dev/null
+++ b/apps/examples/bas/tests/test16.bas
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+echo -n $0: 'SWAP... '
+
+cat >test.bas <<'eof'
+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)
+eof
+
+cat >test.ref <<'eof'
+a= 1 b= 2
+a= 2 b= 1
+a$(1,0)=ab$(0,1)=b
+a$(1,0)=bb$(0,1)=a
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test17.bas b/apps/examples/bas/tests/test17.bas
new file mode 100644
index 000000000..544e790f8
--- /dev/null
+++ b/apps/examples/bas/tests/test17.bas
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+echo -n $0: 'DO, EXIT DO, LOOP... '
+
+cat >test.bas <<'eof'
+print "loop started"
+i=1
+do
+ print "i is";i
+ i=i+1
+ if i>10 then exit do
+loop
+print "loop ended"
+eof
+
+cat >test.ref <<'eof'
+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
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test18.bas b/apps/examples/bas/tests/test18.bas
new file mode 100644
index 000000000..2ad4d8ec1
--- /dev/null
+++ b/apps/examples/bas/tests/test18.bas
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+echo -n $0: 'DO WHILE, LOOP... '
+
+cat >test.bas <<'eof'
+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"
+eof
+
+cat >test.ref <<'eof'
+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
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test19.bas b/apps/examples/bas/tests/test19.bas
new file mode 100644
index 000000000..9f0a471f4
--- /dev/null
+++ b/apps/examples/bas/tests/test19.bas
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+echo -n $0: 'ELSEIF... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<'eof'
+1a
+2a
+3a
+1b
+2b
+3b
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test20.bas b/apps/examples/bas/tests/test20.bas
new file mode 100644
index 000000000..c8a1a06e1
--- /dev/null
+++ b/apps/examples/bas/tests/test20.bas
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+echo -n $0: 'Caller trace... '
+
+cat >test.bas <<'eof'
+ 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
+eof
+
+cat >test.ref <<'eof'
+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
+ ^
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test21.bas b/apps/examples/bas/tests/test21.bas
new file mode 100644
index 000000000..407430d4c
--- /dev/null
+++ b/apps/examples/bas/tests/test21.bas
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+echo -n $0: 'Matrix assignment... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<'eof'
+ 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
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test22.bas b/apps/examples/bas/tests/test22.bas
new file mode 100644
index 000000000..73e2317f9
--- /dev/null
+++ b/apps/examples/bas/tests/test22.bas
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+echo -n $0: 'MAT PRINT... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<'eof'
+ 11.00 21.00
+ 12.00 22.00
+ 11.00 12.00
+ 21.00 22.00
+
+ 11.00 12.00
+ 21.00 22.00
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test23.bas b/apps/examples/bas/tests/test23.bas
new file mode 100644
index 000000000..60b37da89
--- /dev/null
+++ b/apps/examples/bas/tests/test23.bas
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+echo -n $0: 'Matrix addition and subtraction... '
+
+cat >test.bas <<'eof'
+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$
+eof
+
+cat >test.ref <<'eof'
+ 0 0
+ 0 2.5
+ 0 0
+ 0 -0.5
+
+hi
+
+hihi
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test24.bas b/apps/examples/bas/tests/test24.bas
new file mode 100644
index 000000000..40037cdcd
--- /dev/null
+++ b/apps/examples/bas/tests/test24.bas
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+echo -n $0: 'Matrix multiplication... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<'eof'
+ 1 2 3
+ 3 2 1
+
+ 1 2
+ 2 1
+ 3 3
+
+ 14 13
+ 10 11
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test25.bas b/apps/examples/bas/tests/test25.bas
new file mode 100644
index 000000000..07132f8c5
--- /dev/null
+++ b/apps/examples/bas/tests/test25.bas
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+echo -n $0: 'Matrix scalar multiplication... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<'eof'
+ 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
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test26.bas b/apps/examples/bas/tests/test26.bas
new file mode 100644
index 000000000..f7b85687a
--- /dev/null
+++ b/apps/examples/bas/tests/test26.bas
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+echo -n $0: 'MAT READ... '
+
+cat >test.bas <<'eof'
+dim a(3,3)
+data 5,5,5,8,8,8,3,3
+mat read a(2,3)
+mat print a
+eof
+
+cat >test.ref <<'eof'
+ 5 5 5
+ 8 8 8
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test27.bas b/apps/examples/bas/tests/test27.bas
new file mode 100644
index 000000000..f90c0c236
--- /dev/null
+++ b/apps/examples/bas/tests/test27.bas
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+echo -n $0: 'Matrix inversion... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<'eof'
+ 1 2
+ 3 4
+-2 1
+ 1.5 -0.5
+ 1 0
+ 0 1
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test28.bas b/apps/examples/bas/tests/test28.bas
new file mode 100644
index 000000000..fa22845bb
--- /dev/null
+++ b/apps/examples/bas/tests/test28.bas
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+echo -n $0: 'TDL BASIC FNRETURN/FNEND... '
+
+cat >test.bas <<'eof'
+def fnfac(n)
+ if n=1 then fnreturn 1
+fnend n*fnfac(n-1)
+
+print fnfac(10)
+eof
+
+cat >test.ref <<'eof'
+ 3628800
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test29.bas b/apps/examples/bas/tests/test29.bas
new file mode 100644
index 000000000..945f33e4d
--- /dev/null
+++ b/apps/examples/bas/tests/test29.bas
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+echo -n $0: 'TDL INSTR... '
+
+cat >test.bas <<'eof'
+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?"
+eof
+
+cat >test.ref <<'eof'
+ 4 = 4?
+ 0 = 0?
+ 3 = 3?
+ 8 = 8?
+ 0 = 0?
+ 8 = 8?
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test30.bas b/apps/examples/bas/tests/test30.bas
new file mode 100644
index 000000000..0d7b29a26
--- /dev/null
+++ b/apps/examples/bas/tests/test30.bas
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+echo -n $0: 'Type mismatch check... '
+
+cat >test.bas <<'eof'
+print 1+"a"
+eof
+
+cat >test.ref <<'eof'
+Error: Invalid binary operand at: end of program
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test31.bas b/apps/examples/bas/tests/test31.bas
new file mode 100644
index 000000000..7c4b79017
--- /dev/null
+++ b/apps/examples/bas/tests/test31.bas
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+echo -n $0: 'PRINT default format... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<'eof'
+ 1.333333e-08 1e-08
+ 1.333333e-07 1e-07
+ 1.333333e-06 1e-06
+ 1.333333e-05 1e-05
+ 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
+ 1.333333e+07 1e+07
+ 1.333333e+08 1e+08
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test32.bas b/apps/examples/bas/tests/test32.bas
new file mode 100644
index 000000000..d080d3c27
--- /dev/null
+++ b/apps/examples/bas/tests/test32.bas
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+echo -n $0: 'SUB routines... '
+
+cat >test.bas <<'eof'
+PUTS("abc")
+END
+
+SUB PUTS(s$)
+ FOR i=1 to LEN(s$) : print mid$(s$,i,1); : NEXT
+ PRINT
+END SUB
+eof
+
+cat >test.ref <<'eof'
+abc
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test33.bas b/apps/examples/bas/tests/test33.bas
new file mode 100644
index 000000000..adc53dd62
--- /dev/null
+++ b/apps/examples/bas/tests/test33.bas
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+echo -n $0: 'OPEN FOR BINARY... '
+
+cat >test.bas <<'eof'
+open "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 "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 "test.out"
+eof
+
+cat >test.ref <<'eof'
+xyz!
+ 0.333333
+ 9999
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test34.bas b/apps/examples/bas/tests/test34.bas
new file mode 100644
index 000000000..0419284d8
--- /dev/null
+++ b/apps/examples/bas/tests/test34.bas
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+echo -n $0: 'OPTION BASE... '
+
+cat >test.bas <<'eof'
+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)
+eof
+
+cat >test.ref <<'eof'
+ 1
+ 2
+ 1
+ 2
+ 10
+ 20
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test35.bas b/apps/examples/bas/tests/test35.bas
new file mode 100644
index 000000000..448fc0dfa
--- /dev/null
+++ b/apps/examples/bas/tests/test35.bas
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+echo -n $0: 'Real to integer conversion... '
+
+cat >test.bas <<'eof'
+a%=1.2
+print a%
+a%=1.7
+print a%
+a%=-0.2
+print a%
+a%=-0.7
+print a%
+eof
+
+cat >test.ref <<'eof'
+ 1
+ 2
+ 0
+-1
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test36.bas b/apps/examples/bas/tests/test36.bas
new file mode 100644
index 000000000..b26cffae3
--- /dev/null
+++ b/apps/examples/bas/tests/test36.bas
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+echo -n $0: 'OPEN file locking... '
+
+cat >test.bas <<'eof'
+on error goto 10
+print "opening file"
+open "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"
+eof
+
+cat >test.ref <<'eof'
+opening file
+open succeeded
+opening file
+open failed
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test37.bas b/apps/examples/bas/tests/test37.bas
new file mode 100644
index 000000000..ca0d446eb
--- /dev/null
+++ b/apps/examples/bas/tests/test37.bas
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+echo -n $0: 'LINE INPUT reaching EOF... '
+
+cat >test.bas <<'eof'
+10 open "i",1,"test.ref"
+20 while not eof(1)
+30 line input #1,a$
+40 if a$="abc" then print a$; else print "def"
+50 wend
+eof
+
+awk 'BEGIN{ printf("abc") }' </dev/null >test.ref
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test38.bas b/apps/examples/bas/tests/test38.bas
new file mode 100644
index 000000000..3733d0ad4
--- /dev/null
+++ b/apps/examples/bas/tests/test38.bas
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+echo -n $0: 'MAT REDIM... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<'eof'
+ 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
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test39.bas b/apps/examples/bas/tests/test39.bas
new file mode 100644
index 000000000..25c33d475
--- /dev/null
+++ b/apps/examples/bas/tests/test39.bas
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+echo -n $0: 'Nested function and procedure calls... '
+
+cat >test.bas <<'eof'
+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)
+eof
+
+cat >test.ref <<'eof'
+ 6
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test40.bas b/apps/examples/bas/tests/test40.bas
new file mode 100644
index 000000000..d2c4eb0fe
--- /dev/null
+++ b/apps/examples/bas/tests/test40.bas
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+echo -n $0: 'IMAGE... '
+
+cat >test.bas <<'eof'
+ d=3.1
+ print using "#.#";d
+ print using 10;d
+10 image #.##
+eof
+
+cat >test.ref <<'eof'
+3.1
+3.10
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test41.bas b/apps/examples/bas/tests/test41.bas
new file mode 100644
index 000000000..58bc28c74
--- /dev/null
+++ b/apps/examples/bas/tests/test41.bas
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+echo -n $0: 'EXIT FUNCTION... '
+
+cat >test.bas <<'eof'
+function f(c)
+print "f running"
+if (c) then f=42 : exit function
+f=43
+end function
+
+print f(0)
+print f(1)
+eof
+
+cat >test.ref <<'eof'
+f running
+ 43
+f running
+ 42
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test42.bas b/apps/examples/bas/tests/test42.bas
new file mode 100644
index 000000000..f448251a4
--- /dev/null
+++ b/apps/examples/bas/tests/test42.bas
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+echo -n $0: 'Arithmetic... '
+
+cat >test.bas <<eof
+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)
+eof
+
+cat >test.ref <<eof
+ 1
+-2
+-3
+ 2
+-2
+ 2
+-0.3
+ 0.3
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test43.bas b/apps/examples/bas/tests/test43.bas
new file mode 100644
index 000000000..56d993a0f
--- /dev/null
+++ b/apps/examples/bas/tests/test43.bas
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+echo -n $0: 'Matrix multiplication size checks... '
+
+cat >test.bas <<eof
+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
+eof
+
+cat >test.ref <<eof
+ 17
+ 47
+ 77
+Error: Dimension mismatch in line 14 at:
+mat c=a*b
+ ^
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test44.bas b/apps/examples/bas/tests/test44.bas
new file mode 100644
index 000000000..25b1ec3de
--- /dev/null
+++ b/apps/examples/bas/tests/test44.bas
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+echo -n $0: 'DELETE... '
+
+cat >test.bas <<eof
+10 print 10
+20 print 20
+30 print 30
+40 print 40
+50 print 50
+60 print 60
+70 print 70
+eof
+
+cat >test.input <<eof
+load "test.bas"
+delete -20
+delete 60-
+delete 30-40
+delete 15
+list
+eof
+
+cat >test.ref <<eof
+Error: No such line at: 15
+50 print 50
+eof
+
+sh ./test/runbas <test.input >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test45.bas b/apps/examples/bas/tests/test45.bas
new file mode 100644
index 000000000..88878c2d0
--- /dev/null
+++ b/apps/examples/bas/tests/test45.bas
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+echo -n $0: 'MID$ on left side... '
+
+cat >test.bas <<'eof'
+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$
+eof
+
+cat >test.ref <<'eof'
+
+01234ABCD9
+01234ABCD9
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test46.bas b/apps/examples/bas/tests/test46.bas
new file mode 100644
index 000000000..4537f3e56
--- /dev/null
+++ b/apps/examples/bas/tests/test46.bas
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+echo -n $0: 'END used without program... '
+
+cat >test.bas <<'eof'
+for i=1 to 10:print i;:next i:end
+eof
+
+cat >test.ref <<'eof'
+ 1 2 3 4 5 6 7 8 9 10
+eof
+
+sh ./test/runbas <test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test47.bas b/apps/examples/bas/tests/test47.bas
new file mode 100644
index 000000000..13eb94db2
--- /dev/null
+++ b/apps/examples/bas/tests/test47.bas
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+echo -n $0: 'MAT WRITE... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<'eof'
+ 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
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test48.bas b/apps/examples/bas/tests/test48.bas
new file mode 100644
index 000000000..fe2a9e870
--- /dev/null
+++ b/apps/examples/bas/tests/test48.bas
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+echo -n $0: 'Multi assignment... '
+
+cat >test.bas <<'eof'
+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$
+eof
+
+cat >test.ref <<'eof'
+ 10 10
+ 2 0 2
+test test
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test49.bas b/apps/examples/bas/tests/test49.bas
new file mode 100644
index 000000000..0d8bcb455
--- /dev/null
+++ b/apps/examples/bas/tests/test49.bas
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+echo -n $0: 'Matrix determinant... '
+
+cat >test.bas <<'eof'
+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
+eof
+
+cat >test.ref <<'eof'
+ 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
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test50.bas b/apps/examples/bas/tests/test50.bas
new file mode 100644
index 000000000..4155ca52b
--- /dev/null
+++ b/apps/examples/bas/tests/test50.bas
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+echo -n $0: 'Min and max function... '
+
+cat >test.bas <<'eof'
+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)
+eof
+
+cat >test.ref <<'eof'
+ 1
+ 1
+-0.3
+-0.3
+ 2
+ 2
+ 0.3
+ 4
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test51.bas b/apps/examples/bas/tests/test51.bas
new file mode 100644
index 000000000..9341dd09b
--- /dev/null
+++ b/apps/examples/bas/tests/test51.bas
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+echo -n $0: 'Print items... '
+
+cat >test.bas <<'eof'
+PRINT "Line 1";TAB(78);1.23456789
+eof
+
+cat >test.ref <<'eof'
+Line 1
+ 1.234568
+eof
+
+sh ./test/runbas test.bas >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi
diff --git a/apps/examples/bas/tests/test52.bas b/apps/examples/bas/tests/test52.bas
new file mode 100644
index 000000000..dc524f645
--- /dev/null
+++ b/apps/examples/bas/tests/test52.bas
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+echo -n $0: 'MAT INPUT... '
+
+cat >test.bas <<'eof'
+dim a(2,2)
+mat input a
+mat print a
+mat input a
+mat print a
+eof
+
+cat >test.input <<'eof'
+1,2,3,4,5
+1
+3,4
+eof
+
+cat >test.ref <<'eof'
+?
+ 1 2
+ 3 4
+? ?
+ 1 0
+ 3 4
+eof
+
+sh ./test/runbas test.bas <test.input >test.data
+
+if cmp test.ref test.data
+then
+ rm -f test.*
+ echo passed
+else
+ echo failed
+ exit 1
+fi