ether-0.5.0.0: test/Regression/T12.hs
module Regression.T12 (test12) where
import Ether
import Control.Lens
import Test.Tasty
import Test.Tasty.QuickCheck
data Foo
succState :: Enum a => MonadState Foo a m => m ()
succState = modify @Foo succ
testEther :: (Enum a, MonadState Foo (a, a) m) => m (a, a)
testEther = do
Ether.zoom @Foo _1 succState
Ether.zoom @Foo _2 $ modify @Foo pred
get @Foo
model :: Enum a => (a, a) -> (a, a)
model (a1, a2) = (succ a1, pred a2)
runner = evalState @Foo
test12 :: TestTree
test12 = testGroup "T12: State zooming"
[ testProperty "runner works"
$ \(a1 :: Integer, a2 :: Integer) -> property
$ runner testEther (a1, a2) == model (a1, a2)
]