psx-0.1.0.0: test/psx-test-no-psx.hsc
module Main (main) where
#include "hs-psx.h"
import Data.Int (Int32)
import Foreign.C.Error (throwErrnoIfMinus1)
import Foreign.Ptr (Ptr)
import Foreign.Marshal (alloca)
import Foreign.Storable (Storable(..))
import Test.Tasty (defaultMain, testGroup)
import Test.Tasty.HUnit ((@?=), assertBool, testCase)
main :: IO ()
main = defaultMain $ testGroup "Tests" [
testCase "sigfillset sets HS_PSX_SIGNAL" sigfillsetNotWrapped
, testCase "Haskell psx is not detected" psxNotDetected
]
data SigsetT
instance Storable SigsetT where
sizeOf _ = #{size sigset_t}
alignment _ = #{alignment sigset_t}
peek _ = error "peek not implemented"
poke _ _ = error "poke not implemented"
foreign import ccall unsafe "signal.h sigfillset"
sigfillset :: Ptr SigsetT -> IO #{type int}
foreign import ccall unsafe "signal.h sigismember"
sigismember :: Ptr SigsetT -> #{type int} -> IO #{type int}
sigfillsetNotWrapped :: IO ()
sigfillsetNotWrapped = alloca $ \set -> do
0 <- throwErrnoIfMinus1 "sigfillset" $ sigfillset set
isMember <- throwErrnoIfMinus1 "sigismember" $ sigismember set #{const HS_PSX_SIGNAL}
isMember @?= 1
foreign import ccall unsafe "detect-psx.h detect_psx"
detectPsx :: IO #{type int}
psxNotDetected :: IO ()
psxNotDetected =
assertBool "psx detected" . not . toBool =<< detectPsx
where
toBool n = n /= 0