elynx-seq-0.2.1: test/ELynx/Data/Alphabet/DistributionDiversitySpec.hs
{- |
Module : ELynx.Data.Alphabet.DistributionDiversitySpec
Copyright : (c) Dominik Schrempf 2020
License : GPL-3.0-or-later
Maintainer : dominik.schrempf@gmail.com
Stability : unstable
Portability : portable
Creation date: Mon Feb 25 13:41:12 2019.
-}
module ELynx.Data.Alphabet.DistributionDiversitySpec
( spec
)
where
import qualified Data.Vector.Unboxed as V
import Test.Hspec
import ELynx.Data.Alphabet.DistributionDiversity
import ELynx.Tools
testArr1 :: V.Vector Double
testArr1 = V.replicate 20 0.0
testArr2 :: V.Vector Double
testArr2 = V.fromList [0, 0, 0, 1, 0]
-- Compare results from random array tested with Python functions.
testArr3 :: V.Vector Double
testArr3 = V.fromList [0.3, 0.4, 0.7]
spec :: Spec
spec = do
describe "entropy" $ it "calculates entropy of vectors" $ do
entropy testArr1 `shouldBe` 0.0
entropy testArr2 `shouldBe` 0.0
entropy testArr3 `shouldSatisfy` nearlyEq 0.9773805948045555
describe "kEffEntropy"
$ it "calculates the effective number of used states using entropy"
$ do
kEffEntropy testArr1 `shouldBe` 1.0
kEffEntropy testArr2 `shouldBe` 1.0
kEffEntropy testArr3 `shouldSatisfy` nearlyEq 2.6574860842252765
describe "homoplasy" $ it "calculates homoplasy of vectors" $ do
homoplasy testArr1 `shouldBe` 0.0
homoplasy testArr2 `shouldBe` 1.0
homoplasy testArr3 `shouldSatisfy` nearlyEq 0.74
describe "kEffHomoplasy"
$ it "calculates the effective number of used states using homoplasy"
$ do
kEffHomoplasy testArr1 `shouldSatisfy` isInfinite
kEffHomoplasy testArr2 `shouldBe` 1.0
kEffHomoplasy testArr3 `shouldSatisfy` nearlyEq 1.3513513513513513