packages feed

unused-0.5.0.2: test/Unused/UtilSpec.hs

module Unused.UtilSpec
    ( main
    , spec
    ) where

import Test.Hspec
import Unused.Util

data Person = Person
    { pName :: String
    , pAge :: Int
    } deriving (Eq, Show)

main :: IO ()
main = hspec spec

spec :: Spec
spec = parallel $ do
    describe "groupBy" $ do
        it "groups by the result of a function" $ do
            let numbers = [1..10] :: [Int]

            groupBy ((0 ==) . flip mod 2) numbers `shouldBe` [(False, [1, 3, 5, 7, 9]), (True, [2, 4, 6, 8, 10])]

        it "handles records" $ do
            let people = [Person "Jane" 10, Person "Jane" 20, Person "John" 20]

            groupBy pName people `shouldBe` [("Jane", [Person "Jane" 10, Person "Jane" 20]), ("John", [Person "John" 20])]
            groupBy pAge people `shouldBe` [(10, [Person "Jane" 10]), (20, [Person "Jane" 20, Person "John" 20])]

    describe "stringToInt" $
        it "converts a String value to Maybe Int" $ do
            stringToInt "12345678" `shouldBe` Just 12345678
            stringToInt "0" `shouldBe` Just 0
            stringToInt "10591" `shouldBe` Just 10591
            stringToInt "bad" `shouldBe` Nothing