58 lines
1.8 KiB
Kotlin
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))
|
|
}
|
|
|
|
}
|