#!/usr/bin/runhugs +l module Main where import Test.HUnit import Control.Monad import System import AufgabeFFP7 import Test.QuickCheck import System.IO.Unsafe cases1 = TestLabel "buffer" $ TestList [ TestCase $ assertEqual "empty" (0, "") (empty), TestCase $ assertEqual "insert1" (1, "a") (insert 'a' empty), TestCase $ assertEqual "insert2" (2, "ab") (insert 'b' (insert 'a' empty)), TestCase $ assertEqual "insert3" (1, "ba") (insert 'b' (-100, "a")), TestCase $ assertEqual "insert4" (2, "ab") (insert 'b' (100, "a")), TestCase $ assertEqual "delete1" (0, "bc") (delete (0, "abc")), TestCase $ assertEqual "delete2" (2, "ab") (delete (2, "abc")), TestCase $ assertEqual "delete3" (0, "abc") (delete (-100, "abc")), TestCase $ assertEqual "delete4" (3, "abc") (delete (100, "abc")), TestCase $ assertEqual "left1" (0, "abc") (left (0, "abc")), TestCase $ assertEqual "left2" (0, "abc") (left (-100, "abc")), TestCase $ assertEqual "left3" (1, "abc") (left (2, "abc")), TestCase $ assertEqual "left4" (3, "abc") (left (4, "abc")), TestCase $ assertEqual "left5" (3, "abc") (left (100, "abc")), TestCase $ assertEqual "right1" (1, "abc") (right (0, "abc")), TestCase $ assertEqual "right2" (0, "abc") (right (-100, "abc")), TestCase $ assertEqual "right3" (2, "abc") (right (1, "abc")), TestCase $ assertEqual "right4" (3, "abc") (right (3, "abc")), TestCase $ assertEqual "right5" (3, "abc") (right (100, "abc")), TestCase $ assertEqual "atLeft1" (True) (atLeft (0, "abc")), TestCase $ assertEqual "atLeft2" (False) (atLeft (1, "abc")), TestCase $ assertEqual "atLeft3" (True) (atLeft (-100, "abc")), TestCase $ assertEqual "atRight1" (True) (atRight (3, "abc")), TestCase $ assertEqual "atRight2" (False) (atRight (1, "abc")), TestCase $ assertEqual "atRight3" (True) (atRight (100, "abc")) ] -------------------------------------------------------------------------------- cases2 = TestLabel "ssfn/minfree" $ TestList [ TestCase $ assertEqual "ssfn1" (5) (ssfn [0,1,2,3,4,6,7,8,9]), TestCase $ assertEqual "minfree1" (5) (minfree [0,1,2,3,4,6,7,8,9]), TestCase $ assertEqual "ssfn2" (0) (ssfn [1,2,3,4,5,6,7,8,9]), TestCase $ assertEqual "minfree2" (0) (minfree [1,2,3,4,5,6,7,8,9]), TestCase $ assertEqual "ssfn/minfree" (ssfn (filter (/=499) [0..520])) (minfree (filter (/=499) [0..520])), TestCase $ assertEqual "quickCheck1" () (unsafePerformIO (quickCheck prop_ssfn_eq_minfree_a)), TestCase $ assertEqual "quickCheck2" () (unsafePerformIO (quickCheck prop_ssfn_eq_minfree_b)) ] -------------------------------------------------------------------------------- tests :: [Test] tests = [cases1, cases2] isSuccess :: Counts -> Bool isSuccess Counts{ cases = _, tried = _, errors = 0, failures = 0 } = True isSuccess Counts{ cases = _, tried = _, errors = _, failures = _ } = False runTest :: Test -> IO () runTest test = do result <- runTestTT test unless (isSuccess result) exitFailure main = do forM tests $ (\test -> runTest test)