polysemy-zoo-0.5.0.0: test/FloodgateSpec.hs
module FloodgateSpec where
import Test.Hspec
import Polysemy
import Polysemy.Floodgate
import Polysemy.Trace
spec :: Spec
spec = describe "Floodgate" $ do
it "should delay held traces until release" $ do
let (ts, n) = run . runTraceList . runFloodgate $ do
hold $ trace "first1"
hold $ trace "first2"
trace "not held"
hold $ trace "second"
trace "not held again"
hold $ trace "third"
release
trace "finished"
pure $ id @Int 17
n `shouldBe` 17
ts `shouldBe`
[ "not held"
, "not held again"
, "first1"
, "first2"
, "second"
, "third"
, "finished"
]