Try relaxing upper bounds
[list-fusion-probe.git] / tests / Test.hs
1 import Data.List.Fusion.Probe
2
3 import Test.Tasty
4 import Test.Tasty.HUnit
5
6
7 import Control.Exception
8 import Control.Monad
9
10 assertErrorCall :: String -> IO a -> IO ()
11 assertErrorCall ex action =
12     handleJust isWanted (const $ return ()) $ do
13         action
14         assertFailure $ "Expected exception: " ++ show ex
15   where isWanted (ErrorCall x) = guard $ x == ex
16
17
18 x1, x2 :: Integer
19 x1 = foldl (+) 0 (fuseThis [0..1001])
20 x2 = foldr (+) 0 (fuseThis [0..1000])
21
22 main = defaultMain unitTests
23
24 unitTests = testGroup "Unit tests"
25   [ testCase "foldr fuses" $
26       x2 `compare` 500500 @?= EQ
27
28   , testCase "foldl does not fuse" $
29       assertErrorCall "fuseThis: List did not fuse" (evaluate x1)
30   ]
31
32
33