packages feed

bytestring-mmap-0.1.2: tests/files.hs

import qualified Data.ByteString      as S
import qualified Data.ByteString.Lazy as L
import System.IO.Posix.MMap

import System.Directory
import System.Posix.Files
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
    system "find /usr/src -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` 100 == 0) $ print i
                   else exitWith (ExitFailure 1)

  where 
    always = flip finally

eq f = do
        m <- mmapFile f
        s <- S.readFile f
        return (m == s)