55 lines
1.7 KiB
Kotlin
55 lines
1.7 KiB
Kotlin
package simulation
|
|
|
|
import java.util.*
|
|
import kotlin.test.Test
|
|
|
|
class SimulatorTest {
|
|
@Test
|
|
fun testStats(){
|
|
val itt = 10_000_000
|
|
val model = testSimulationModel(itt)
|
|
val simulator = Simulator.getInstance<Int>(Runtime.getRuntime().availableProcessors())
|
|
val start = System.nanoTime()
|
|
val results = simulator.doSimulation(model)
|
|
val finish = System.nanoTime()
|
|
println("${results.size} simulations performed in ${finish - start}ns (${(finish-start)/results.size}ns/simulation)")
|
|
}
|
|
|
|
@Test
|
|
fun testAttack(){
|
|
val itt = 10_000_000
|
|
val simulator = Simulator.getInstance<Int>(Runtime.getRuntime().availableProcessors())
|
|
|
|
val attack = SimpleMeleeAttack(
|
|
Dice("1d20"),
|
|
arrayListOf(FlatBonus(5)),
|
|
Dice("2d6"),
|
|
arrayListOf(FlatBonus(5)),
|
|
15
|
|
)
|
|
|
|
val attackWithAdvantageAndBless = SimpleMeleeAttack(
|
|
Dice("1d20", RollType.Advantage),
|
|
arrayListOf(FlatBonus(5), DiceBonus(Dice("1d4"))),
|
|
Dice("2d6"),
|
|
arrayListOf(FlatBonus(5)),
|
|
15
|
|
)
|
|
|
|
val normalAttackModel = AttackSimulatorModel(itt, attack)
|
|
val normalResults = simulator.doSimulation(normalAttackModel)
|
|
|
|
val buffedAttackModel = AttackSimulatorModel(itt, attackWithAdvantageAndBless)
|
|
val buffedResults = simulator.doSimulation(buffedAttackModel)
|
|
|
|
println("Average normal damage: ${normalResults.average()}\nAverage buffed damage: ${buffedResults.average()}")
|
|
}
|
|
}
|
|
|
|
|
|
class testSimulationModel(override val sampleSize: Int) : SimulationModel<Int>{
|
|
override fun simulate(r: Random): Int {
|
|
return r.nextInt(20)+1
|
|
}
|
|
|
|
} |