@@ -99,6 +99,7 @@ import Data.Map.Strict (Map)
99
99
import Data.Maybe (fromMaybe )
100
100
import Data.Monoid (Endo (.. ))
101
101
import Data.Dynamic (Dynamic , toDyn )
102
+ import Data.Semigroup (Max (.. ))
102
103
import Data.Typeable
103
104
import Data.STRef.Lazy
104
105
import qualified Data.List.Trace as Trace
@@ -593,33 +594,35 @@ data SimEvent
593
594
deriving Generic
594
595
deriving Show via Quiet SimEvent
595
596
596
- seThreadLabel' :: SimEvent -> Maybe ThreadLabel
597
- seThreadLabel' SimEvent {seThreadLabel} = seThreadLabel
598
- seThreadLabel' SimPOREvent {seThreadLabel} = seThreadLabel
599
- seThreadLabel' SimRacesFound {} = Nothing
600
597
601
- ppSimEvent :: Int -- ^ width of thread label
598
+ ppSimEvent :: Int -- ^ width of the time
599
+ -> Int -- ^ width of thread id
600
+ -> Int -- ^ width of thread label
602
601
-> SimEvent
603
602
-> String
604
- ppSimEvent d SimEvent {seTime, seThreadId, seThreadLabel, seType} =
605
- printf " %-24s - %-13s %-*s - %s"
603
+ ppSimEvent timeWidth tidWidth tLabelWidth SimEvent {seTime, seThreadId, seThreadLabel, seType} =
604
+ printf " %-*s - %-*s %-*s - %s"
605
+ timeWidth
606
606
(show seTime)
607
+ tidWidth
607
608
(show seThreadId)
608
- d
609
+ tLabelWidth
609
610
threadLabel
610
611
(show seType)
611
612
where
612
613
threadLabel = fromMaybe " " seThreadLabel
613
- ppSimEvent d SimPOREvent {seTime, seThreadId, seStep, seThreadLabel, seType} =
614
- printf " %-24s - %-13s %-*s - %s"
614
+ ppSimEvent timeWidth tidWidth tLableWidth SimPOREvent {seTime, seThreadId, seStep, seThreadLabel, seType} =
615
+ printf " %-*s - %-*s %-*s - %s"
616
+ timeWidth
615
617
(show seTime)
618
+ tidWidth
616
619
(show (seThreadId, seStep))
617
- d
620
+ tLableWidth
618
621
threadLabel
619
622
(show seType)
620
623
where
621
624
threadLabel = fromMaybe " " seThreadLabel
622
- ppSimEvent _ (SimRacesFound controls) =
625
+ ppSimEvent _ _ _ (SimRacesFound controls) =
623
626
" RacesFound " ++ show controls
624
627
625
628
data SimResult a
@@ -637,16 +640,55 @@ type SimTrace a = Trace.Trace (SimResult a) SimEvent
637
640
ppTrace :: Show a => SimTrace a -> String
638
641
ppTrace tr = Trace. ppTrace
639
642
show
640
- (ppSimEvent (bimaximum (bimap ( const 0 ) ( maybe 0 length . seThreadLabel') tr)) )
643
+ (ppSimEvent timeWidth tidWith labelWidth )
641
644
tr
645
+ where
646
+ (Max timeWidth, Max tidWith, Max labelWidth) =
647
+ bimaximum
648
+ . bimap (const (Max 0 , Max 0 , Max 0 ))
649
+ (\ a -> case a of
650
+ SimEvent {seTime, seThreadId, seThreadLabel} ->
651
+ ( Max (length (show seTime))
652
+ , Max (length (show (seThreadId)))
653
+ , Max (length seThreadLabel)
654
+ )
655
+ SimPOREvent {seTime, seThreadId, seThreadLabel} ->
656
+ ( Max (length (show seTime))
657
+ , Max (length (show (seThreadId)))
658
+ , Max (length seThreadLabel)
659
+ )
660
+ SimRacesFound {} ->
661
+ (Max 0 , Max 0 , Max 0 )
662
+ )
663
+ $ tr
664
+
642
665
643
666
-- | Like 'ppTrace' but does not show the result value.
644
667
--
645
668
ppTrace_ :: SimTrace a -> String
646
669
ppTrace_ tr = Trace. ppTrace
647
670
(const " " )
648
- (ppSimEvent (bimaximum (bimap ( const 0 ) ( maybe 0 length . seThreadLabel') tr)) )
671
+ (ppSimEvent timeWidth tidWith labelWidth )
649
672
tr
673
+ where
674
+ (Max timeWidth, Max tidWith, Max labelWidth) =
675
+ bimaximum
676
+ . bimap (const (Max 0 , Max 0 , Max 0 ))
677
+ (\ a -> case a of
678
+ SimEvent {seTime, seThreadId, seThreadLabel} ->
679
+ ( Max (length (show seTime))
680
+ , Max (length (show (seThreadId)))
681
+ , Max (length seThreadLabel)
682
+ )
683
+ SimPOREvent {seTime, seThreadId, seThreadLabel} ->
684
+ ( Max (length (show seTime))
685
+ , Max (length (show (seThreadId)))
686
+ , Max (length seThreadLabel)
687
+ )
688
+ SimRacesFound {} ->
689
+ (Max 0 , Max 0 , Max 0 )
690
+ )
691
+ $ tr
650
692
651
693
-- | Trace each event using 'Debug.trace'; this is useful when a trace ends with
652
694
-- a pure error, e.g. an assertion.
0 commit comments