Z-Data-0.8.2.0: test/Z/ForeignSpec.hs
{-# LANGUAGE UnliftedFFITypes #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Z.ForeignSpec where
import qualified Data.List as List
import qualified Z.Data.CBytes as CB
import qualified Z.Data.JSON as JSON
import Z.Foreign
import qualified Z.Data.Vector.Base as V
import qualified Z.Data.Array as A
import Test.QuickCheck
import Test.QuickCheck.Function
import Test.QuickCheck.Property
import Test.Hspec
import Test.Hspec.QuickCheck
import System.IO.Unsafe
spec :: Spec
spec = describe "Foreign" $ do
describe "pass prim array list to foreign" $ do
prop "sum first should be equal(unsafe FFI)" $ \ xss ->
let pas = List.map (V.pack . getNonEmpty) xss :: [A.PrimArray Int]
s = sum (List.map (List.head . getNonEmpty) xss)
in unsafeDupablePerformIO (withPrimArrayListUnsafe pas sum_first_unsafe) === s
prop "sum first should be equal(safe FFI)" $ \ xss ->
let pas = List.map (V.pack . getNonEmpty) xss :: [A.PrimArray Int]
s = sum (List.map (List.head . getNonEmpty) xss)
in unsafeDupablePerformIO (withPrimArrayListSafe pas sum_first_safe) === s
--------------------------------------------------------------------------------
foreign import ccall unsafe sum_first_unsafe :: BAArray# Int -> Int -> IO Int
foreign import ccall safe sum_first_safe :: Ptr (Ptr Int) -> Int -> IO Int