packages feed

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