-- | 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 ))