content: {-# LANGUAGE NoImplicitPrelude #-}
  {-# LANGUAGE OverloadedStrings #-}
  module RIO.PreludeSpec (spec) where
  
  import Test.Hspec
  import RIO
  
  spec :: Spec
  spec = do
    describe "URef" $ do
      it "sanity" $ do
        ref <- newURef (0 :: Int)
        x <- readURef ref
        x `shouldBe` 0
        writeURef ref 1
        y <- readURef ref
        y `shouldBe` 1
        modifyURef ref (+ 1)
        z <- readURef ref
        z `shouldBe` 2
    describe "whenM" $ do
      it "returns True" $ do
        ref <- newIORef False
        whenM (return True) (writeIORef ref True)
        readIORef ref `shouldReturn` True
      it "returns False" $ do
        ref <- newIORef False
        whenM (return False) (writeIORef ref True)
        readIORef ref `shouldReturn` False
    describe "unlessM" $ do
      it "returns True" $ do
        ref <- newIORef False
        unlessM (return True) (writeIORef ref True)
        readIORef ref `shouldReturn` False
      it "returns False" $ do
        ref <- newIORef False
        unlessM (return False) (writeIORef ref True)
        readIORef ref `shouldReturn` True
  