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]
]