% $Id: StackTest.oz,v 1.1 2007/10/22 04:22:03 leavens Exp leavens $ \insert 'TestingNoStop.oz' \insert 'Stack.oz' declare fun {StackSize Stk} if {IsEmpty Stk} then 0 else 1+{StackSize {Pop Stk _}} end end fun {StackElements Stk} if {IsEmpty Stk} then nil else local E Rest in Rest={Pop Stk E} E|{StackElements Rest} end end end fun {StackEqual S1 S2} {StackElements S1} == {StackElements S2} end %%Specification %% forall E:T, ST: : %% %% {IsEmpty {NewStack}} == true %% {IsEmpty {Push ST E}} == false %% {StackEqual {Pop {Push ST E} _} ST} %% %% local Y in _={Pop {Push ST E} Y} Y end == E %% %% try %% _={Pop {NewStack} _} %% false %% catch _ then true %% end == true {StartTesting 'Stack'} {Assert {IsEmpty {NewStack}}} declare ST = {Push {Push {NewStack} 77} 89} E = 4020 {Assert {IsEmpty {Push ST E}} == false} {Assert {StackEqual {Pop {Push ST E} _} ST}} {Assert local Y in _={Pop {Push ST E} Y} Y end == E} {Assert try _={Pop {NewStack} _} false catch _ then true end}