File tree Expand file tree Collapse file tree 1 file changed +23
-7
lines changed
io-sim/test/Test/Control/Monad Expand file tree Collapse file tree 1 file changed +23
-7
lines changed Original file line number Diff line number Diff line change @@ -434,15 +434,31 @@ doit n = do
434
434
threadDelay 1
435
435
readTVarIO r
436
436
437
-
438
- traceNoDuplicates :: (Testable prop1 , Show a1 ) => ((a1 -> a2 -> a2 ) -> prop1 ) -> Property
439
- traceNoDuplicates k = r `pseq` (k addTrace .&&. maximum (traceCounts () ) == 1 )
437
+ traceNoDuplicates :: forall a b .
438
+ (Show a )
439
+ => ((a -> b -> b ) -> Property )
440
+ -> Property
441
+ -- this NOINLINE pragma is useful for debugging if `r` didn't flow outside of
442
+ -- `traceNoDuplicate`.
443
+ {-# NOINLINE traceNoDuplicates #-}
444
+ traceNoDuplicates k = unsafePerformIO $ do
445
+ r <- newIORef (Map. empty :: Map String Int )
446
+ return $ r `pseq`
447
+ (k (addTrace r) .&&. counterexample " trace counts" (maximum (Map. elems (traceCounts r)) === 1 ))
440
448
where
441
- r = unsafePerformIO $ newIORef (Map. empty :: Map String Int )
442
- addTrace t x = unsafePerformIO $ do
443
- atomicModifyIORef r (\ m-> (Map. insertWith (+) (show t) 1 m,() ))
449
+ addTrace :: IORef (Map String Int ) -> a -> b -> b
450
+ addTrace r t x = unsafePerformIO $ do
451
+ let s = show t
452
+ atomicModifyIORef r
453
+ (\ m->
454
+ let m' = Map. insertWith (+) s 1 m
455
+ in (m', () )
456
+ )
444
457
return x
445
- traceCounts () = unsafePerformIO $ Map. elems <$> readIORef r
458
+
459
+ traceCounts :: IORef (Map String Int ) -> Map String Int
460
+ traceCounts r = unsafePerformIO $ readIORef r
461
+
446
462
447
463
-- | Checks that IOSimPOR is capable of analysing an infinite simulation
448
464
-- lazily.
You can’t perform that action at this time.
0 commit comments