PageRenderTime 24ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/versions/bitetail/UnitTests.hs

http://github.com/rickardlindberg/brainfuck
Haskell | 40 lines | 30 code | 10 blank | 0 comment | 0 complexity | f6c5710ee576b897940d269a56740ad8 MD5 | raw file
  1. import Brainfuck
  2. import Prelude hiding (Left, Right)
  3. import Test.Hspec.HUnit
  4. import Test.Hspec.Monadic
  5. import Test.HUnit
  6. main = hspecX $ do
  7. describe "parsing" $ do
  8. it "simple instructions" $ do
  9. parse "+" @?= [Inc]
  10. parse "-" @?= [Dec]
  11. parse "<" @?= [Left]
  12. parse ">" @?= [Right]
  13. parse "," @?= [Read]
  14. parse "." @?= [Print]
  15. it "loops" $ do
  16. let [Inc, loop, Print] = parse "+[->+<]."
  17. let (Loop loopList) = loop
  18. loopList !! 0 @?= Dec
  19. loopList !! 1 @?= Right
  20. loopList !! 2 @?= Inc
  21. loopList !! 3 @?= Left
  22. 1 @?= 1
  23. describe "running" $ do
  24. let dataWithHInFirst = dataModifyValue emptyDataMap (const 72)
  25. it "simple programs" $ do
  26. run [Print] "" dataWithHInFirst @?= "Hdone!\n"
  27. it "simple loop" $ do
  28. let tail = [loop, Right, Print]
  29. loop = Loop $ Dec : Right : Inc : Left : tail
  30. run (Print : tail) "" dataWithHInFirst @?= "HHdone!\n"