neuron-1.0.0.0: test/Data/Graph/Labelled/AlgorithmSpec.hs
{-# LANGUAGE GeneralisedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Data.Graph.Labelled.AlgorithmSpec
( spec,
)
where
import Data.Graph.Labelled
import Relude
import Test.Hspec
newtype SimpleVertex = SimpleVertex String
deriving (Show, Eq, Ord, IsString)
instance Vertex SimpleVertex where
type VertexID SimpleVertex = String
vertexID (SimpleVertex v) = v
spec :: Spec
spec = do
let mkG = mkGraphFrom @(Maybe ()) @SimpleVertex
e = Just ()
describe "cluster" $ do
it "detects 1-graph cluster" $ do
clusters (mkG ["a"] []) `shouldBe` ["a" :| []]
it "detects 2-graph clusters" $ do
sort (clusters (mkG ["a", "b"] []))
`shouldBe` ["a" :| [], "b" :| []]
sort (clusters (mkG ["a", "b"] [(e, "a", "b")]))
`shouldBe` ["a" :| []]
it "detects 2-cyclic-graph clusters" $ do
sort (clusters (mkG ["a", "b"] [(e, "a", "b"), (e, "b", "a")]))
-- Returns empty list on cyclic graphs
`shouldBe` []
it "detects 3-cyclic-graph clusters" $ do
sort (clusters (mkG ["a", "b", "c"] [(e, "a", "b"), (e, "b", "a")]))
-- a,b are not included, because they have no mothers.
`shouldBe` ["c" :| []]