{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-} {-# LANGUAGE BangPatterns #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE OverloadedLists #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} module HaskellWorks.Data.FromForeignRegionSpec (spec) where import Control.Monad.IO.Class import Data.Word import Data.Word import HaskellWorks.Data.FromByteString import HaskellWorks.Data.FromForeignRegion import HaskellWorks.Hspec.Hedgehog import Hedgehog import Hedgehog.Internal.Gen import Test.Hspec import qualified Data.ByteString as BS import qualified Data.Vector.Storable as DVS import qualified HaskellWorks.Data.FromForeignRegion as IO import qualified Hedgehog.Gen as G import qualified Hedgehog.Range as R import qualified System.Directory as IO import qualified System.IO as IO {-# ANN module ("HLint: Ignore Redundant do" :: String) #-} spec :: Spec spec = describe "HaskellWorks.Data.FromForeignRegionSpec" $ do it "Be able to load file into Vector" $ requireProperty $ do ws <- forAll $ G.list (R.linear 0 (1024 * 16)) (G.word8 R.constantBounded) liftIO $ IO.createDirectoryIfMissing True "./tmp" (fp, h) <- liftIO $ IO.openBinaryTempFile "./tmp" "property-test-.txt" liftIO $ BS.hPut h (BS.pack ws) liftIO $ IO.hClose h !(_ :: DVS.Vector Word64) <- liftIO $ IO.mmapFromForeignRegion fp liftIO $ IO.removeFile fp True === True