packages feed

hs2048-0.1.0: test-suite/Hs2048/DirectionSpec.hs

module Hs2048.DirectionSpec (spec) where

import           Hs2048.Direction
import           Test.Hspec

spec :: Spec
spec = do
    describe "Direction" $ do
        it "is an instance of Bounded" $ do
            minBound `shouldBe` West
            maxBound `shouldBe` North

        it "is an instance of Enum" $ do
            succ West `shouldBe` South
            pred North `shouldBe` East
            toEnum 1 `shouldBe` South
            fromEnum East `shouldBe` 2
            enumFrom North `shouldBe` [North]
            enumFromThen West East `shouldBe` [West, East]
            enumFromTo West West `shouldBe` [West]
            enumFromThenTo West East North `shouldBe` [West, East]

        it "is an instance of Eq" $ do
            West == West `shouldBe` True
            West /= West `shouldBe` False

        it "is an instance of Show" $ do
            show West `shouldBe` "West"
            showList [West] "" `shouldBe` "[West]"

    describe "directions" $ do
        it "returns the directions" $ do
            directions `shouldBe` [West, South, East, North]

    describe "render" $ do
        it "renders West" $ do
            render West `shouldBe` "\x2190"

        it "renders South" $ do
            render South `shouldBe` "\x2193"

        it "renders East" $ do
            render East `shouldBe` "\x2192"

        it "renders North" $ do
            render North `shouldBe` "\x2191"