MODULE StackTest; IMPORT In, Out, S:=Stack; VAR st: S.StackT; (* Restriction: Tests only one stack!! *) PROCEDURE ProgMain*; VAR code: CHAR; nr, i: INTEGER; start: S.ElemT; BEGIN (*ProgMain*) REPEAT In.Echo(FALSE); In.Prompt("?/1/2/3/4/5/E: "); In.Char(code); code:=CAP(code); IF ~In.Done THEN code:="E" END; (*if*) CASE code OF "0", "H", "?": Out.String("(?) Codes are: ?=Help / 1=Init / 2=+Push / 3=-Pop / 4=Cleanup / 5=Dump / E=End") | "1", "I": st.Init(); Out.String("(1) Init Stack ") | "2", "+": In.Prompt("Nr of Pushes= "); In.Int(nr); In.Prompt("Value= "); In.Int(start); Out.F("(2) +Push # elements: ", nr); FOR i:=1 TO nr DO st.Push(start); Out.F("# ", start); INC(start) END; (*for*) | "3", "-": In.Prompt("Nr of Pops= "); In.Int(nr); Out.F("(3) -Pop # elements: ", nr); FOR i:=1 TO nr DO Out.F("# ", st.Pop()) END; (*for*) | "4", "C": Out.String("(4) Clear stack"); st.CleanUp() | "5", "D", "=": Out.String("(5) Dump stack:"); st.Dump; | "6", "E": Out.String("(E) Ende of Test"); ELSE Out.String("(?) Error!!!! ?=Help / 1=Init / 2=+Push / 3=-Pop / 4=Cleanup / 5=Dump / E=End") END; (*case*) Out.Ln; Out.F(" Stack has # element(s) and therefore is ", st.NrOfElems()); IF ~st.Empty() THEN Out.String("not ") END; (*if*) Out.String("empty!"); Out.Ln UNTIL ~In.Done OR (code="E") OR (code="6"); Out.String("*** PROGRAM ENDED ***"); END ProgMain; END StackTest.