1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
module Main where
import Control.Applicative
import Test.HUnit
import System.Directory ( getTemporaryDirectory )
import System.FilePath ( (</>) )
import Distribution.Simple.Utils ( withTempDirectory )
import Distribution.Verbosity ( silent )
import Data.Binary
data Foo = Bar !Word32 !Word32 !Word32 deriving (Eq, Show)
instance Binary Foo where
get = Bar <$> get <*> get <*> get
put (Bar a b c) = put (a,b,c)
exampleData :: [Foo]
exampleData = make bytes
where
make (a:b:c:xs) = Bar a b c : make xs
make _ = []
bytes = take (256*1024) (cycle [minBound..maxBound])
readWriteTest :: Test
readWriteTest = TestCase $ do
tmpDir <- getTemporaryDirectory
withTempDirectory silent tmpDir "foo-dir" $ \dir -> do
let fn = dir </> "foo.bin"
encodeFile fn exampleData
content <- decodeFile fn
-- It'd be nice to use lsof to verify that 'fn' isn't still open.
exampleData @=? content
main :: IO ()
main = do
_ <- runTestTT readWriteTest
return ()
|