From bb515750589da04174f553f587e7f52f1120303c Mon Sep 17 00:00:00 2001 From: Daniel Slapman Date: Sun, 23 Mar 2025 14:58:21 +0100 Subject: [PATCH 1/2] tests for SequenceUtils --- test/SequenceUtilsSpec.hs | 34 ++++++++++++++++++++++++++++++++++ test/Spec.hs | 8 +++++++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 test/SequenceUtilsSpec.hs diff --git a/test/SequenceUtilsSpec.hs b/test/SequenceUtilsSpec.hs new file mode 100644 index 0000000..e4018fe --- /dev/null +++ b/test/SequenceUtilsSpec.hs @@ -0,0 +1,34 @@ +module SequenceUtilsSpec (seqTestCases) where + +import Data.Sequence +import SequenceUtils +import Test.HUnit + +testMaybeNesEmptySequence :: Test +testMaybeNesEmptySequence = TestCase $ assertEqual "maybeNes empty sequence" Nothing (maybeNes (empty :: Seq Int)) + +testMaybeNesNonEmptySequence :: Test +testMaybeNesNonEmptySequence = TestCase $ assertEqual "maybeNes non-empty sequence" (Just $ fromList [1, 2, 3]) (maybeNes $ fromList [1, 2, 3]) + +testUniqEmptySequence :: Test +testUniqEmptySequence = TestCase $ assertEqual "uniq empty sequence" (empty :: Seq Int) (uniq (empty :: Seq Int)) + +testUniqNonEmptySequence :: Test +testUniqNonEmptySequence = TestCase $ assertEqual "uniq non-empty sequence" (fromList [1, 2, 3]) (uniq $ fromList [1, 2, 2, 3]) + +testMapMaybeEmptySequence :: Test +testMapMaybeEmptySequence = TestCase $ assertEqual "mapMaybe empty sequence" (empty :: Seq Int) (mapMaybe (const Nothing) (empty :: Seq Int)) + +testMapMaybeNonEmptySequence :: Test +testMapMaybeNonEmptySequence = TestCase $ assertEqual "mapMaybe non-empty sequence" (fromList [1, 3]) (mapMaybe (\x -> if x == 2 then Nothing else Just x) $ fromList [1, 2, 3]) + +seqTestCases :: Test +seqTestCases = + TestList + [ testMaybeNesEmptySequence, + testMaybeNesNonEmptySequence, + testUniqEmptySequence, + testUniqNonEmptySequence, + testMapMaybeEmptySequence, + testMapMaybeNonEmptySequence + ] \ No newline at end of file diff --git a/test/Spec.hs b/test/Spec.hs index 4e50657..a090896 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -1,4 +1,10 @@ +import SequenceUtilsSpec import Test.HUnit +import System.Exit (exitFailure, exitSuccess) main :: IO () -main = putStrLn "Test suite not yet implemented" \ No newline at end of file +main = do + counts <- runTestTT seqTestCases + if errors counts + failures counts == 0 + then exitSuccess + else exitFailure \ No newline at end of file From 89a2d4e54d939b13e4bc5d7a284dca7c1df3a1bc Mon Sep 17 00:00:00 2001 From: Daniel Slapman Date: Sun, 23 Mar 2025 20:18:40 +0100 Subject: [PATCH 2/2] tests for HashSetUtils --- test/HashSetUtilsSpec.hs | 23 +++++++++++++++++++++++ test/Spec.hs | 17 ++++++++++++----- 2 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 test/HashSetUtilsSpec.hs diff --git a/test/HashSetUtilsSpec.hs b/test/HashSetUtilsSpec.hs new file mode 100644 index 0000000..545bd74 --- /dev/null +++ b/test/HashSetUtilsSpec.hs @@ -0,0 +1,23 @@ +module HashSetUtilsSpec (hashSetTestCases) where + +import qualified Data.HashMap.Strict as HM +import Data.HashSet +import HashSetUtils +import Test.HUnit + +testMaybeNesEmptyHashSet :: Test +testMaybeNesEmptyHashSet = TestCase $ assertEqual "maybeNes empty HashSet" Nothing (maybeNes (empty :: HashSet Int)) + +testMaybeNesNonEmptyHashSet :: Test +testMaybeNesNonEmptyHashSet = TestCase $ assertEqual "maybeNes non-empty HashSet" (Just $ (fromList [1, 2, 3] :: HashSet Int)) (maybeNes $ fromList [1, 2, 3]) + +fromHashMapTest :: Test +fromHashMapTest = TestCase $ assertEqual "fromHashMap" (fromList [(1, "a"), (2, "b"), (3, "c")] :: HashSet (Int, String)) (fromHashMap $ HM.fromList [(1, "a"), (2, "b"), (3, "c")]) + +hashSetTestCases :: Test +hashSetTestCases = + TestList + [ testMaybeNesEmptyHashSet, + testMaybeNesNonEmptyHashSet, + fromHashMapTest + ] \ No newline at end of file diff --git a/test/Spec.hs b/test/Spec.hs index a090896..46da303 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -1,10 +1,17 @@ +import HashSetUtilsSpec import SequenceUtilsSpec import Test.HUnit -import System.Exit (exitFailure, exitSuccess) +import System.Exit (exitFailure) + +processCounts :: Counts -> IO () +processCounts counts = do + if errors counts + failures counts == 0 + then return () + else exitFailure main :: IO () main = do - counts <- runTestTT seqTestCases - if errors counts + failures counts == 0 - then exitSuccess - else exitFailure \ No newline at end of file + hsCounts <- runTestTT hashSetTestCases + processCounts hsCounts + seqCounts <- runTestTT seqTestCases + processCounts seqCounts \ No newline at end of file