packages feed

crem-0.1.0.0: spec/Crem/GraphSpec.hs

module Crem.GraphSpec where

import "crem" Crem.Graph
import "hspec" Test.Hspec (Spec, describe, it, shouldBe)

spec :: Spec
spec =
  describe "Graph" $ do
    describe "productGraph" $ do
      it "computes correctly the product of two graphs" $
        do
          productGraph
            (Graph [(1 :: Int, 1), (1, 2)])
            (Graph [('a', 'b'), ('c', 'd')])
          `shouldBe` Graph
            [ ((1, 'a'), (1, 'b'))
            , ((1, 'c'), (1, 'd'))
            , ((1, 'a'), (2, 'b'))
            , ((1, 'c'), (2, 'd'))
            ]

    describe "transitiveClosureGraph" $ do
      it "computes correctly the transitive closure of a graph" $
        do
          transitiveClosureGraph
            (Graph [(1 :: Int, 2), (2, 3), (1, 4)])
          `shouldBe` Graph [(2, 3), (1, 2), (1, 4), (1, 3)]