elynx-tree-0.1.0: test/ELynx/Data/Tree/MultipartitionSpec.hs
{-# LANGUAGE OverloadedStrings #-}
{- |
Module : ELynx.Data.Tree.MultipartitionSpec
Copyright : (c) Dominik Schrempf 2019
License : GPL-3
Maintainer : dominik.schrempf@gmail.com
Stability : unstable
Portability : portable
Creation date: Fri Aug 30 09:38:50 2019.
-}
module ELynx.Data.Tree.MultipartitionSpec
(spec
) where
import Data.Set (Set, empty, fromList)
import Data.Tree
import Test.Hspec
import Test.QuickCheck
import Test.QuickCheck.Instances.Containers ()
import ELynx.Data.Tree.BranchSupportTree
import ELynx.Data.Tree.MeasurableTree
import ELynx.Data.Tree.Multipartition (Multipartition, mp,
multipartitions)
import ELynx.Data.Tree.NamedTree
import ELynx.Data.Tree.PhyloTree
import ELynx.Data.Tree.Subset (sfromlist)
ex1 :: Tree Int
ex1 = Node 0 [Node 1 [], Node 2 [Node 4 [], Node 5 [], Node 6 []], Node 3 []]
sol1 :: Set (Multipartition Int)
sol1 = fromList [ mp [sfromlist [1], sfromlist [3], sfromlist [4,5,6]]
, mp [sfromlist [1,3], sfromlist [4], sfromlist [5], sfromlist [6]] ]
ex2 :: Tree Int
ex2 = Node 0 [Node 1 [], Node 2 [], Node 0 [Node 3 [], Node 4 []], Node 5 []]
sol2 :: Set (Multipartition Int)
sol2 = fromList [ mp [sfromlist [1], sfromlist [2], sfromlist [3,4], sfromlist [5]] ]
prop_bifurcating_tree :: (Ord a, Measurable a, Named a, BranchSupported a) => Tree a -> Bool
prop_bifurcating_tree t = multipartitions (removeMultifurcations t) == empty
spec :: Spec
spec =
describe "multipartitions" $ do
it "calculates correct multipartitions for a sample tree" $ do
-- t <- removeBrInfo <$> getMultifurcatingTree
-- print $ multipartitions ex1
multipartitions ex1 `shouldBe` sol1
multipartitions ex2 `shouldBe` sol2
it "is empty for a collection of random bifurcating trees" $
property (prop_bifurcating_tree :: Tree (PhyloLabel Double) -> Bool)