packages feed

changeset-containers-0.1.0.0: test/Sequence.hs

module Sequence where

-- base
import Prelude hiding (Foldable (..))

-- containers
import Data.Sequence (fromList, singleton)

-- tasty
import Test.Tasty

-- tasty-hunit
import Test.Tasty.HUnit (testCase, (@?=))

-- changeset
import Control.Monad.Changeset.Class
import Control.Monad.Trans.Changeset (changeSingle, execChangeset, runChangeset)

-- changeset-containers
import Data.Monoid.RightAction.Sequence

tests :: TestTree
tests =
  testGroup
    "Map"
    [ testCase "Can insert" $
        runChangeset (changeSingle (Cons 0 :: SeqChange Int)) mempty @?= ((), singleton (0 :: Int))
    , testCase "Can read after insert" $
        let action = do
              changeSingle (Cons 1 :: SeqChange Int)
              m <- current
              changeSingle $ Cons 0
              return m
         in runChangeset action mempty @?= (singleton (1 :: Int), fromList [0, 1])
    , testCase "Can delete after insert" $
        let action = do
              changeSingle (Cons 1 :: SeqChange Int)
              m <- current
              changeSingle $ Cons 0
              changeSingle $ Snoc 3
              changeSingle $ Snoc 99
              changeSingle Unsnoc
              return m
         in execChangeset action (singleton (2 :: Int)) @?= fromList [0, 1, 2, 3]
    ]