100 REM VULCAN Basic Language PERFORMANCE TEST v1.0, 10/2021 105 GOTO 115:REM better viewed and edited on 80-COLUMN DISPLAY! 110 RETURN :REM (THIS line used for GOSUB tests!) 115 VB=1:REF=3000:S=25:G=0:R=0:RS=0:Z=0:DIM T$(S):REM vars that may be INTEGER 120 EP=0:I=0:K=0:KNAME=0:P=0:T=0:VF=59.92:DIM M(S),T(S),TG(S):REM MUST==FLOAT! 125 FOR I=1 TO S:M(I)=0:T(I)=1:TG(S)=0:NEXT I:REM clear BUFFER & TIMING arrays 130 REM T(6..25)=0 to manually exclude any tests! 135 REM 140 CLS:REM clear SCREEN 145 PRINT "* * BASIC Language Test Suite " 150 PRINT "* * * * * **** ** ** * " 155 PRINT "* * * * * * * * * * * " 160 PRINT "* * * * * * *..* * * * " 165 PRINT "** **** *** **** * * * ** v1.0" 170 PRINT "_______________________________________" 175 PRINT " RUNNING! / Verbose (VB): ";:IF VB=1 THEN PRINT "ENABLED" 180 IF VB<>1 THEN PRINT "DISABLED" 185 PRINT "_______________________________________" 190 REM 200 Z=REF:G=1:R=0:RS=R+1:REM FOR-NEXT loop test group (MANDATORY!!) 205 R=R+1:TIME=0:FOR I=1 TO 3000:NEXT I:T=TIME:T(R)=T 210 IF VB=1 THEN PRINT "#1a: FOR-NEXT (static) : ";T/VF;"s" 215 R=R+1:TIME=0:FOR I=1 TO Z:NEXT I:T=TIME:T(R)=T 220 IF VB=1 THEN PRINT "#1b: FOR-NEXT (variable): ";T/VF;"s" 225 R=R+1:TIME=0:FOR I=1 TO Z*R STEP R:NEXT I:T=TIME:T(R)=T 230 IF VB=1 THEN PRINT "#1c: FOR-NEXT (stepped) : ";T/VF;"s" 235 R=R+1:TIME=0:FOR I=1 TO Z*256 STEP 256:NEXT I:T=TIME:T(R)=T 240 IF VB=1 THEN PRINT "#1d: FOR-NEXT (long) : ";T/VF;"s" 245 R=R+1:TIME=0:FOR I=1 TO Z 250 NEXT I:T=TIME:T(R)=T 255 IF VB=1 THEN PRINT "#1e: FOR-NEXT (spaced) : ";T/VF;"s" 260 TG(G)=0:FOR I=RS TO R:TG(G)=TG(G)+T(I):NEXT I 265 IF VB<>1 THEN PRINT "G#";G;": FOR-NEXT (main) : ";TG(G)/VF;"s" 270 REM 300 Z=REF:G=G+1:RS=R+1:REM IF-THEN test-group 302 R=R+1:IF T(R)=0 THEN GOTO 312 305 TIME=0:FOR I=1 TO Z:IF 0=0 THEN NEXT I:T=TIME:T=T-T(2):T(R)=T 310 IF VB=1 THEN PRINT "#2a: IF-THEN (static) : ";T/VF;"s" 312 R=R+1:IF T(R)=0 THEN GOTO 325 315 TIME=0:FOR I=1 TO Z:IF R=R THEN NEXT I:T=TIME:T=T-T(2):T(R)=T 320 IF VB=1 THEN PRINT "#2b: IF-THEN (variable) : ";T/VF;"s" 325 TG(G)=0:FOR I=RS TO R:TG(G)=TG(G)+T(I):NEXT I 330 IF VB<>1 THEN PRINT "G#";G;": IF-THEN (main) : ";TG(G)/VF;"s" 335 REM 400 Z=REF:G=G+1:RS=R+1:REM GOTO test-group 402 R=R+1:IF T(R)=0 THEN GOTO 417 405 TIME=0:FOR I=1 TO Z:GOTO 410 410 NEXT I:T=TIME:T=T-T(5):T(R)=T 415 IF VB=1 THEN PRINT "#3a: GO-TO (static) : ";T/VF;"s" 417 R=R+1:IF T(R)=0 THEN GOTO 435 420 K=1:TIME=0:FOR I=1 TO Z:ON K GOTO 425 425 NEXT I:T=TIME:T=T-T(5):T(R)=T 430 IF VB=1 THEN PRINT "#3b: GO-TO (variable) : ";T/VF;"s" 435 TG(G)=0:FOR I=RS TO R:TG(G)=TG(G)+T(I):NEXT I 440 IF VB<>1 THEN PRINT "G#";G;": GO-TO (main) : ";TG(G)/VF;"s" 445 REM 500 Z=REF:G=G+1:RS=R+1:REM GOSUB test-group 502 R=R+1:IF T(R)=0 THEN GOTO 517 505 TIME=0:FOR I=1 TO Z:GOSUB 110 510 NEXT I:T=TIME:T=T-T(5):T(R)=T 515 IF VB=1 THEN PRINT "#4a: GOSUB (static,UP) : ";T/VF;"s" 517 R=R+1:IF T(R)=0 THEN GOTO 532 520 K=1:TIME=0:FOR I=1 TO Z:ON K GOSUB 110,998 525 NEXT I:T=TIME:T=T-T(5):T(R)=T 530 IF VB=1 THEN PRINT "#4b: GOSUB (variable,UP): ";T/VF;"s" 532 R=R+1:IF T(R)=0 THEN GOTO 547 535 TIME=0:FOR I=1 TO Z:GOSUB 998 540 NEXT I:T=TIME:T=T-T(5):T(R)=T 545 IF VB=1 THEN PRINT "#4c: GOSUB (static,DOWN): ";T/VF;"s" 547 R=R+1:IF T(R)=0 THEN GOTO 565 550 K=2:TIME=0:FOR I=1 TO Z:ON K GOSUB 110,998 555 NEXT I:T=TIME:T=T-T(5):T(R)=T 560 IF VB=1 THEN PRINT "#4d: GOSUB (variable,DW): ";T/VF;"s" 565 TG(G)=0:FOR I=RS TO R:TG(G)=TG(G)+T(I):NEXT I 570 IF VB<>1 THEN PRINT "G#";G;": GOSUB (main) : ";TG(G)/VF;"s" 575 REM 600 Z=REF:G=G+1:RS=R+1:REM VARIABLES test-group 602 R=R+1:IF T(R)=0 THEN GOTO 612 605 K=0:TIME=0:FOR I=1 TO Z:K=K+1:NEXT I:T=TIME:T=T-T(2):T(R)=T 610 IF VB=1 THEN PRINT "#5a: VARS (1-char, +1) : ";T/VF;"s" 612 R=R+1:IF T(R)=0 THEN GOTO 622 615 KNAME=0:TIME=0:FOR I=1 TO Z:KNAME=KNAME+1:NEXT I:T=TIME:T=T-T(2):T(R)=T 620 IF VB=1 THEN PRINT "#5b: VARS (N-char, +1) : ";T/VF;"s" 622 R=R+1:IF T(R)=0 THEN GOTO 635 625 KNAME=0:TIME=0:FOR I=1 TO Z:KNAME=KNAME+256:NEXT I:T=TIME:T=T-T(2):T(R)=T 630 IF VB=1 THEN PRINT "#5c: VARS (N-char, +N) : ";T/VF;"s" 635 TG(G)=0:FOR I=RS TO R:TG(G)=TG(G)+T(I):NEXT I 640 IF VB<>1 THEN PRINT "G#";G;": VARIABLES (main) : ";TG(G)/VF;"s" 645 REM 700 Z=REF/4:G=G+1:RS=R+1:REM ARRAYS test-group 702 R=R+1:IF T(R)=0 THEN GOTO 720 705 TIME=0:FOR I=1 TO Z:M(1)=255:M(2)=32767:M(3)=3.14159265:M(4)=M(3) 710 NEXT I:T=TIME:T=T-T(5)/4:T(R)=T 715 IF VB=1 THEN PRINT "#6a: ARRAYS (int, real) : ";T/VF;"s" 720 TG(G)=0:FOR I=RS TO R:TG(G)=TG(G)+T(I):NEXT I 725 IF VB<>1 THEN PRINT "G#";G;": ARRAYS (main) : ";TG(G)/VF;"s" 730 REM 800 Z=REF/2:G=G+1:RS=R+1:REM STRINGS test-group 802 R=R+1:IF T(R)=0 THEN GOTO 820 805 T$="":TIME=0:FOR I=1 TO Z:T$="AAAAAAAAAAAA":T$=T$+"BBBBBBBBBBBB" 810 NEXT I:T=TIME:T=T-T(5)/2:T(R)=T 815 IF VB=1 THEN PRINT "#7a: STRINGS (static) : ";T/VF;"s" 820 TG(G)=0:FOR I=RS TO R:TG(G)=TG(G)+T(I):NEXT I 825 IF VB<>1 THEN PRINT "G#";G;": STRINGS (main) : ";TG(G)/VF;"s" 830 REM 900 Z=REF/3:G=G+1:RS=R+1:REM DATA-read test group 902 R=R+1:IF T(R)=0 THEN GOTO 920 905 T$="":TIME=0:FOR I=1 TO Z:READ K,P,T$:RESTORE 910 NEXT I:T=TIME:T=T-T(5)/3:T(R)=T 915 IF VB=1 THEN PRINT "#8a: DATA (int,real,str): ";T/VF;"s" 920 TG(G)=0:FOR I=RS TO R:TG(G)=TG(G)+T(I):NEXT I 925 IF VB<>1 THEN PRINT "G#";G;": DATA (main) : ";TG(G)/VF;"s" 930 REM 935 Z=REF/2:G=G+1:RS=R+1:REM MATH (real) test-group 937 R=R+1:IF T(R)=0 THEN GOTO 952 940 K=1:EP=K:TIME=0:FOR I=1 TO Z:K=K-1E-08:K=K+1E-08 945 NEXT I:T=TIME:T=T-T(5)/2:T(R)=T 950 IF VB=1 THEN PRINT "#9a: ADD/SUBTRACT (real): ";T/VF;"s" 952 R=R+1:IF T(R)=0 THEN GOTO 975 955 K=3.14159265:EP=K:TIME=0:FOR I=1 TO Z:K=K*1.00000001:K=K/1.00000001 960 NEXT I:T=TIME:T=T-T(5)/2:T(R)=T:EP=EP-K 965 IF VB=1 THEN PRINT "#9b: MULT/DIVIDE (real): ";T/VF;"s" 970 IF VB=1 THEN PRINT "#9c: ERROR (should == 0): ";EP 975 TG(G)=0:FOR I=RS TO R:TG(G)=TG(G)+T(I):NEXT I 980 IF VB<>1 THEN PRINT "G#";G;": FP-MATH (main) : ";TG(G)/VF;"s" 985 REM 990 K=0:RS=0:Z=0:FOR I=1 TO R:IF T(I)<>0 THEN Z=Z+REF:RS=RS+1:REM net OPS 991 K=K+T(I):NEXT I:REM net CPU TIME spent 992 PRINT "_______________________________________" 993 PRINT "VULCAN unweighted SCORE : ";Z*VF/K 994 PRINT "Total EXECUTION Time (s): ";K/VF 995 PRINT "Total TESTS executed : ";RS;" of ";R 996 PRINT "[ Press RETURN to EXIT ]: ";:INPUT T$:END 998 RETURN 999 DATA 32767,3.1415926535,"Pi"