packages feed

thyme-0.4: tests/rewrite.hs

{-# OPTIONS_GHC -O2 -dumpdir dump -ddump-to-file -ddump-rule-firings #-}

import Prelude
import Data.Int
import Data.List (stripPrefix)
import Data.Set (Set)
import qualified Data.Set as Set
import Data.Thyme.Time
import System.Exit
import System.Random

main :: IO ()
main = do
    useless
    checkRuleFirings "dump/tests/rewrite.dump-rule-firings"

checkRuleFirings :: FilePath -> IO ()
checkRuleFirings file = do
    dump <- readFile file
    let strip = maybe id Set.insert . stripPrefix "Rule fired: "
    let fired = foldr strip Set.empty (lines dump)
    let unmatched = wanted `Set.difference` fired
    case Set.null unmatched of
        True -> do
            putStrLn "All wanted rules fired."
            exitSuccess
        False -> do
            putStrLn "Unmatched rules:"
            mapM_ (putStrLn . (++) "  ") (Set.toList unmatched)
            exitWith (ExitFailure 1)

useless :: IO ()
useless = do
    print =<< (fmap fromSeconds (randomIO :: IO Float)   :: IO DiffTime)
    print =<< (fmap fromSeconds (randomIO :: IO Double)  :: IO NominalDiffTime)
    print =<< (fmap fromSeconds (randomIO :: IO Int)     :: IO NominalDiffTime)
    print =<< (fmap fromSeconds (randomIO :: IO Int64)   :: IO DiffTime)
    print =<< (fmap fromSeconds (randomIO :: IO Integer) :: IO DiffTime)
    print =<< (fmap realToFrac (randomIO :: IO DiffTime) :: IO NominalDiffTime)
    print =<< (fmap realToFrac (randomIO :: IO NominalDiffTime) :: IO DiffTime)
    print =<< (fmap realToFrac (randomIO :: IO DiffTime) :: IO Double)
    print =<< (fmap realToFrac (randomIO :: IO NominalDiffTime) :: IO Double)
    print =<< (fmap realToFrac (randomIO :: IO Float) :: IO NominalDiffTime)
    print =<< (fmap realToFrac (randomIO :: IO Integer) :: IO DiffTime)

wanted :: Set String
wanted = Set.fromList
    [ "fromSeconds/Float (Data.Thyme.Clock.Internal)"
    , "fromSeconds/Double (Data.Thyme.Clock.Internal)"
    , "fromSeconds/Int (Data.Thyme.Clock.Internal)"
    , "fromSeconds/Int64 (Data.Thyme.Clock.Internal)"
    , "fromSeconds/Integer (Data.Thyme.Clock.Internal)"
    , "realToFrac/DiffTime-NominalDiffTime (Data.Thyme.Time)"
    , "realToFrac/NominalDiffTime-DiffTime (Data.Thyme.Time)"
    , "realToFrac/DiffTime-Fractional (Data.Thyme.Time)"
    , "realToFrac/NominalDiffTime-Fractional (Data.Thyme.Time)"
    , "realToFrac/Real-DiffTime (Data.Thyme.Time)"
    , "realToFrac/Real-NominalDiffTime (Data.Thyme.Time)"
    ]