swapper-0.1: test/test.hs
module Main where
import Prelude hiding (lookup)
import Control.DeepSeq
import Control.Monad
import Data.Binary.Put
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL
import Data.IORef
import System.Mem
import Data.Disk.Swapper
import Data.Disk.Swapper.Cache
import Data.Disk.Swapper.Snapshot
instance NFData BS.ByteString where
rnf x = x `seq` ()
main :: IO ()
main = do
x <- newIORef =<< mkSwapper "data" []
setCacheRef x =<< mkClockCache 5
forM_ [1..7] $ \_ -> do
d <- BS.readFile "in"
x' <- readIORef x
writeIORef x $! adding (:) d x'
performGC
forM_ [3..4] $ \i -> do
BS.writeFile "out" . getting (!!i) =<< readIORef x
performGC
forM_ [8..10] $ \_ -> do
d <- BS.readFile "in"
x' <- readIORef x
writeIORef x $! adding (:) d x'
performGC
forM_ [2..6] $ \i -> do
x' <- return . getting (!!i) =<< readIORef x
BS.writeFile "out" x'
performGC
forM_ [2..6] $ \_ -> do
modifyIORef x $ changing tail
performGC
forM_ [8..10] $ \_ -> do
d <- BS.readFile "in"
x' <- readIORef x
writeIORef x $! adding (:) d x'
performGC
BSL.writeFile "snapshot0" . runPut =<< putToSnapshot =<< readIORef x
forM_ [1..7] $ \_ -> do
d <- BS.readFile "in"
x' <- readIORef x
writeIORef x $! adding (:) d x'
performGC
BSL.writeFile "snapshot1" . runPut =<< putToSnapshot =<< readIORef x
BSL.writeFile "snapshot2" . runPut =<< putToSnapshot =<< readIORef x
print . BS.length . getting last =<< readIORef x