packages feed

copilot-2.0.4: Examples/StackExamples.hs

-- | Stack library tests.

module StackExamples ( stackExamples ) where

import qualified Prelude as P
import Language.Copilot

-- push a counter from 1 to 5 onto the stack
pushSignal :: Stream Bool
pushSignal = replicate 5 True ++ false

pushValue :: Stream Word16
pushValue  = [ 1 ] ++ pushValue + 1

-- then wait one tick and pop 6 values off the stack again
-- ( leaving the default/start value )
popSignal :: Stream Bool
popSignal = replicate 6 False P.++ replicate 6 True ++ false

-- all operations on a stack of depth 5, of type Word16 and with
-- start/default value 0
stackStream :: Stream Word16
stackStream = stack (5::Int) 0 popSignal pushSignal pushValue

stackTest :: Spec
stackTest = 
  observer "stack" stackStream

stackExamples :: IO ()
stackExamples = do
  prettyPrint stackTest
  putStrLn ""
  putStrLn ""
  interpret 15 stackTest