DECLARE SUB GetKey () DECLARE SUB Display (a$) scrn% = 9 maxx% = 640 maxy% = 350 DIM sint1%(1500) DIM sfp1(350) SCREEN scrn%, , 0, 0 CLS DIM test$(100) pass% = 0 tests% = 1 DO ON tests% GOSUB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 test$(tests%) = test$ tests% = tests% + 1 LOOP UNTIL test$(tests% - 1) = "end" tests% = tests% - 2 DO CLS PRINT 0; "PERFORM ALL TESTS" FOR i% = 1 TO tests% PRINT i%; test$(i%) NEXT PRINT INPUT "Which test"; dothis% INPUT "Output filename (blank=no file output)"; output$ fileout% = (output$ > "") IF fileout% THEN OPEN output$ FOR OUTPUT AS 1 END IF CLS pass% = 1 testsdone% = 0 tottime = 0 FOR test% = 1 TO tests% IF dothis% = test% OR dothis% = 0 THEN Display "Test" + STR$(test%) + ": " + test$(test%) t# = TIMER ON test% GOSUB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 t# = TIMER - t# Display STR$(t#) + " seconds" tottime = tottime + t# testsdone% = testsdone% + 1 END IF NEXT IF dothis% = 0 THEN PRINT Display "Average = " + STR$(tottime / testsdone%) END IF CLOSE PRINT PRINT "Press any key to continue" GetKey LOOP STOP 1 IF pass% = 0 THEN test$ = "Empty loop, integer, step=1 (12m)" ELSE FOR i% = 1 TO 30000 FOR l% = 1 TO 400 NEXT NEXT END IF RETURN 2 IF pass% = 0 THEN test$ = "Empty loop, long integer, step=1 (12m)" ELSE FOR i& = 1 TO 60000 FOR l& = 1 TO 200 NEXT NEXT END IF RETURN 3 IF pass% = 0 THEN test$ = "Empty loop, single precision, step=1 (600k)" ELSE FOR i! = 1 TO 3000 FOR l! = 1 TO 200 NEXT NEXT END IF RETURN 4 IF pass% = 0 THEN test$ = "Empty loop, double precision, step=1 (600k)" ELSE FOR i# = 1 TO 3000 FOR l# = 1 TO 200 NEXT NEXT END IF RETURN 5 IF pass% = 0 THEN test$ = "Empty loop, single precision, step=.137 (10k)" ELSE FOR i! = 1 TO 50 STEP .137 FOR l! = 1 TO 200 STEP .137 NEXT NEXT END IF RETURN 6 IF pass% = 0 THEN test$ = "Empty loop, double precision, step=.137 (10k)" ELSE FOR i# = 1 TO 50 STEP .137 FOR l# = 1 TO 200 STEP .137 NEXT NEXT END IF RETURN 7 IF pass% = 0 THEN test$ = "Division, integer, using \ (3m)" ELSE FOR i% = 1 TO 15000 FOR l% = 1 TO 200 a% = i% \ 3 b% = l% \ 5 NEXT NEXT END IF RETURN 8 IF pass% = 0 THEN test$ = "Division, integer, using / (300k)" ELSE FOR i% = 1 TO 1500 FOR l% = 1 TO 200 a% = i% / 3 b% = l% / 5 NEXT NEXT END IF RETURN 9 IF pass% = 0 THEN test$ = "Division, single precision (300k)" ELSE FOR i% = 1 TO 1500 FOR l% = 1 TO 200 a = i% / 3 b = l% / 5 NEXT NEXT END IF RETURN 10 IF pass% = 0 THEN test$ = "Multiplication, integer (4m)" ELSE FOR i% = 1 TO 10000 FOR l% = 1 TO 400 a% = i% * 3 b% = l% * 27 NEXT NEXT END IF RETURN 11 IF pass% = 0 THEN test$ = "Multiplication, single precision (150k)" ELSE FOR i = 1 TO 15 STEP .137 FOR l = 1 TO 200 STEP .137 a = i * 3 b = l * 5 c = a * b NEXT NEXT END IF RETURN 12 IF pass% = 0 THEN test$ = "Trigonometry assignation, single precision (31.4k)" ELSE pi = 4 * ATN(1) FOR i = 0 TO 2 * pi STEP .0002 s = SIN(i) c = COS(i) t = TAN(i) NEXT END IF RETURN 13 IF pass% = 0 THEN test$ = "String (re)assignation and concatenation (20k)" ELSE b$ = "" FOR i% = 1 TO 100 FOR l% = 1 TO 200 a$ = STR$(l%) b$ = b$ + a$ c$ = MID$(b$, i%, l%) b$ = RIGHT$(b$, 10000) NEXT NEXT END IF RETURN 14 IF pass% = 0 THEN test$ = "Graphics, put pixels" ELSE SCREEN scrn%, , 1, 1 CLS FOR i% = 1 TO 5 FOR x% = 0 TO maxx% FOR y% = 0 TO maxy% PSET (x%, y%), i% AND 1 NEXT NEXT NEXT SCREEN scrn%, , 0, 0 END IF RETURN 15 IF pass% = 0 THEN test$ = "Graphics, lines (35k)" ELSE SCREEN scrn%, , 1, 1 CLS c& = 0 FOR i% = 0 TO 25 FOR y% = maxy% TO 0 STEP -1 LINE (i%, y%)-(maxx%, 0), i% AND 1 NEXT FOR y% = 0 TO maxy% LINE (0, 0)-(maxx% - i%, y%), i% AND 1 NEXT FOR x% = 0 TO maxx% LINE (x%, i%)-(maxx% - x%, maxy%), i% AND 1 NEXT NEXT SCREEN scrn%, , 0, 0 END IF RETURN 16 IF pass% = 0 THEN test$ = "Graphics, rectangles (60k)" ELSE SCREEN scrn%, , 1, 1 CLS c& = 0 FOR i% = 0 TO 100 FOR y% = i% TO maxy% LINE (y%, y%)-(maxx% - 1, maxy% - i%), i% AND 1, B NEXT FOR y% = i% TO maxy% LINE (i%, y%)-STEP(y%, i%), i% AND 2, B NEXT NEXT SCREEN scrn%, , 0, 0 END IF RETURN 17 IF pass% = 0 THEN test$ = "Graphics, circles (20k)" ELSE SCREEN scrn%, , 1, 1 CLS FOR i% = 1 TO 5 FOR c% = 1 TO maxy% CIRCLE (maxx% \ 2 + i%, maxy% \ 2), c%, i% AND 1 NEXT r% = 0 FOR x% = 0 TO maxx% STEP 7 FOR y% = 0 TO maxy% STEP 9 CIRCLE (x%, y%), r%, i% AND 1 NEXT r% = r% + 1 NEXT NEXT SCREEN scrn%, , 0, 0 END IF RETURN 18 IF pass% = 0 THEN test$ = "Bubble sort, integer (1500 elements)" ELSE FOR i% = 1 TO 1500 sint1%(i%) = 1500 - i% NEXT FOR i% = 1 TO 1500 FOR l% = 1 TO 1499 IF sint1%(l%) > sint1%(l% + 1) THEN a% = sint1%(l%) sint1%(l%) = sint1%(l% + 1) sint1%(l% + 1) = a% END IF NEXT NEXT END IF RETURN 19 IF pass% = 0 THEN test$ = "Bubble sort, single precision (350 elements)" ELSE FOR i% = 1 TO 350 sfp1(i%) = 350 - i% NEXT FOR i = 1 TO 350 FOR l = 1 TO 349 IF sfp1(l) > sfp1(l + 1) THEN a = sfp1(l) sfp1(l) = sfp1(l + 1) sfp1(l + 1) = a END IF NEXT NEXT PRINT END IF RETURN 20 IF pass% = 0 THEN test$ = "end" ELSE END IF RETURN SUB Display (a$) SHARED fileout% PRINT a$ IF fileout% THEN PRINT #1, a$ END IF END SUB SUB GetKey WHILE INKEY$ > "" WEND WHILE INKEY$ = "" WEND END SUB