packages feed

contra-tracer-0.2.1.0: test/Main.hs

{-# LANGUAGE ScopedTypeVariables #-}

module Main where

import Control.Exception (SomeException, try)
import Control.Tracer (traceWith)
import Test.Control.Tracer.Properties
  ( laziness_1
  , laziness_2
  , laziness_3
  , traceTraversable_laziness
  , traceAll_laziness)

assertNoException :: String -> IO a -> IO ()
assertNoException name action = do
  result <- try action
  case result of
    Left (e :: SomeException) ->
      error ("FAILED: " ++ name ++ "\n  unexpected exception: " ++ show e)
    Right _ ->
      putStrLn ("PASS: " ++ name)

main :: IO ()
main = do
  assertNoException "laziness_1" $
    traceWith laziness_1 (error "failure")

  assertNoException "laziness_2" $
    traceWith laziness_2 (error "failure")

  assertNoException "laziness_3" $
    traceWith laziness_3 False

  assertNoException "traceTraversable_laziness" $
    traceWith traceTraversable_laziness (error "failure")

  assertNoException "traceAll_laziness" $
    traceWith traceAll_laziness True