From 34a21cc42231b98b660034c61fef793a35f69ddf Mon Sep 17 00:00:00 2001
From: Guido Trotter <ultrotter@google.com>
Date: Thu, 29 Nov 2012 09:57:59 +0100
Subject: [PATCH] Add tests for verticesByDegree{Asc,Desc}

This brings our coverage of Graph.hs to 100%

Signed-off-by: Guido Trotter <ultrotter@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
---
 htest/Test/Ganeti/HTools/Graph.hs | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/htest/Test/Ganeti/HTools/Graph.hs b/htest/Test/Ganeti/HTools/Graph.hs
index e9f62cb32..4ded4dbfb 100644
--- a/htest/Test/Ganeti/HTools/Graph.hs
+++ b/htest/Test/Ganeti/HTools/Graph.hs
@@ -89,6 +89,27 @@ case_emptyVertColorMapEmpty :: Assertion
 case_emptyVertColorMapEmpty =
   assertEqual "" 0 $ IntMap.size emptyVertColorMap
 
+-- | Check if each two consecutive elements on a list
+-- respect a given condition.
+anyTwo :: (a -> a -> Bool) -> [a] -> Bool
+anyTwo _ [] = True
+anyTwo _ [_] = True
+anyTwo op (x:y:xs) = (x `op` y) && anyTwo op (y:xs)
+
+-- | Check order of vertices returned by verticesByDegreeAsc.
+prop_verticesByDegreeAscAsc :: TestableGraph -> Property
+prop_verticesByDegreeAscAsc (TestableGraph g) =
+    anyTwo (<=) (degrees asc) ==? True
+    where degrees = map (length . neighbors g)
+          asc = verticesByDegreeAsc g
+
+-- | Check order of vertices returned by verticesByDegreeDesc.
+prop_verticesByDegreeDescDesc :: TestableGraph -> Property
+prop_verticesByDegreeDescDesc (TestableGraph g) =
+    anyTwo (>=) (degrees desc) ==? True
+    where degrees = map (length . neighbors g)
+          desc = verticesByDegreeDesc g
+
 -- | Check that our generated graphs are colorable
 prop_isColorableTestableGraph :: TestableGraph -> Property
 prop_isColorableTestableGraph (TestableGraph g) = isColorable g ==? True
@@ -132,6 +153,8 @@ prop_colorDsaturAllNodes = prop_colorAllNodes colorDsatur
 testSuite "HTools/Graph"
             [ 'case_emptyVertColorMapNull
             , 'case_emptyVertColorMapEmpty
+            , 'prop_verticesByDegreeAscAsc
+            , 'prop_verticesByDegreeDescDesc
             , 'prop_colorLFClique
             , 'prop_colorDsaturClique
             , 'prop_colorLFAllNodes
-- 
GitLab