@@ -21,6 +21,7 @@ import Control.Monad.State.Strict hiding (mapM, mapM_, forM, forM_, sequence, se
21import Control.Monad.Writer hiding (mapM, mapM_, forM, forM_, sequence, sequence_)
21import Control.Monad.Writer hiding (mapM, mapM_, forM, forM_, sequence, sequence_)
22import Data.Dependent.Map (DSum (..))
22import Data.Dependent.Map (DSum (..))
23import System.Mem
23import System.Mem
25import System.IO.Unsafe
26import System.IO.Unsafe
@@ -85,16 +86,20 @@ testSpider builder (bMap, eMap) = unsafePerformIO $ S.runSpiderHost $ do
85tracePerf :: Show a => a -> b -> b
86tracePerf :: Show a => a -> b -> b
86tracePerf = flip const
87tracePerf = flip const
88−testAgreement :: (Eq c, Eq d, Show c, Show d) => (forall m t. TestCaseConstraint t m => (Behavior t a, Event t b) -> m (Behavior t c, Event t d)) -> (Map Int a, Map Int b) -> IO ()
89+testAgreement :: (Eq c, Eq d, Show c, Show d) => (forall m t. TestCaseConstraint t m => (Behavior t a, Event t b) -> m (Behavior t c, Event t d)) -> (Map Int a, Map Int b) -> IO Bool
89testAgreement builder inputs = do
90testAgreement builder inputs = do
90 let identityResult = testPure builder inputs
91 let identityResult = testPure builder inputs
91 tracePerf "---------" $ return ()
92 tracePerf "---------" $ return ()
92 let spiderResult = testSpider builder inputs
93 let spiderResult = testSpider builder inputs
93 tracePerf "---------" $ return ()
94 tracePerf "---------" $ return ()
95+ let resultsAgree = identityResult == spiderResult
97+ then do putStrLn "Success:"
94− if identityResult == spiderResult then putStrLn "Success:" >> print identityResult else do
98+ print identityResult
95− putStrLn "Failure:"
99+ else do putStrLn "Failure:"
96− putStrLn $ "Pure result: " <> show identityResult
100+ putStrLn $ "Pure result: " <> show identityResult
97− putStrLn $ "Spider result: " <> show spiderResult
101+ putStrLn $ "Spider result: " <> show spiderResult
99type TestCaseConstraint t m = (Reflex t, MonadSample t m, MonadHold t m, MonadFix m, MonadFix (PushM t))
104type TestCaseConstraint t m = (Reflex t, MonadSample t m, MonadHold t m, MonadFix m, MonadFix (PushM t))
@@ -215,7 +220,9 @@ testCases =
216test :: IO ()
221test :: IO ()
218− forM_ testCases $ \(name, TestCase inputs builder) -> do
223+ results <- forM testCases $ \(name, TestCase inputs builder) -> do
219 putStrLn $ "Test: " <> name
224 putStrLn $ "Test: " <> name
220 testAgreement builder inputs
225 testAgreement builder inputs
221− return ()
226+ exitWith $ if and results