on dcdc716 help sign in
53 lines 1.6 kB history raw
1-- |
2-- Module : Streamly.Test.Common
3-- Copyright : (c) 2020 Composewell Technologies
4--
5-- License : BSD-3-Clause
6-- Maintainer : streamly@composewell.com
7-- Stability : experimental
8-- Portability : GHC
10module Streamly.Test.Common
11 ( equals
12 , listEquals
13 ) where
15import Control.Monad (when)
16import Control.Monad.IO.Class (MonadIO(..))
17import Data.List ((\\))
18#if __GLASGOW_HASKELL__ < 808
19import Data.Semigroup ((<>))
20#endif
21import Test.QuickCheck (counterexample)
22import Test.QuickCheck.Monadic (PropertyM, assert, monitor)
24equals
25 :: (Show a, Monad m)
26 => (a -> a -> Bool) -> a -> a -> PropertyM m ()
27equals eq stream list = do
28 when (not $ stream `eq` list) $
29 monitor
30 (counterexample $
31 "stream " <> show stream
32 <> "\nlist " <> show list
33 )
34 assert (stream `eq` list)
36listEquals
37 :: (Show a, Eq a, MonadIO m)
38 => ([a] -> [a] -> Bool) -> [a] -> [a] -> PropertyM m ()
39listEquals eq stream list = do
40 when (not $ stream `eq` list) $ liftIO $ putStrLn $
41 "stream " <> show stream
42 <> "\nlist " <> show list
43 <> "\nstream \\\\ list " <> show (stream \\ list)
44 <> "\nlist \\\\ stream " <> show (list \\ stream)
45 when (not $ stream `eq` list) $
46 monitor
47 (counterexample $
48 "stream " <> show stream
49 <> "\nlist " <> show list
50 <> "\nstream \\\\ list " <> show (stream \\ list)
51 <> "\nlist \\\\ stream " <> show (list \\ stream)
52 )
53 assert (stream `eq` list)