packages feed

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