packages feed

hydra-0.13.0: src/gen-test/haskell/Generation/Hydra/Test/MonadsSpec.hs

-- Note: this is an automatically generated file. Do not edit.

-- DEBUG: Focus namespace = (Namespace {unNamespace = "generation.hydra.test.monads"},ModuleName {unModuleName = "Monads"})
-- DEBUG: Namespace mappings:
-- [(Namespace {unNamespace = "hydra.compute"},ModuleName {unModuleName = "Compute"}),(Namespace {unNamespace = "hydra.lexical"},ModuleName {unModuleName = "Lexical"}),(Namespace {unNamespace = "hydra.lib.math"},ModuleName {unModuleName = "Math"}),(Namespace {unNamespace = "hydra.monads"},ModuleName {unModuleName = "Monads"})]

module Generation.Hydra.Test.MonadsSpec where

import Hydra.Kernel
import qualified Test.Hspec as H
import qualified Data.List as L
import qualified Data.Map as M
import qualified Data.Set as S
import qualified Data.Maybe as Y
import qualified Hydra.Compute as Compute
import qualified Hydra.Lexical as Lexical
import qualified Hydra.Lib.Math as Math
import qualified Hydra.Monads as Monads

spec :: H.Spec
spec = H.describe "monads" $ do
  H.describe "pure" $ do
    H.it "integer" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Monads.pure 42) Lexical.emptyGraph (Compute.Trace {
          Compute.traceStack = [],
          Compute.traceMessages = [],
          Compute.traceOther = M.empty})))
      (Just 42)
    H.it "string" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Monads.pure "hello") Lexical.emptyGraph (Compute.Trace {
          Compute.traceStack = [],
          Compute.traceMessages = [],
          Compute.traceOther = M.empty})))
      (Just "hello")
  H.describe "map" $ do
    H.it "map negate" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Monads.map Math.negate (Monads.pure 5)) Lexical.emptyGraph (Compute.Trace {
          Compute.traceStack = [],
          Compute.traceMessages = [],
          Compute.traceOther = M.empty})))
      (Just (-5))
    H.it "map absolute" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Monads.map Math.abs (Monads.pure (-3))) Lexical.emptyGraph (Compute.Trace {
          Compute.traceStack = [],
          Compute.traceMessages = [],
          Compute.traceOther = M.empty})))
      (Just 3)
  H.describe "bind" $ do
    H.it "bind add" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Monads.bind (Monads.pure 10) (\n -> Monads.pure (Math.add n 5))) Lexical.emptyGraph (Compute.Trace {
          Compute.traceStack = [],
          Compute.traceMessages = [],
          Compute.traceOther = M.empty})))
      (Just 15)
    H.it "bind multiply" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Monads.bind (Monads.pure 3) (\n -> Monads.pure (Math.mul n 4))) Lexical.emptyGraph (Compute.Trace {
          Compute.traceStack = [],
          Compute.traceMessages = [],
          Compute.traceOther = M.empty})))
      (Just 12)
  H.describe "error traces" $ do
    H.it "Error traces are in the right order" $ H.shouldBe
      (Compute.flowStateValue (Compute.unFlow (Monads.withTrace "one" (Monads.withTrace "two" (Monads.fail "oops"))) Lexical.emptyGraph (Compute.Trace {
          Compute.traceStack = [],
          Compute.traceMessages = [],
          Compute.traceOther = M.empty})))
      (Nothing :: Maybe Int)