From 20c645e1cdf2456d09e3c85d2b21e4c32b88b83e Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Fri, 7 Nov 2014 14:02:53 -0600 Subject: BAS: Move test files from apps/interpreter/bas to apps/examples/bas --- apps/examples/bas/README.txt | 1577 ++++++++++++++++++++++++++++++++++++ apps/examples/bas/tests/test01.bas | 35 + apps/examples/bas/tests/test02.bas | 30 + apps/examples/bas/tests/test03.bas | 56 ++ apps/examples/bas/tests/test04.bas | 34 + apps/examples/bas/tests/test05.bas | 31 + apps/examples/bas/tests/test06.bas | 42 + apps/examples/bas/tests/test07.bas | 25 + apps/examples/bas/tests/test08.bas | 34 + apps/examples/bas/tests/test09.bas | 31 + apps/examples/bas/tests/test10.bas | 80 ++ apps/examples/bas/tests/test11.bas | 30 + apps/examples/bas/tests/test12.bas | 32 + apps/examples/bas/tests/test13.bas | 26 + apps/examples/bas/tests/test14.bas | 242 ++++++ apps/examples/bas/tests/test15.bas | 41 + apps/examples/bas/tests/test16.bas | 33 + apps/examples/bas/tests/test17.bas | 40 + apps/examples/bas/tests/test18.bas | 43 + apps/examples/bas/tests/test19.bas | 45 + apps/examples/bas/tests/test20.bas | 46 ++ apps/examples/bas/tests/test21.bas | 43 + apps/examples/bas/tests/test22.bas | 40 + apps/examples/bas/tests/test23.bas | 40 + apps/examples/bas/tests/test24.bas | 36 + apps/examples/bas/tests/test25.bas | 50 ++ apps/examples/bas/tests/test26.bas | 26 + apps/examples/bas/tests/test27.bas | 33 + apps/examples/bas/tests/test28.bas | 26 + apps/examples/bas/tests/test29.bas | 32 + apps/examples/bas/tests/test30.bas | 22 + apps/examples/bas/tests/test31.bas | 43 + apps/examples/bas/tests/test32.bas | 28 + apps/examples/bas/tests/test33.bas | 39 + apps/examples/bas/tests/test34.bas | 43 + apps/examples/bas/tests/test35.bas | 32 + apps/examples/bas/tests/test36.bas | 31 + apps/examples/bas/tests/test37.bas | 24 + apps/examples/bas/tests/test38.bas | 57 ++ apps/examples/bas/tests/test39.bas | 32 + apps/examples/bas/tests/test40.bas | 26 + apps/examples/bas/tests/test41.bas | 32 + apps/examples/bas/tests/test42.bas | 36 + apps/examples/bas/tests/test43.bas | 41 + apps/examples/bas/tests/test44.bas | 38 + apps/examples/bas/tests/test45.bas | 31 + apps/examples/bas/tests/test46.bas | 22 + apps/examples/bas/tests/test47.bas | 36 + apps/examples/bas/tests/test48.bas | 30 + apps/examples/bas/tests/test49.bas | 54 ++ apps/examples/bas/tests/test50.bas | 36 + apps/examples/bas/tests/test51.bas | 23 + apps/examples/bas/tests/test52.bas | 37 + 53 files changed, 3672 insertions(+) create mode 100644 apps/examples/bas/README.txt create mode 100644 apps/examples/bas/tests/test01.bas create mode 100644 apps/examples/bas/tests/test02.bas create mode 100644 apps/examples/bas/tests/test03.bas create mode 100644 apps/examples/bas/tests/test04.bas create mode 100644 apps/examples/bas/tests/test05.bas create mode 100644 apps/examples/bas/tests/test06.bas create mode 100644 apps/examples/bas/tests/test07.bas create mode 100644 apps/examples/bas/tests/test08.bas create mode 100644 apps/examples/bas/tests/test09.bas create mode 100644 apps/examples/bas/tests/test10.bas create mode 100644 apps/examples/bas/tests/test11.bas create mode 100644 apps/examples/bas/tests/test12.bas create mode 100644 apps/examples/bas/tests/test13.bas create mode 100644 apps/examples/bas/tests/test14.bas create mode 100644 apps/examples/bas/tests/test15.bas create mode 100644 apps/examples/bas/tests/test16.bas create mode 100644 apps/examples/bas/tests/test17.bas create mode 100644 apps/examples/bas/tests/test18.bas create mode 100644 apps/examples/bas/tests/test19.bas create mode 100644 apps/examples/bas/tests/test20.bas create mode 100644 apps/examples/bas/tests/test21.bas create mode 100644 apps/examples/bas/tests/test22.bas create mode 100644 apps/examples/bas/tests/test23.bas create mode 100644 apps/examples/bas/tests/test24.bas create mode 100644 apps/examples/bas/tests/test25.bas create mode 100644 apps/examples/bas/tests/test26.bas create mode 100644 apps/examples/bas/tests/test27.bas create mode 100644 apps/examples/bas/tests/test28.bas create mode 100644 apps/examples/bas/tests/test29.bas create mode 100644 apps/examples/bas/tests/test30.bas create mode 100644 apps/examples/bas/tests/test31.bas create mode 100644 apps/examples/bas/tests/test32.bas create mode 100644 apps/examples/bas/tests/test33.bas create mode 100644 apps/examples/bas/tests/test34.bas create mode 100644 apps/examples/bas/tests/test35.bas create mode 100644 apps/examples/bas/tests/test36.bas create mode 100644 apps/examples/bas/tests/test37.bas create mode 100644 apps/examples/bas/tests/test38.bas create mode 100644 apps/examples/bas/tests/test39.bas create mode 100644 apps/examples/bas/tests/test40.bas create mode 100644 apps/examples/bas/tests/test41.bas create mode 100644 apps/examples/bas/tests/test42.bas create mode 100644 apps/examples/bas/tests/test43.bas create mode 100644 apps/examples/bas/tests/test44.bas create mode 100644 apps/examples/bas/tests/test45.bas create mode 100644 apps/examples/bas/tests/test46.bas create mode 100644 apps/examples/bas/tests/test47.bas create mode 100644 apps/examples/bas/tests/test48.bas create mode 100644 apps/examples/bas/tests/test49.bas create mode 100644 apps/examples/bas/tests/test50.bas create mode 100644 apps/examples/bas/tests/test51.bas create mode 100644 apps/examples/bas/tests/test52.bas (limited to 'apps/examples') 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 <test.ref <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 <test.ref <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 <test.ref <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 <test.ref <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 <test5.ref <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 <test.ref <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 <test.ref <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 <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 <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 <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 <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 <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 <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") }' 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 <test.ref <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 <test.ref <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 <test.input <test.ref <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.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.data + +if cmp test.ref test.data +then + rm -f test.* + echo passed +else + echo failed + exit 1 +fi -- cgit v1.2.3