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

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