on master help sign in
Fix partial eval tests for bracket/finally
b3fea14Harendra Kumar
test/Streamly/Test/Prelude/Common.hs+21−17
@@ -88,7 +88,7 @@ module Streamly.Test.Prelude.Common
88import Control.Applicative (ZipList(..), liftA2)
88import Control.Applicative (ZipList(..), liftA2)
89import Control.Exception (Exception, try)
89import Control.Exception (Exception, try)
90import Control.Concurrent (threadDelay)
90import Control.Concurrent (threadDelay)
91−import Control.Monad (replicateM)
91+import Control.Monad (replicateM, when)
92import Control.Monad.Catch (throwM, MonadThrow)
92import Control.Monad.Catch (throwM, MonadThrow)
93import Data.Function ((&))
93import Data.Function ((&))
94import Data.IORef (IORef, modifyIORef', newIORef, readIORef, writeIORef)
94import Data.IORef (IORef, modifyIORef', newIORef, readIORef, writeIORef)
@@ -1433,10 +1433,9 @@ bracketProp t vec =
1433 refValue <- run $ readIORef ioRef
1433 refValue <- run $ readIORef ioRef
1434 assert $ refValue == 1
1434 assert $ refValue == 1
1435
1435
1436−-- XXX This test fails
1436+bracketPartialStreamProp ::
1437−_bracketPartialStreamProp ::
1438 (IsStream t) => (t IO Int -> SerialT IO Int) -> [Int] -> Property
1437 (IsStream t) => (t IO Int -> SerialT IO Int) -> [Int] -> Property
1439−_bracketPartialStreamProp t vec =
1438+bracketPartialStreamProp t vec =
1440 forAll (choose (0, length vec)) $ \len -> do
1439 forAll (choose (0, length vec)) $ \len -> do
1441 withMaxSuccess maxTestCount $
1440 withMaxSuccess maxTestCount $
1442 monadicIO $ do
1441 monadicIO $ do
@@ -1445,15 +1444,18 @@ _bracketPartialStreamProp t vec =
1445 S.drain . t $
1444 S.drain . t $
1446 S.take len $
1445 S.take len $
1447 S.bracket
1446 S.bracket
1448− (return ioRef)
1447+ (writeIORef ioRef 1 >> return ioRef)
1449− (`writeIORef` 1)
1448+ (`writeIORef` 3)
1450 (\ioref ->
1449 (\ioref ->
1451 S.mapM
1450 S.mapM
1452 (\a -> writeIORef ioref 2 >> return a)
1451 (\a -> writeIORef ioref 2 >> return a)
1453 (S.fromList vec))
1452 (S.fromList vec))
1453+ run $ do
1454− run performMajorGC
1454+ performMajorGC
1455+ threadDelay 10000
1455 refValue <- run $ readIORef ioRef
1456 refValue <- run $ readIORef ioRef
1457+ when (refValue /= 0 && refValue /= 3) $
1456− assert $ refValue == 1
1458+ error $ "refValue == " ++ show refValue
1457
1459
1458bracketExceptionProp ::
1460bracketExceptionProp ::
1459 (IsStream t, MonadThrow (t IO)
1461 (IsStream t, MonadThrow (t IO)
@@ -1491,10 +1493,9 @@ finallyProp t vec =
1491 refValue <- run $ readIORef ioRef
1493 refValue <- run $ readIORef ioRef
1492 assert $ refValue == 1
1494 assert $ refValue == 1
1493
1495
1494−-- XXX This test fails
1496+finallyPartialStreamProp ::
1495−_finallyPartialStreamProp ::
1496 (IsStream t) => (t IO Int -> SerialT IO Int) -> [Int] -> Property
1497 (IsStream t) => (t IO Int -> SerialT IO Int) -> [Int] -> Property
1497−_finallyPartialStreamProp t vec =
1498+finallyPartialStreamProp t vec =
1498 forAll (choose (0, length vec)) $ \len -> do
1499 forAll (choose (0, length vec)) $ \len -> do
1499 withMaxSuccess maxTestCount $
1500 withMaxSuccess maxTestCount $
1500 monadicIO $ do
1501 monadicIO $ do
@@ -1503,13 +1504,16 @@ _finallyPartialStreamProp t vec =
1503 S.drain . t $
1504 S.drain . t $
1504 S.take len $
1505 S.take len $
1505 S.finally
1506 S.finally
1506− (writeIORef ioRef 1)
1507+ (writeIORef ioRef 2)
1507 (S.mapM
1508 (S.mapM
1508− (\a -> writeIORef ioRef 2 >> return a)
1509+ (\a -> writeIORef ioRef 1 >> return a)
1509 (S.fromList vec))
1510 (S.fromList vec))
1511+ run $ do
1510− run performMajorGC
1512+ performMajorGC
1513+ threadDelay 10000
1511 refValue <- run $ readIORef ioRef
1514 refValue <- run $ readIORef ioRef
1515+ when (refValue /= 0 && refValue /= 2) $
1512− assert $ refValue == 1
1516+ error $ "refValue == " ++ show refValue
1513
1517
1514finallyExceptionProp ::
1518finallyExceptionProp ::
1515 (IsStream t, MonadThrow (t IO)
1519 (IsStream t, MonadThrow (t IO)
@@ -1584,11 +1588,11 @@ exceptionOps desc t = do
1584 prop (desc <> " before") $ beforeProp t
1588 prop (desc <> " before") $ beforeProp t
1585 prop (desc <> " after") $ afterProp t
1589 prop (desc <> " after") $ afterProp t
1586 prop (desc <> " bracket end of stream") $ bracketProp t
1590 prop (desc <> " bracket end of stream") $ bracketProp t
1587− -- prop (desc <> " bracket partial stream") $ bracketPartialStreamProp t
1591+ prop (desc <> " bracket partial stream") $ bracketPartialStreamProp t
1588 prop (desc <> " bracket exception in stream") $ bracketExceptionProp t
1592 prop (desc <> " bracket exception in stream") $ bracketExceptionProp t
1589 prop (desc <> " onException") $ onExceptionProp t
1593 prop (desc <> " onException") $ onExceptionProp t
1590 prop (desc <> " finally end of stream") $ finallyProp t
1594 prop (desc <> " finally end of stream") $ finallyProp t
1591− -- prop (desc <> " finally partial stream") $ finallyPartialStreamProp t
1595+ prop (desc <> " finally partial stream") $ finallyPartialStreamProp t
1592 prop (desc <> " finally exception in stream") $ finallyExceptionProp t
1596 prop (desc <> " finally exception in stream") $ finallyExceptionProp t
1593 prop (desc <> " handle") $ handleProp t
1597 prop (desc <> " handle") $ handleProp t
1594
1598