packages feed

elynx-markov-0.2.1: test/ELynx/Data/MarkovProcess/RateMatrixSpec.hs

{- |
Module      :  ELynx.Data.MarkovProcess.RateMatrixSpec
Description :  Unit tests for rate matrices
Copyright   :  (c) Dominik Schrempf 2020
License     :  GPL-3.0-or-later

Maintainer  :  dominik.schrempf@gmail.com
Stability   :  unstable
Portability :  portable

Creation date: Fri Apr 17 15:18:02 2020.

-}

module ELynx.Data.MarkovProcess.RateMatrixSpec
  ( spec
  )
where

import           Numeric.LinearAlgebra
import           Test.Hspec

import           ELynx.Data.MarkovProcess.RateMatrix
                                                ( exchFromListLower
                                                , exchFromListUpper
                                                )

es :: [Double]
es = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

exMLower :: Matrix R
exMLower = (5 >< 5)
  [0, 1, 2, 4, 7, 1, 0, 3, 5, 8, 2, 3, 0, 6, 9, 4, 5, 6, 0, 10, 7, 8, 9, 10, 0]

exMUpper :: Matrix R
exMUpper = (5 >< 5)
  [0, 1, 2, 3, 4, 1, 0, 5, 6, 7, 2, 5, 0, 8, 9, 3, 6, 8, 0, 10, 4, 7, 9, 10, 0]

spec :: Spec
spec = do
  describe "exchFromListLower"
    $          it "correctly converts to matrix from list"
    $          exMLower
    `shouldBe` exchFromListLower 5 es
  describe "exchFromListUpper"
    $          it "correctly converts to matrix from list"
    $          exMUpper
    `shouldBe` exchFromListUpper 5 es