elynx-seq-0.1.0: test/ELynx/Import/MarkovProcess/SiteprofilesPhylobayesSpec.hs
{- |
Module : ELynx.Import.MarkovProcess.SiteprofilesPhylobayesSpec
Copyright : (c) Dominik Schrempf 2019
License : GPL-3
Maintainer : dominik.schrempf@gmail.com
Stability : unstable
Portability : portable
Creation date: Wed Sep 18 09:51:35 2019.
-}
module ELynx.Import.MarkovProcess.SiteprofilesPhylobayesSpec
( spec
) where
import qualified Data.Vector.Storable as V
import Test.Hspec
import ELynx.Data.MarkovProcess.EDMModel
import ELynx.Import.MarkovProcess.SiteprofilesPhylobayes
import ELynx.Tools.Equality
import ELynx.Tools.InputOutput
fn :: FilePath
fn = "data/HSSPMany.siteprofiles"
getProfiles :: IO [EDMComponent]
getProfiles = parseFileWith siteprofiles fn
firstProfile :: V.Vector Double
firstProfile = V.fromList
[ 0.0267009, 0.013874, 0.022432, 0.0440502, 0.0485174, 0.0407515
, 0.0170806, 0.348043, 0.0371379, 0.0715536, 0.0454168, 0.0342213
, 0.0146872, 0.0239681, 0.0768379, 0.0210387, 0.0123336
, 0.0512678, 0.0149093, 0.0351776 ]
spec :: Spec
spec = describe "import phylobayes siteprofiles" $
it "parses a text file with siteprofiles in phylobayes format" $ do
profiles <- getProfiles
length profiles `shouldBe` 701
map fst profiles `shouldBe` replicate 701 1.0
map (V.sum . snd) profiles `shouldSatisfy` nearlyEqListWith 1e-5 (replicate 701 1.0)
snd (head profiles) `shouldBe` firstProfile