monad-bayes-1.2.0: test/TestSSMFixtures.hs
module TestSSMFixtures where
import Control.Monad.Bayes.Sampler.Strict (sampleIOfixed)
import NonlinearSSM
import NonlinearSSM.Algorithms
import System.IO (readFile')
import System.IO.Error (catchIOError, isDoesNotExistError)
import Test.Hspec
fixtureToFilename :: Alg -> FilePath
fixtureToFilename alg = "test/fixtures/SSM-" ++ show alg ++ ".txt"
testFixture :: Alg -> SpecWith ()
testFixture alg = do
let filename = fixtureToFilename alg
it ("should agree with the fixture " ++ filename) $ do
ys <- sampleIOfixed $ generateData t
fixture <- catchIOError (readFile' filename) $ \e ->
if isDoesNotExistError e
then return ""
else ioError e
sampled <- sampleIOfixed $ runAlgFixed (map fst ys) alg
-- Reset in case of fixture update or creation
writeFile filename sampled
fixture `shouldBe` sampled
test :: SpecWith ()
test = describe "TestSSMFixtures" $ mapM_ testFixture algs