{-# language TypeApplications #-}
{-# options_ghc -fno-warn-orphans #-}
module Main (main) where
import Data.Primitive.Foreign
import Data.Primitive.PrimArray
import Data.Primitive.Types (Prim)
import Test.QuickCheck
import System.IO.Unsafe (unsafePerformIO)
main :: IO ()
main = do
quickCheck putInGetOut
putInGetOut :: PrimArray Int -> Bool
putInGetOut arr = unsafePerformIO $ do
ptr <- newArray arr
arr' <- peekArray (sizeofPrimArray arr) ptr
pure (arr == arr')
instance (Arbitrary a, Prim a) => Arbitrary (PrimArray a) where
arbitrary = do
l <- choose (5, 25)
fmap primArrayFromList (vectorOf l arbitrary)