hakaru-0.1.3: Tests/Metropolis.hs
{-# LANGUAGE BangPatterns #-}
module Tests.Metropolis where
import Data.Dynamic
import Language.Hakaru.Types
import Language.Hakaru.Lambda
import Language.Hakaru.Metropolis
import Language.Hakaru.Distribution (bern, normal, uniform, beta)
-- import Test.QuickCheck.Monadic
-- import Distribution.TestSuite.QuickCheck
import Tests.Models
test_mixture :: IO [Bool]
test_mixture = mcmc prog_mixture [Just (toDyn (Lebesgue (-2) :: Density Double))]
test_multiple_conditions :: IO [Double]
test_multiple_conditions = do
mcmc prog_multiple_conditions [Just (toDyn (Discrete True)),
Just (toDyn (Discrete False))]
prog_two_normals :: Measure Bool
prog_two_normals = unconditioned (bern 0.5) `bind` \coin ->
ifThenElse coin (conditioned (normal 0 1))
(conditioned (normal 100 1)) `bind` \_ ->
return coin
test_two_normals :: IO [Bool]
test_two_normals = mcmc prog_two_normals [Just (toDyn (Lebesgue 1 :: Density Double))]
test_normal :: IO [Double]
test_normal = mcmc (unconditioned (normal 1 3)) []
prog_joint = do
bias <- unconditioned $ beta 1 1
coin <- unconditioned $ bern bias
return (bias, coin)
prog_condition = condition prog_joint True
test_condition :: IO [Double]
test_condition = mcmc prog_condition []