import System.Time.Monotonic.Direct import Data.Word (Word32) import Data.Time.Clock (DiffTime) test :: DiffTime -> Word32 -> Word32 -> IO Bool test expected new old = return $ diffMSec32 new old == expected && diffMSec32 old new == -expected where diffMSec32 = systemClockDiffTime systemClock_GetTickCount main :: IO () main = do True <- test 0 100 100 True <- test 0 0 0 True <- test 0 maxBound maxBound True <- test 0.001 101 100 True <- test (-0.001) 100 101 True <- test 2000000 3000000000 1000000000 True <- test (-2000000) 1000000000 3000000000 True <- test 0.001 minBound maxBound True <- test (-0.001) maxBound minBound putStrLn "All tests passed"