Add remaining haskell book exercises
This commit is contained in:
33
Haskell-book/28/DifferenceList/test/Spec.hs
Normal file
33
Haskell-book/28/DifferenceList/test/Spec.hs
Normal file
@@ -0,0 +1,33 @@
|
||||
module Main where
|
||||
|
||||
import Test.Hspec
|
||||
import Data.Queue
|
||||
|
||||
main :: IO ()
|
||||
main = hspec $ do
|
||||
describe "empty" $ do
|
||||
it "returns an empty queue" $ do
|
||||
(empty :: Queue Int) `shouldBe` (Queue [] [])
|
||||
|
||||
describe "push" $ do
|
||||
it "puts an element into an empty queue" $ do
|
||||
(push 5 empty) `shouldBe` (Queue [5] [])
|
||||
|
||||
describe "pop" $ do
|
||||
it "takes the only element from the queue" $ do
|
||||
(pop (Queue [5] [])) `shouldBe` (Just (5, Queue [] []))
|
||||
it "returns nothing if the queue is empty" $ do
|
||||
(pop ((Queue [] [])::Queue Int)) `shouldBe` Nothing
|
||||
it "takes elements in the FIFO order" $ do
|
||||
let queue = push 3 (push 5 empty)
|
||||
in pop queue `shouldBe` Just (5, Queue [] [3])
|
||||
|
||||
describe "isEmpty" $ do
|
||||
it "tells when the queue is empty" $ do
|
||||
(isEmpty (empty :: Queue Int)) `shouldBe` True
|
||||
it "tells when the enqueue part isn't empty" $ do
|
||||
let queue = push 3 empty
|
||||
in isEmpty queue `shouldBe` False
|
||||
it "tells when the dequeue part isn't empty" $ do
|
||||
let queue = fmap snd (pop $ push 3 (push 5 empty))
|
||||
in fmap isEmpty queue `shouldBe` Just False
|
||||
Reference in New Issue
Block a user