packages feed

pec-0.2.3: test_cases/TestQueue.pec

module TestQueue

// polymorphic queue implementation

imports
  Prelude
  Data.Queue

where

main :: () -> I32
main () = do
  putLn "test Queue"
  p = new (queue #3) // queues must be given a size
  mc = new (pop p)
  case mc of
    Nothing -> assert True
    Just _ -> assert False
  assert (push 'a' p)
  case new (pop p) of
    Nothing -> assert False
    Just c -> do
      putCh @c
      assert (@c == 'a')
  assert (is_empty p)
  put putCh p
  assert (push 'a' p)
  put putCh p
  assert (push 'b' p)
  put putCh p
  assert (push 'c' p)
  put putCh p
  assert (is_full p)
  assert (not (push 'd' p))
  mc <- pop p
  put putCh p
  case mc of
    Nothing -> assert False
    Just c -> do
      putCh @c
      assert (@c == 'a')
  mc <- pop p
  put putCh p
  mc <- pop p
  put putCh p
  assert (is_empty p)
  assert (push 'x' p)
  assert (push 'y' p)
  mc <- pop p
  case mc of
    Nothing -> assert False
    Just c -> assert (@c == 'x')

  mc <- pop p
  case mc of
    Nothing -> assert False
    Just c -> assert (@c == 'y')

  putLn "done"
  0