creatur-5.2.8: test/ALife/Creatur/CounterQC.hs
------------------------------------------------------------------------
-- |
-- Module : ALife.Creatur.CounterQC
-- Copyright : (c) Amy de Buitléir 2012-2014
-- License : BSD-style
-- Maintainer : amy@nualeargais.ie
-- Stability : experimental
-- Portability : portable
--
-- QuickCheck tests.
--
------------------------------------------------------------------------
{-# LANGUAGE DeriveGeneric #-}
module ALife.Creatur.CounterQC
(
test
) where
import ALife.Creatur.Counter
import Control.Monad.State (execStateT, evalStateT, runStateT)
import System.IO.Temp (withSystemTempDirectory)
import Test.Framework as TF (Test, testGroup)
import Test.HUnit as TH (assertEqual, assertBool)
import Test.Framework.Providers.HUnit (testCase)
import System.Directory (doesFileExist, doesDirectoryExist)
import System.FilePath (dropFileName)
tryCounter :: FilePath -> IO ()
tryCounter dir = do
let filename = dir ++ "/wombat/counter"
let k = mkPersistentCounter filename
(initialCount, k2) <- runStateT current k
assertEqual "test1" initialCount 0
dirExists <- doesDirectoryExist $ dropFileName filename
assertBool "directory created too early" (not dirExists)
fileExists <- doesFileExist filename
assertBool "file created too early" (not fileExists)
k3 <- execStateT increment k2
nextCount <- evalStateT current k3
assertEqual "test2" 1 nextCount
-- Re-read the counter. Was it updated properly?
let k4 = mkPersistentCounter filename
oldCount <- evalStateT current k4
assertEqual "test3" 1 oldCount
k5 <- execStateT increment k4
nextCount2 <- evalStateT current k5
assertEqual "test4" 2 nextCount2
-- Re-read the counter. Was it updated properly?
let k6 = mkPersistentCounter filename
oldCount2 <- evalStateT current k6
assertEqual "test5" 2 oldCount2
testCounter :: IO ()
testCounter = withSystemTempDirectory "creaturTest.tmp" tryCounter
test :: TF.Test
test = testGroup "HUnit ALife.Creatur.CounterQC"
[
testCase "counter"
testCounter
]