1
+ {-# LANGUAGE ScopedTypeVariables #-}
2
+
3
+ module Main (main ) where
4
+
5
+ import Test.Tasty
6
+ import Test.Tasty.HUnit
7
+
8
+ import Control.Monad.Loops
9
+
10
+ testTakeWhileM :: Assertion
11
+ testTakeWhileM = do
12
+ actual <- takeWhileM (return . id ) [True , True , False ]
13
+ let expected = takeWhile ( id ) [True , True , False ]
14
+ actual @?= expected
15
+
16
+ testTakeWhileMEdgeCase1 :: Assertion
17
+ testTakeWhileMEdgeCase1 = do
18
+ actual <- takeWhileM (return . id ) []
19
+ let expected = takeWhile ( id ) []
20
+ actual @?= expected
21
+
22
+ testTakeWhileMEdgeCase2 :: Assertion
23
+ testTakeWhileMEdgeCase2 = do
24
+ actual <- takeWhileM (return . id ) [False , False , False ]
25
+ let expected = takeWhile ( id ) [False , False , False ]
26
+ actual @?= expected
27
+
28
+ testTakeWhileMEdgeCase3 :: Assertion
29
+ testTakeWhileMEdgeCase3 = do
30
+ let emptyList :: [Int ] = []
31
+ actual <- takeWhileM (const undefined ) emptyList
32
+ let expected = takeWhile (const undefined ) emptyList
33
+ actual @?= expected
34
+
35
+ tests :: TestTree
36
+ tests = testGroup " unit tests"
37
+ [ testCase
38
+ " Testing `takeWhileM`"
39
+ testTakeWhileM
40
+ , testCase
41
+ " Testing `takeWhileM (edge case 1)`"
42
+ testTakeWhileMEdgeCase1
43
+ , testCase
44
+ " Testing `takeWhileM (edge case 2)`"
45
+ testTakeWhileMEdgeCase2
46
+ , testCase
47
+ " Testing `takeWhileM (edge case 3)`"
48
+ testTakeWhileMEdgeCase3
49
+ ]
50
+
51
+ main :: IO ()
52
+ main = defaultMain tests
0 commit comments