Skip to content

Instantly share code, notes, and snippets.

@lubomir
Forked from jiridanek/t_graph.hs
Created March 17, 2011 11:15
Show Gist options
  • Save lubomir/874171 to your computer and use it in GitHub Desktop.
Save lubomir/874171 to your computer and use it in GitHub Desktop.
module Graph_t where
import Graph
import Test.HUnit
import Control.Exception
import Control.Monad
--t_ = TestCase $ assertEqual "" (show ( )) ""
{-
> graph
(fromList [],fromList [])
-}
t_create_graph = TestCase $ assertEqual "Create graph" (show graph) "(fromList [],fromList [])"
{-
> addVertex (Vertex 1) graph
(fromList [Vertex 1],fromList [])
-}
t_add_vertex = TestCase $ assertEqual "Add vertex" (show ( addVertex (Vertex 1) graph )) "(fromList [Vertex 1],fromList [])"
  
{-
> addVertex (Vertex 2) $ addVertex (Vertex 1) graph
(fromList [Vertex 1,Vertex 2],fromList [])
-}
t_add_two_vertices = TestCase $ assertEqual "Add two vertices" (show ( addVertex (Vertex 2) $ addVertex (Vertex 1) graph )) "(fromList [Vertex 1,Vertex 2],fromList [])"
{-
> addLink (Vertex 1, Vertex 2) 10 graph
(fromList [Vertex 1,Vertex 2],fromList [Link {edge = (Vertex 1,Vertex 2), weight = 10.0}])
-}
t_add_link = TestCase $ assertEqual "Add Link" (show ( addLink (Vertex 1, Vertex 2) 10 graph )) "(fromList [Vertex 1,Vertex 2],fromList [Link {edge = (Vertex 1,Vertex 2), weight = 10.0}])"
{-
> addLink (Vertex 1, Vertex 2) 20 $ addLink (Vertex 1, Vertex 2) 10 graph
(fromList [Vertex 1,Vertex 2],fromList [Link {edge = (Vertex 1,Vertex 2), weight = 20.0}])
-}
t_add_link_2 = TestCase $ assertEqual "Add Link 2" (show ( addLink (Vertex 1, Vertex 2) 20 $ addLink (Vertex 1, Vertex 2) 10 graph )) "(fromList [Vertex 1,Vertex 2],fromList [Link {edge = (Vertex 1,Vertex 2), weight = 20.0}])"
{-
> addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph
(fromList [Vertex 1,Vertex 2],fromList [Link {edge = (Vertex 1,Vertex 2), weight = 10.0},Link {edge = (Vertex 2,Vertex 1), weight = 20.0}])
-}
t_add_link_twice = TestCase $ assertEqual "Add the same Link twice" (show ( addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph )) "(fromList [Vertex 1,Vertex 2],fromList [Link {edge = (Vertex 1,Vertex 2), weight = 10.0},Link {edge = (Vertex 2,Vertex 1), weight = 20.0}])"
{-
> addLink (Vertex 1, Vertex 2) 10 $ addVertex (Vertex 3) graph
(fromList [Vertex 1,Vertex 2,Vertex 3],fromList [Link {edge = (Vertex 1,Vertex 2), weight = 10.0}])
-}
t_add_link_3 = TestCase $ assertEqual "Add Link 3" (show ( addLink (Vertex 1, Vertex 2) 10 $ addVertex (Vertex 3) graph )) "(fromList [Vertex 1,Vertex 2,Vertex 3],fromList [Link {edge = (Vertex 1,Vertex 2), weight = 10.0}])"
{-
> deleteVertex (Vertex 3) . addLink (Vertex 1, Vertex 2) 10 $ addVertex (Vertex 3) graph
(fromList [Vertex 1,Vertex 2],fromList [Link {edge = (Vertex 1,Vertex 2), weight = 10.0}])
-}
t_delete_vertex = TestCase $ assertEqual "Delete Vertex" (show ( deleteVertex (Vertex 3) . addLink (Vertex 1, Vertex 2) 10 $ addVertex (Vertex 3) graph )) "(fromList [Vertex 1,Vertex 2],fromList [Link {edge = (Vertex 1,Vertex 2), weight = 10.0}])"
{-
> deleteVertex (Vertex 1) . addLink (Vertex 1, Vertex 2) 10 $ addVertex (Vertex 3) graph
(fromList [Vertex 2,Vertex 3],fromList [])
-}
t_delete_vertex_with_link = TestCase $ assertEqual "Delete Vertex with Link" (show ( deleteVertex (Vertex 1) . addLink (Vertex 1, Vertex 2) 10 $ addVertex (Vertex 3) graph )) "(fromList [Vertex 2,Vertex 3],fromList [])"
{-
> deleteVertex (Vertex 4) . addLink (Vertex 1, Vertex 2) 10 $ addVertex (Vertex 3) graph
*** Exception: There is no such vertex in the graph.
-}
t_delete_nonexisting_vertex = TestCase $ checkError "t_delete_nonexisting_vertex must raise error"
"There is no such vertex in the graph"
(deleteVertex (Vertex 4) . addLink (Vertex 1, Vertex 2) 10 $ addVertex (Vertex 3) graph)
{-
> deleteLink (Vertex 1, Vertex 2) $ addLink (Vertex 1, Vertex 2) 10 graph
(fromList [Vertex 1,Vertex 2],fromList [])
-}
t_delete_link = TestCase $ assertEqual "Delete Link" (show ( deleteLink (Vertex 1, Vertex 2) $ addLink (Vertex 1, Vertex 2) 10 graph )) "(fromList [Vertex 1,Vertex 2],fromList [])"
{-
> deleteLink (Vertex 1, Vertex 2) . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph
(fromList [Vertex 1,Vertex 2],fromList [Link {edge = (Vertex 2,Vertex 1), weight = 20.0}])
-}
t_delete_link_2 = TestCase $ assertEqual "Delete Link 2" (show ( deleteLink (Vertex 1, Vertex 2) . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph )) "(fromList [Vertex 1,Vertex 2],fromList [Link {edge = (Vertex 2,Vertex 1), weight = 20.0}])"
{-
> deleteLink (Vertex 2, Vertex 1) $ addLink (Vertex 1, Vertex 2) 10 graph
*** Exception: There is no such edge in the graph.
-}
t_delete_nonexisting_link = TestCase $ checkError "t_delete_nonexisting_link must raise error"
"There is no such edge in the graph"
(deleteLink (Vertex 2, Vertex 1) $ addLink (Vertex 1, Vertex 2) 10 graph)
  
{-
> findVertex (Vertex 2) . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph
fromList [Link {edge = (Vertex 1,Vertex 2), weight = 10.0},Link {edge = (Vertex 2,Vertex 1), weight = 20.0}]
-}
t_find_vertex = TestCase $ assertEqual "Find Vertex" (show ( findVertex (Vertex 2) . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph )) "fromList [Link {edge = (Vertex 1,Vertex 2), weight = 10.0},Link {edge = (Vertex 2,Vertex 1), weight = 20.0}]"
{-
> findVertex (Vertex 3) . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph
fromList []
-}
t_find_nonexisting_vertex = TestCase $ assertEqual "Find nonexisting Vertex" (show ( findVertex (Vertex 3) . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph )) "fromList []"
{-
> linkCount . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph
2
-}
t_link_count = TestCase $ assertEqual "Link count" (show ( linkCount . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph )) "2"
{-
> totalWeight . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph
30.0
-}
t_totalWeight = TestCase $ assertEqual "Total weight" (show ( totalWeight . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph )) "30.0"
{-
> averageWeight . addLink (Vertex 3, Vertex 4) 18 . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph
16.0
-}
t_average_weight = TestCase $ assertEqual "Average weight" (show ( averageWeight . addLink (Vertex 3, Vertex 4) 18 . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph )) "16.0"
{-
> medianWeight . addLink (Vertex 3, Vertex 4) 18 . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph
18.0
-}
t_median_weight = TestCase $ assertEqual "Median weight" (show ( medianWeight . addLink (Vertex 3, Vertex 4) 18 . addLink (Vertex 2, Vertex 1) 20 $ addLink (Vertex 1, Vertex 2) 10 graph )) "18.0"
{-
> averageWeight graph
*** Exception: The graph doesn't contain any edges.
-}
t_average_weight_e1 = TestCase $ checkError "t_average_weight_e1 must raise error"
"The graph doesn't contain any edges"
(averageWeight graph)
{-
> medianWeight graph
*** Exception: The graph doesn't contain any edges.
-}
t_median_weight_e1 = TestCase $ checkError "t_median_weight_e1 must raise error"
"The graph doesn't contain any edges"
   (medianWeight graph)
checkError :: String -> String -> a -> IO ()
checkError name msg x = handle (errorCatcher name msg) $ do evaluate x
assertFailure name
errorCatcher :: String -> String -> ErrorCall -> IO ()
errorCatcher name msg e = unless (show e == msg) (assertFailure $ name ++ " - message mismatch")
main = runTestTT $ TestList [t_create_graph, t_add_vertex, t_add_two_vertices, t_add_link, t_add_link_2, t_add_link_twice, t_add_link_3, t_delete_vertex, t_delete_vertex_with_link, t_delete_nonexisting_vertex, t_delete_link, t_delete_link_2, t_delete_nonexisting_link, t_find_vertex, t_find_nonexisting_vertex, t_link_count, t_totalWeight, t_average_weight, t_median_weight, t_average_weight_e1, t_median_weight_e1]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment