packages feed

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