stack

Stacks for Forth



s" tester.fs" INCLUDED 
s" Stack.4th" INCLUDED

\ ------------- Test Cases ------------

4 STACK constant test

: s1 1 0 ; \ 0 means continue with map-stack
: s2 2 0 ;
: s3 3 0 ;
: s4 4 -1 ; \ -1 means premature exit from map-stack

\ set and get methods
T{ -1 test ' SET-STACK CATCH -> -1 test -4 }T
T{ 0 test SET-STACK -> }T
T{ test GET-STACK -> 0 }T

T{ ' s1 1 test SET-STACK -> }T
T{ test GET-STACK -> ' s1 1 }T

T{ ' s2 ' s1 2 test SET-STACK -> }T
T{ test GET-STACK -> ' s2 ' s1 2 }T

T{ ' s1 ' s2 ' s3 3 test SET-STACK -> }T
T{ test GET-STACK -> ' s1 ' s2 ' s3 3 }T

\ testing map-stack
\ the whole stack is used for execute
T{ ' EXECUTE test MAP-STACK -> 3 2 1 0 }T

T{ ' s1 ' s2 ' s4 3 test SET-STACK -> }T
\ only the 1st element is executed
T{ ' EXECUTE test MAP-STACK -> 4 -1 }T

\ append and prepend methods
T{ ' s1 1 test SET-STACK -> }T
T{ ' s2 test >STACK -> }T
T{ test GET-STACK -> ' s1 ' s2 2 }T
T{ test STACK> -> ' s2 }T
T{ test GET-STACK -> ' s1 1 }T

T{ ' s1 1 test SET-STACK -> }T
T{ ' s2 test >BACK -> }T
T{ test GET-STACK -> ' s2 ' s1 2 }T
T{ test BACK> -> ' s2 }T
T{ test GET-STACK -> ' s1 1 }T

\ depth
T{ 2 1 0 3 test SET-STACK -> }T
T{ test DEPTH-STACK -> 3 }T 

\ pick
T{ 2 1 0 3 test SET-STACK -> }T
T{ 0 test PICK-STACK -> 0 }T 
T{ 1 test PICK-STACK -> 1 }T 

T{ -1 test ' PICK-STACK CATCH -> -1 test -9 }T
T{ 5 test ' PICK-STACK CATCH -> 5 test -9 }T