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 "&")