packages feed

mcmc-0.6.2.4: test/Mcmc/ProposalSpec.hs

-- |
--   Module      :  Mcmc.ProposalSpec
--   Description :  Unit tests for Mcmc.Proposal
--   Copyright   :  (c) Dominik Schrempf, 2021
--   License     :  GPL-3.0-or-later
--
--   Maintainer  :  dominik.schrempf@gmail.com
--   Stability   :  unstable
--   Portability :  portable
--
-- Creation date: Thu Jun 25 11:46:05 2020.
module Mcmc.ProposalSpec
  ( spec,
  )
where

import Mcmc.Cycle
import Mcmc.Proposal
import Mcmc.Proposal.Slide
import System.Random.MWC
import Test.Hspec

p1 :: Proposal Double
p1 = slideSymmetric 1.0 (PName "Test 1") (pWeight 1) Tune

p2 :: Proposal Double
p2 = slideSymmetric 1.0 (PName "Test 2") (pWeight 3) Tune

c :: Cycle Double
c = cycleFromList [p1, p2]

spec :: Spec
spec =
  describe "prepareProposals" $
    it "returns the correct number of proposals in a cycle" $
      do
        g <- create
        l1 <- length <$> prepareProposals AllProposals c g
        l1 `shouldBe` 4
        l2 <- length <$> prepareProposals AllProposals (setOrder RandomReversibleO c) g
        l2 `shouldBe` 8
        o3 <- prepareProposals AllProposals (setOrder SequentialReversibleO c) g
        length o3 `shouldBe` 8
        o3 == [p1, p2, p2, p2, p2, p2, p2, p1] `shouldBe` True