packages feed

unbeliever-0.7.3.0: tests/CheckContainerBehaviour.hs

{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}

module CheckContainerBehaviour where

import Test.Hspec

import Core.Data.Structures
import Core.Text.Rope

climbing :: [Int]
climbing = [1,1,2,1,2,4,1,3,9]

fibonacci :: [Int]
fibonacci = [1,1,2,3,5,8,13,21]

introduction :: [(Int,Rope)]
introduction = [(2," "),(3,"world"),(1,"hello")]

checkContainerBehaviour :: Spec
checkContainerBehaviour = do
    describe "Set data type" $ do
        it "calculates length accurately" $ do
            length fibonacci `shouldBe` 8
            let s = intoSet fibonacci
            length s `shouldBe` 7

        it "converts to list in Ord order" $ do
            let s = intoSet climbing
            length s `shouldBe` 5
            fromSet s `shouldBe` [1,2,3,4,9]

    describe "Map data type" $ do
        it "calculates length accurately" $ do
            length introduction `shouldBe` 3
            let p = intoMap introduction
            length p `shouldBe` 3

        it "values can be looked up" $ do
            let p = intoMap introduction
            containsKey 3 p `shouldBe` True
            lookupKeyValue 3 p `shouldBe` (Just "world")
            containsKey 4 p `shouldBe` False
            lookupKeyValue 4 p `shouldBe` Nothing

        it "values can be inserted into Map" $ do
            let p = intoMap introduction
            let p' = insertKeyValue 4 "!" p
            containsKey 4 p' `shouldBe` True
            lookupKeyValue 4 p' `shouldBe` (Just "!")

        it "converts to list in Ord order" $ do
            let p = intoMap introduction
            fromMap p `shouldBe` [(1,"hello"),(2," "),(3,"world")]

        it "updated values supercede existing values" $ do
            let p = intoMap introduction
            let p' = insertKeyValue 2 "&" p
            containsKey 2 p' `shouldBe` True
            lookupKeyValue 2 p' `shouldBe` (Just "&")