packages feed

algraph-0.7.0.0: test/Test/Graph/AdjacencyList.hs

module Test.Graph.AdjacencyList where

import Data.Bifunctor
import Data.List
import Data.List.Unique
import qualified Data.Binary as Bin

import TestHS

import Data.Graph.AdjacencyList
import Data.Graph.AdjacencyList.Grid

fastTests :: [Test]
fastTests = [ test1
            , testRemoveReverseEdges
            ]

edgesTest1 = map fromTuple 
    [(1,2),(1,5),(1,6)
    ,(2,5),(2,3)
    ,(3,4)
    ,(5,4),(5,7)
    ,(6,7)
    ,(7,4)
    ]

graphTest1 = 
  let vs = [1..7]
      neis = (\v -> let nei 1 = [2,5,6]
                        nei 2 = [5,3]
                        nei 3 = [4]
                        nei 4 = []
                        nei 5 = [4,7]
                        nei 6 = [7]
                        nei 7 = [4]
                     in nei v
             )
   in createGraph vs neis
  
test1 :: Test
test1 = do
  let name = "Graph from edges"
      gr1 = graphFromEdges edgesTest1
  case gr1 == graphTest1 of
    True -> testPassed name "passed!"
    False -> testFailed name $ (,) (show graphTest1) (show gr1)

testRemoveReverseEdges :: Test
testRemoveReverseEdges = do
  let name = "Remove reverse edges from komplete 5 graph"
      k5 = completeGraph 5
      dk5 = removeReverseEdges k5
      expected = [ (Edge 1 2)
                 , (Edge 1 3)
                 , (Edge 1 4)
                 , (Edge 1 5)
                 , (Edge 2 3)
                 , (Edge 2 4)
                 , (Edge 2 5)
                 , (Edge 3 4)
                 , (Edge 3 5)
                 , (Edge 4 5)
                 ]
  if edges dk5 == expected
    then 
      testPassed name "passed!"
    else 
      testFailed name $ (,) (show expected) (show dk5)