aboutsummaryrefslogtreecommitdiff
path: root/Haskell-book/28/DifferenceList/test/Spec.hs
blob: 84d9376d01862d84aee515a7c95c6b2aebb78b8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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