RuneFactory/src/test/kotlin/simulation/AttackDiceTest.kt

58 lines
1.8 KiB
Kotlin

package simulation
import org.junit.jupiter.api.Assertions
import java.util.*
import kotlin.test.Test
class AttackDiceTest {
@Test
fun testAttackDiceImplementation() {
val r = Random()
// Test no crit below threshold
val dice = AttackDice("1d20")
val result = dice.roll(r)
if (result.result < 20) {
Assertions.assertFalse(dice.isCrit(result))
} else {
Assertions.assertTrue(dice.isCrit(result))
}
// Test no crit below threshold
val dice2 = AttackDice("1d20c19")
val result2 = dice2.roll(r)
if (result2.result < 10) {
Assertions.assertFalse(dice2.isCrit(result2))
} else {
Assertions.assertTrue(dice2.isCrit(result2))
}
// Test crit threshold other than max
val dice3 = AttackDice("2d10c8")
val result3 = dice3.roll(r)
if (result3.result >= 8) {
Assertions.assertTrue(dice3.isCrit(result3))
} else {
Assertions.assertFalse(dice3.isCrit(result3))
}
}
@Test
fun validateCritFunctionality() {
val trueCritResult = RollResult(1, 20, 20)
val fakeCritResult = RollResult(1, 20, 19)
val defaultRoll = AttackDice("1d20")
val verboseDefaultCrit = AttackDice("1d20c20")
val normalModifiedCrit = AttackDice("1d20c19")
Assertions.assertFalse(defaultRoll.isCrit(fakeCritResult))
Assertions.assertFalse(verboseDefaultCrit.isCrit(fakeCritResult))
Assertions.assertTrue(normalModifiedCrit.isCrit(fakeCritResult))
Assertions.assertTrue(defaultRoll.isCrit(trueCritResult))
Assertions.assertTrue(verboseDefaultCrit.isCrit(trueCritResult))
Assertions.assertTrue(normalModifiedCrit.isCrit(trueCritResult))
}
}