packages feed

rbst-0.0.0.1: test/Test/RBST/Update.hs

module Test.RBST.Update (
    updateSpec
  ) where

import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Common (smallRBST, describedAs)

import qualified RBST

updateSpec :: Spec
updateSpec = describe "Modification operations tests" $ do
  insertSpec
  deleteSpec

insertSpec :: Spec
insertSpec = describe "insert" $ do
  it "insert on empty tree works" $
    RBST.insert 'A' 1 RBST.empty `describedAs` [('A', 1)]
  it "insert on test tree works" $
    RBST.insert 'F' 6 smallRBST `describedAs` [('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5), ('F', 6)]
  it "insert a repeated key should update the item" $
    RBST.insert 'E' 0 smallRBST `describedAs` [('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 0)]

deleteSpec :: Spec
deleteSpec = describe "delete" $ do
  it "delete removes a key from the tree" $
    RBST.delete 'E' smallRBST `describedAs` [('A', 1), ('B', 2), ('C', 3), ('D', 4)]
  it "delete a missing key has no effect" $
    RBST.delete 'F' smallRBST `shouldBe` smallRBST
  it "delete should work on empty trees" $
    ( RBST.delete 'A'
    $ RBST.delete 'B'
    $ RBST.delete 'C'
    $ RBST.delete 'D'
    $ RBST.delete 'E'
    $ RBST.delete 'E'
    smallRBST ) `shouldBe` RBST.empty