packages feed

acme-smuggler-1.1.1.0: test/Spec.hs

import Acme.Smuggler
import Data.Typeable (Typeable)
import Data.Void (Void)
import Test.Hspec

main :: IO ()
main = hspec $ do
  describe "prj . inj via ()" $ do
    it "conveys an integer" $ (prj . injUnit) (7 :: Integer) `shouldBe` Just (7 :: Integer)
    it "gives Nothing when going from an integer to a string" $
      (prj . injUnit) (7 :: Integer) `shouldBe` (Nothing :: Maybe String)

  describe "prj" $ do
    it "gives Nothing when projecting from a real ()" $
      (prj ()) `shouldBe` (Nothing :: Maybe Integer)


  describe "prj . inj via Void" $ do
    it "conveys an integer" $ (prj . injVoid) (7 :: Integer) `shouldBe` Just (7 :: Integer)
    it "gives Nothing when going from an integer to a string" $
      (prj . injVoid) (7 :: Integer) `shouldBe` (Nothing :: Maybe String)

injUnit :: Typeable t => t -> ()
injUnit = inj

injVoid :: Typeable t => t -> Void
injVoid = inj