MazesOfMonad-1.0: src/MoresmauJP/Rpg/ActionsTests.hs
-- | Action resolution hunit tests
-- (c) JP Moresmau 2009
module MoresmauJP.Rpg.ActionsTests where
import MoresmauJP.Rpg.Actions
import MoresmauJP.Rpg.Character
import MoresmauJP.Rpg.CharacterTests
import MoresmauJP.Util.Random
import Test.HUnit
import Text.Printf
actionsTests=TestList [testDifficultyLevel,testEvalResults]
testDifficultyLevel = TestLabel "testDifficultyLevel" (TestCase (do
--setTestGen [10]
let jp=createTestChar "JP"
let sg=mkTestWrapper [10]
let (_,rr)=evalRand (action jp [Dexterity] (toIntLevel Neutral)) sg
assertEqual "Not standard success 0" (Success Standard 0) rr
let (_,rr)=evalRand (action jp [Dexterity] (toIntLevel RatherEasy)) sg
assertEqual "Not standard success 3" (Success Standard 3) rr
let (_,rr)=evalRand (action jp [Dexterity] (toIntLevel Easy)) sg
assertEqual "Not standard success 6" (Success Standard 6) rr
let (_,rr)=evalRand (action jp [Dexterity] (toIntLevel VeryEasy)) sg
assertEqual "Not standard success 9" (Success Standard 9) rr
let (_,rr)=evalRand (action jp [Dexterity] (toIntLevel NearUnmissable)) sg
assertEqual "Not standard success 9" (Success Standard 9) rr
let (_,rr)=evalRand (action jp [Dexterity] (toIntLevel RatherHard)) sg
assertEqual "Not standard failure 3" (Failure Standard 3) rr
let (_,rr)=evalRand (action jp [Dexterity] (toIntLevel Hard)) sg
assertEqual "Not standard failure 6" (Failure Standard 6) rr
let (_,rr)=evalRand (action jp [Dexterity] (toIntLevel VeryHard)) sg
assertEqual "Not standard failure 9" (Failure Standard 9) rr
let (_,rr)=evalRand (action jp [Dexterity] (toIntLevel NearImpossible)) sg
assertEqual "Not standard failure 9" (Failure Standard 9) rr
))
testEvalResults = TestList [
testEvalResult 1 10 (Success Exceptional 9)
,testEvalResult 3 10 (Success Remarkable 7)
,testEvalResult 8 10 (Success Standard 2)
,testEvalResult 11 10 (Failure Standard 1)
,testEvalResult 17 10 (Failure Remarkable 7)
,testEvalResult 19 10 (Failure Exceptional 9)
]
testEvalResult roll score expected= TestLabel (printf "testEvalResult %d/%d" roll score)
(TestCase (do
let actual = fst (evalResult roll score)
let msg= printf "%d/%d should be %s but is %s " roll score (show expected) (show actual)
assertEqual msg expected actual
))