hbs2/miscellaneous/bytestring-mmap/tests/files.hs

47 lines
1.3 KiB
Haskell

import qualified Data.ByteString as S
import qualified Data.ByteString.Lazy as L
import System.IO.Posix.MMap
import qualified System.IO.Posix.MMap.Lazy as LM
import System.Directory
import System.Posix.Files
import System.IO
import System.FilePath
import Control.Monad
import Control.Applicative
import Text.Printf
import System.Cmd
import System.Exit
import System.Mem
import Control.Exception
main = do
print "Testing Lazy.mmap == Strict.mmap == Strict.ByteString.readFile"
system "find /home/dons/ghc/ -type f > files_to_read"
always (removeFile "files_to_read") $ do
fs <- lines <$> readFile "files_to_read"
{-
ss <- getDirectoryContents dir
fs <- filterM (\f -> do st <- getFileStatus (dir </> f)
return (not $ isDirectory st)) ss
-}
printf "Comparing %d files\n" (length fs)
forM_ (zip [1..] fs) $ \(i,f) -> do
t <- eq f
if t
then when (i `mod` 1000 == 0) $ putStr "Ok. " >> hFlush stdout
else exitWith (ExitFailure 1)
print "All good."
where
always = flip finally
eq f = do
m <- unsafeMMapFile f
lm <- LM.unsafeMMapFile f
s <- S.readFile f
return (m == s && L.fromChunks [m] == lm)