module Main where import Test.HUnit import Control.Monad import Data.Array import AufgabeFFP5 a :: Array Int Int a = array (1,9) [(1,3),(2,(-5)),(3,0),(4,9),(5,2),(6,(-1)),(7,2),(8,(-5)),(9,1)] b :: Array Int Int b = array (1,9) [(1,3),(2,(-1)),(3,(-2)),(4,9),(5,2),(6,(-1)),(7,2),(8,0),(9,(-1))] c :: Array Int Int c = array (1,5) [(1,2),(2,3),(3,(-10)),(4,1),(5,4)] d :: Array Int Int d = array (1,6) [(1, (-3)), (2, 1), (3, 10), (4, (-5)), (5, 8), (6, 7)] minA :: Array Int Int minA = array (0,0) [(0,0)] data Week = Mon | Tue | Wed | Thu | Fri | Sat | Sun deriving (Eq, Ord, Ix, Show) w :: Array Week String w = array (Tue, Sat) [(Wed, "work"), (Thu, "study"), (Tue, "study"), (Fri, "chill"), (Sat, "relax")] cases1 = TestLabel "mas" $ TestList [ TestCase $ assertEqual "mas a" 12 (mas a), TestCase $ assertEqual "mas b" 12 (mas b), TestCase $ assertEqual "mas c" 5 (mas c), TestCase $ assertEqual "mas d" 21 (mas d), TestCase $ assertEqual "mas minA" 0 (mas minA) ] cases2 = TestLabel "amas" $ TestList [ TestCase $ assertEqual "amas a" [(3,7), (4,7)] (amas a), TestCase $ assertEqual "amas b" [(1,7),(1,8),(4,7),(4,8)] (amas b), TestCase $ assertEqual "amas c" [(1,2),(4,5)] (amas c), TestCase $ assertEqual "amas d" [(2,6)] (amas d), TestCase $ assertEqual "amas minA" [(0,0)] (amas minA) ] cases3 = TestLabel "lmas" $ TestList [ TestCase $ assertEqual "lmas a" (3,7) (lmas a), TestCase $ assertEqual "lmas b" (1,8) (lmas b), TestCase $ assertEqual "lmas c" (1,2) (lmas c), TestCase $ assertEqual "lmas d" (2,6) (lmas d), TestCase $ assertEqual "lmas minA" (0,0) (lmas minA) ] cases4 = TestLabel "minIndex" $ TestList [ TestCase $ assertEqual "minIndex a (>5)" 4 (minIndex a (>5)), TestCase $ assertEqual "minIndex a (<0)" 2 (minIndex a (<0)), TestCase $ assertEqual "minIndex a (even)" 3 (minIndex a (even)), TestCase $ assertEqual "minIndex b (odd)" 1 (minIndex b (odd)), -- TestCase $ assertEqual "minIndex b (>100)" -- error "No matching index" -- (minIndex b (>100)), TestCase $ assertEqual "minIndex w (=='relax')" Sat (minIndex w (=="relax")), TestCase $ assertEqual "minIndex w (=='work')" Wed (minIndex w (=="work")), TestCase $ assertEqual "minIndex w (=='chill')" Fri (minIndex w (=="chill")), TestCase $ assertEqual "minIndex w (/='chill')" Tue (minIndex w (/="chill")) -- TestCase $ assertEqual "minIndex w (=='swim')" -- error "No matching index" -- (minIndex w (=="swim")) ] tests :: [Test] tests = [cases1, cases2, cases3, cases4] main = do forM tests $ \test -> runTestTT test