{-# LANGUAGE TemplateHaskell #-} module Clash.Tests.XException where import Clash.XException import Test.Tasty import Test.Tasty.HUnit import Test.Tasty.HUnit.Extra import Test.Tasty.TH expectLeft :: HasCallStack => Either a b -> Assertion expectLeft (Left _) = pure () expectLeft (Right _) = assertFailure "Expected Left, got Right" expectRight :: HasCallStack => Either a b -> Assertion expectRight (Right _) = pure () expectRight (Left _) = assertFailure "Expected Right, got Left" case_hasX :: Assertion case_hasX = do expectRight $ hasX @(Int, Int) (1, 2) expectLeft $ hasX @(Int, Int) (x, 2) expectLeft $ hasX @(Int, Int) (1, x) expectLeft $ hasX @(Int, Int) (x, x) expectLeft $ hasX @(Int, Int) x expectExceptionNoX $ hasX @(Int, Int) (e, 2) expectExceptionNoX $ hasX @(Int, Int) (1, e) expectExceptionNoX $ hasX @(Int, Int) (e, e) expectExceptionNoX $ hasX @(Int, Int) (x, e) expectExceptionNoX $ hasX @(Int, Int) (e, x) expectExceptionNoX $ hasX @(Int, Int) e where x = errorX "X" e = error "E" tests :: TestTree tests = $(testGroupGenerator) -- Run with: -- -- ./repld p:tests -T Clash.Tests.XException.main -- -- Add -W if you want to run tests in spite of warnings -- main :: IO () main = defaultMain tests