creatur-4.3.2: test/ALife/Creatur/CounterQC.hs
------------------------------------------------------------------------
-- |
-- Module : ALife.Creatur.CounterQC
-- Copyright : (c) Amy de Buitléir 2012-2013
-- 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)
tryCounter :: FilePath -> IO ()
tryCounter dir = do
let filename = dir ++ "/counter"
let k = mkPersistentCounter filename
(initialCount, k2) <- runStateT current k
assertEqual "test1" initialCount 0
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
]