86 lines (79 with data), 1.8 kB
SCRIPT
NEW
PRINT "TESTS"
INPUT "1: RECURSION, 2: ARITY, 3: CLEAR", M
ON M GOSUB RECURSION, ARITY, CLEAR, ERROR
GOTO START
@CLEAR:PRINT "CLEAR TEST"
PULL RA
POKE 1000,RA
CLR
PUSH PEEK(1000)
RETURN
@RECURSION:PRINT "RECURSION TEST"
DEF ADD$(SOURCE,TARGET)=PEG$(TARGET)+RIGHT$(PEG$(SOURCE), 1)
DEF TAKE$(SOURCE)=LEFT$(PEG$(SOURCE), LEN(PEG$(SOURCE))-1)
DEF SHOW$(WHICH)=CHR$(64+WHICH)+":"+LEFT$(PEG$(WHICH)+"--------", N0)
DIM PEG$(3)
DATA "54321", "", ""
RESTORE:FOR I=1 TO 3:READ PEG$(I):N.
N0=LEN(PEG$(1))
PRINT SHOW$(1), SHOW$(2), SHOW$(3)
STEP=1
N=N0:SOURCE=1:VIA=3:TARGET=2:GOSUB MOVE
RETURN
@MOVE
IF N=0 THEN RETURN
PUSH N:PUSH SOURCE:PUSH VIA:PUSH TARGET
N=N-1:S=VIA:VIA=TARGET:TARGET=S:GOSUB MOVE
PULL TARGET:PULL VIA:PULL SOURCE:PULL N
PEG$(TARGET)=ADD$(SOURCE, TARGET)
PEG$(SOURCE)=TAKE$(SOURCE)
M$ = LEFT$(STEP + ". ", 5) + "MOVE DISC FROM " + CHR$(64+SOURCE) + " TO "
PRINT M$ + CHR$(64+TARGET), SHOW$(1), SHOW$(2), SHOW$(3)
STEP = STEP + 1
IF STEP MOD 18 = 0 THEN INPUT "MORE...", X
PUSH N:PUSH SOURCE:PUSH VIA:PUSH TARGET
N=N-1:S=SOURCE:SOURCE=VIA:VIA=S:GOSUB MOVE
PULL TARGET:PULL VIA:PULL SOURCE:PULL N
RETURN
@ARITY:PRINT "ARITY TEST"
DEF D12()=RND(6)+RND(6)+2
DIM A(10,10)
DIM D(12):FOR K=1 TO 12:D(K)=0:N.
FOR I=1 TO 10
ROW$ = ""
FOR J=1 TO 10
A(I,J)=D12()
D(A(I,J)) = D(A(I,J)) + 1
ROW$=ROW$+RIGHT$(" " + A(I,J), 3)
NEXT J
PRINT ROW$
NEXT I
ROW = D(1), D(2), D(3), D(4), D(5), D(6)
PRINT ROW, D(7), D(8), D(9), D(10), D(11), D(12)
RETURN
@ERROR
PULL RA
STOP
RUN
1
ENTER
EXPECT 31. MOVE DISC FROM A TO B,A:-----,B:54321,C:-----
2
BREAK
EXPECT READY.
?D(1)
EXPECT 0
?D(7)
BETWEEN 12 36
?D(2)+D(12)
BETWEEN 0 23
CONT
3
BREAK
?CURSORY
EXPECT 4
CONT
0
PASS