mirror of https://github.com/voidlizard/hbs2
47 lines
1.3 KiB
Haskell
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)
|