@@ -23,6 +23,7 @@ import Test.Tasty
2323import Test.Tasty.QuickCheck as QC
2424
2525import Control.Applicative
26+ import Control.Exception
2627import Control.Monad
2728import Control.Monad.Fix (mfix )
2829import Data.Bifunctor
@@ -240,13 +241,24 @@ main = defaultMain $ testGroup "All"
240241 , testProperty " iterate" $
241242 \ (applyFun -> (f :: Int -> Int )) s ->
242243 trim (I. iterate f s) === L. take 10 (L. iterate f s)
243- , testProperty " iterate laziness" $ once $
244+ , testProperty " iterate laziness 1 " $ once $
244245 I. head (I. iterate undefined ' q' ) === ' q'
246+ , testProperty " iterate laziness 2" $ once $
247+ I. head (I. tail (I. iterate (\ c -> if c == ' r' then undefined else ' r' ) ' q' )) === ' r'
248+ , testProperty " iterate laziness 3" $ once $
249+ I. iterate (const ' q' ) undefined `seq` () === ()
245250 , testProperty " iterate'" $
246251 \ (applyFun -> (f :: Int -> Int )) s ->
247252 trim (I. iterate' f s) === L. take 10 (L. iterate f s)
248- , testProperty " iterate' laziness" $ once $
253+ , testProperty " iterate' laziness 1 " $ once $
249254 I. head (I. iterate' undefined ' q' ) === ' q'
255+ , testProperty " iterate' laziness 2" $ once $
256+ I. head (I. tail (I. iterate' (\ c -> if c == ' r' then undefined else ' r' ) ' q' )) === ' r'
257+ , testProperty " iterate' laziness 3" $ once $ ioProperty $ do
258+ xs <- try $ evaluate $ I. iterate' (const ' q' ) undefined
259+ pure $ case xs of
260+ Left (_ :: SomeException ) -> True
261+ _ -> False
250262
251263 , testProperty " repeat" $
252264 \ (s :: Int ) ->
0 commit comments