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(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(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{ override fun simulate(r: Random): Int { return r.nextInt(20)+1 } }