From db8105deb7ee31bb02da875f8d24c50e863a3cd1 Mon Sep 17 00:00:00 2001 From: aed3 <32887801+aed3@users.noreply.github.com> Date: Fri, 29 May 2026 17:26:57 -0500 Subject: [PATCH 1/9] Introducing EntityFilter The `EntityFilter` struct will be used to replace the `SelectForView` and most of the `RegistryContainer` code as a simpler way to keep track of entities that should be acted on. Instead of saving a list of what components need to be selected and using the same tag to mark the currently selected ones, any function that wants to work on a subset of entities based on tags needs their caller to assign that entity before calling. The `EntityFilter`'s job is simply to make it easier to run views or groups over those chosen tags without needing to type that tag all over the function. This commit is making sure the filter works by replacing a small `SelectForView` usage with it. The one replaced also tests a feature that adds a tag based on pre-existing components as, on rare occasions, a component that isn't used in the systems being called is part of the filter. --- extras/PokeSim.cpp | 24 ++++---- extras/PokeSim.hpp | 71 ++++++++++++++++++++++++ src/CalcDamage/CalcDamage.cpp | 1 + src/Components/Tags/Selection.hpp | 7 ++- src/SimulateTurn/CalcDamageSpecifics.cpp | 28 ++++------ src/Utilities/EntityFilter.hpp | 66 ++++++++++++++++++++++ src/Utilities/headers.hpp | 1 + 7 files changed, 163 insertions(+), 35 deletions(-) create mode 100644 src/Utilities/EntityFilter.hpp diff --git a/extras/PokeSim.cpp b/extras/PokeSim.cpp index c2f00292..e8ac3447 100644 --- a/extras/PokeSim.cpp +++ b/extras/PokeSim.cpp @@ -3505,35 +3505,30 @@ void updatePartialProbabilities(Simulation& simulation) { } // namespace void cloneFromDamageRolls(Simulation& simulation, DamageRollKind damageRollKind) { - pokesim::internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) return; + pokesim::internal::EntityFilter moveFilter{simulation}; + moveFilter.applySelectionTags(); + if (moveFilter.hasNoneSelected()) return; bool forAllDamageRolls = damageRollKind & DamageRollKind::ALL_DAMAGE_ROLLS; bool forRequiredDamageRolls = simulation.simulateTurnOptions.getMakeBranchesOnRandomEvents() || forAllDamageRolls; auto applyChoices = [](Simulation& sim) { sim.viewForSelectedMoves(); }; auto updateProbabilities = forAllDamageRolls ? updateAllDamageRollProbabilities : updatePartialProbabilities; - runRandomEventCount( + runRandomEventCount( simulation, countUniqueDamageRolls, applyChoices, updateProbabilities, forRequiredDamageRolls); - simulation.removeFromEntities(); + simulation.removeFromEntities(); + moveFilter.clearSelectionTags(); } void setIfMoveCrits(Simulation& simulation) { - pokesim::internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) return; - - runReciprocalRandomBinaryChance( - simulation, - [](Simulation& sim) { - sim.addToEntities(); - }); - - simulation.registry.clear(); + runReciprocalRandomBinaryChance(simulation, [](Simulation& sim) { + sim.addToEntities(); + }); } } // namespace pokesim::simulate_turn @@ -4936,6 +4931,7 @@ void setIfMoveCrits(Simulation& simulation, DamageRollKind damageRollKind) { simulation.registry.clear(); simulate_turn::setIfMoveCrits(simulation); + simulation.registry.clear(); } } diff --git a/extras/PokeSim.hpp b/extras/PokeSim.hpp index 7267240f..373f3d18 100644 --- a/extras/PokeSim.hpp +++ b/extras/PokeSim.hpp @@ -245,6 +245,7 @@ * src/SimulateTurn/SimulateTurnDebugChecks.hpp * src/Utilities/RNG.hpp * src/SimulateTurn/CalcDamageSpecifics.hpp + * src/Utilities/EntityFilter.hpp * src/Pokedex/Setup/DexDataSetup.hpp * src/Pokedex/Setup/SpeciesDexDataSetup.hpp * src/Pokedex/Setup/MoveDexDataSetup.hpp @@ -19848,6 +19849,10 @@ struct SelectedForViewPokemon {}; struct SelectedForViewMove {}; } // namespace pokesim::tags +namespace pokesim::internal::tags { +struct CloneFromDamageRolls {}; +} // namespace pokesim::internal::tags + /////////////////// END OF src/Components/Tags/Selection.hpp /////////////////// /////////////// START OF src/Components/Tags/SimulationTags.hpp //////////////// @@ -24810,6 +24815,72 @@ void setIfMoveCrits(Simulation& simulation); /////////////// END OF src/SimulateTurn/CalcDamageSpecifics.hpp //////////////// +/////////////////// START OF src/Utilities/EntityFilter.hpp //////////////////// + +namespace pokesim::internal { +template +struct EntityFilter { + private: + template + struct Filter; + + template + struct Filter, ExcludeContainer, IncludeContainer> { + template + static void view(Simulation* container, const PassedInArgs&... passedInArgs) { + container + ->view, ExcludeContainer, IncludeContainer>( + passedInArgs...); + } + + template + static void group(Simulation* container, const PassedInArgs&... passedInArgs) { + container + ->group, ExcludeContainer, IncludeContainer>( + passedInArgs...); + } + }; + + public: + EntityFilter(Simulation& registryContainer_) : simulation(®istryContainer_) {} + + template < + auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, + typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> + auto view(const PassedInArgs&... passedInArgs) { + Filter::view(this, passedInArgs...); + } + + template < + auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, + typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> + auto group(const PassedInArgs&... passedInArgs) { + Filter::group(this, passedInArgs...); + } + + template + void applySelectionTags(entt::exclude_t exclude = entt::exclude_t{}) { + static_assert( + !(sizeof...(ExcludeComponents) == 0U && std::conjunction_v...>), + "If there are no excludes and all included components are tags, use those tags as the SelectionTags directly."); + auto view = simulation->registry.view(exclude); + simulation->registry.insert(view.begin(), view.end()); + } + + bool hasNoneSelected() { + auto view = simulation->registry.view(); + return view.begin() == view.end(); + } + + void clearSelectionTags() { simulation->registry.clear(); } + + private: + Simulation* simulation = nullptr; +}; +} // namespace pokesim::internal + +//////////////////// END OF src/Utilities/EntityFilter.hpp ///////////////////// + ///////////////// START OF src/Pokedex/Setup/DexDataSetup.hpp ////////////////// namespace pokesim::dex::internal { diff --git a/src/CalcDamage/CalcDamage.cpp b/src/CalcDamage/CalcDamage.cpp index 88913ec0..bd49a148 100644 --- a/src/CalcDamage/CalcDamage.cpp +++ b/src/CalcDamage/CalcDamage.cpp @@ -336,6 +336,7 @@ void setIfMoveCrits(Simulation& simulation, DamageRollKind damageRollKind) { simulation.registry.clear(); simulate_turn::setIfMoveCrits(simulation); + simulation.registry.clear(); } } diff --git a/src/Components/Tags/Selection.hpp b/src/Components/Tags/Selection.hpp index fbae7ff1..e4a646bc 100644 --- a/src/Components/Tags/Selection.hpp +++ b/src/Components/Tags/Selection.hpp @@ -1,11 +1,12 @@ #pragma once -#include -#include - namespace pokesim::tags { struct SelectedForViewBattle {}; struct SelectedForViewSide {}; struct SelectedForViewPokemon {}; struct SelectedForViewMove {}; } // namespace pokesim::tags + +namespace pokesim::internal::tags { +struct CloneFromDamageRolls {}; +} // namespace pokesim::internal::tags diff --git a/src/SimulateTurn/CalcDamageSpecifics.cpp b/src/SimulateTurn/CalcDamageSpecifics.cpp index 8350615c..de70e25e 100644 --- a/src/SimulateTurn/CalcDamageSpecifics.cpp +++ b/src/SimulateTurn/CalcDamageSpecifics.cpp @@ -1,8 +1,5 @@ #include "CalcDamageSpecifics.hpp" -#include -#include -#include #include #include #include @@ -17,7 +14,7 @@ #include #include #include -#include +#include namespace pokesim::simulate_turn { namespace { @@ -82,34 +79,29 @@ void updatePartialProbabilities(Simulation& simulation) { } // namespace void cloneFromDamageRolls(Simulation& simulation, DamageRollKind damageRollKind) { - pokesim::internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) return; + pokesim::internal::EntityFilter moveFilter{simulation}; + moveFilter.applySelectionTags(); + if (moveFilter.hasNoneSelected()) return; bool forAllDamageRolls = damageRollKind & DamageRollKind::ALL_DAMAGE_ROLLS; bool forRequiredDamageRolls = simulation.simulateTurnOptions.getMakeBranchesOnRandomEvents() || forAllDamageRolls; auto applyChoices = [](Simulation& sim) { sim.viewForSelectedMoves(); }; auto updateProbabilities = forAllDamageRolls ? updateAllDamageRollProbabilities : updatePartialProbabilities; - runRandomEventCount( + runRandomEventCount( simulation, countUniqueDamageRolls, applyChoices, updateProbabilities, forRequiredDamageRolls); - simulation.removeFromEntities(); + simulation.removeFromEntities(); + moveFilter.clearSelectionTags(); } void setIfMoveCrits(Simulation& simulation) { - pokesim::internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) return; - - runReciprocalRandomBinaryChance( - simulation, - [](Simulation& sim) { - sim.addToEntities(); - }); - - simulation.registry.clear(); + runReciprocalRandomBinaryChance(simulation, [](Simulation& sim) { + sim.addToEntities(); + }); } } // namespace pokesim::simulate_turn diff --git a/src/Utilities/EntityFilter.hpp b/src/Utilities/EntityFilter.hpp new file mode 100644 index 00000000..89f04436 --- /dev/null +++ b/src/Utilities/EntityFilter.hpp @@ -0,0 +1,66 @@ +#pragma once + +#include +#include + +namespace pokesim::internal { +template +struct EntityFilter { + private: + template + struct Filter; + + template + struct Filter, ExcludeContainer, IncludeContainer> { + template + static void view(Simulation* container, const PassedInArgs&... passedInArgs) { + container + ->view, ExcludeContainer, IncludeContainer>( + passedInArgs...); + } + + template + static void group(Simulation* container, const PassedInArgs&... passedInArgs) { + container + ->group, ExcludeContainer, IncludeContainer>( + passedInArgs...); + } + }; + + public: + EntityFilter(Simulation& registryContainer_) : simulation(®istryContainer_) {} + + template < + auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, + typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> + auto view(const PassedInArgs&... passedInArgs) { + Filter::view(this, passedInArgs...); + } + + template < + auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, + typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> + auto group(const PassedInArgs&... passedInArgs) { + Filter::group(this, passedInArgs...); + } + + template + void applySelectionTags(entt::exclude_t exclude = entt::exclude_t{}) { + static_assert( + !(sizeof...(ExcludeComponents) == 0U && std::conjunction_v...>), + "If there are no excludes and all included components are tags, use those tags as the SelectionTags directly."); + auto view = simulation->registry.view(exclude); + simulation->registry.insert(view.begin(), view.end()); + } + + bool hasNoneSelected() { + auto view = simulation->registry.view(); + return view.begin() == view.end(); + } + + void clearSelectionTags() { simulation->registry.clear(); } + + private: + Simulation* simulation = nullptr; +}; +} // namespace pokesim::internal diff --git a/src/Utilities/headers.hpp b/src/Utilities/headers.hpp index 2feb89e0..9bdb3083 100644 --- a/src/Utilities/headers.hpp +++ b/src/Utilities/headers.hpp @@ -5,6 +5,7 @@ #include "ArgumentChecks.hpp" #include "AssertComponentsEqual.hpp" #include "DebugChecks.hpp" +#include "EntityFilter.hpp" #include "FixedMemoryVector.hpp" #include "MaxSizedVector.hpp" #include "NumberToType.hpp" From 64826e7833df2857bed7e2a6155b4d48aa82e2ed Mon Sep 17 00:00:00 2001 From: aed3 <32887801+aed3@users.noreply.github.com> Date: Tue, 2 Jun 2026 17:19:12 -0500 Subject: [PATCH 2/9] setUnboostedStat to using EntityFilter This had a decent speed improvement for simulate turn, but not the other two. That makes sense as the others are not set up to test for speed with calculating crits. Also, the function wasn't tested, so I've add scenarios to the calculate damage tests. --- extras/PokeSim.cpp | 60 +-- extras/PokeSim.hpp | 24 +- extras/RecentBenchmarkResults.md | 422 +++++++++++----------- src/Battle/Pokemon/ManagePokemonState.cpp | 41 ++- src/Battle/Pokemon/ManagePokemonState.hpp | 10 +- src/CalcDamage/CalcDamage.cpp | 20 +- src/Utilities/EntityFilter.hpp | 14 +- tests/CalcDamageTest.cpp | 99 +++-- tests/Tests.hpp | 10 +- 9 files changed, 383 insertions(+), 317 deletions(-) diff --git a/extras/PokeSim.cpp b/extras/PokeSim.cpp index e8ac3447..ca83877a 100644 --- a/extras/PokeSim.cpp +++ b/extras/PokeSim.cpp @@ -5016,27 +5016,26 @@ void setUnboostedStat(Simulation& simulation) { simulation.viewForSelectedMoves, Tags>(); } - internal::SelectForPokemonView selectedPokemon{simulation}; - if (selectedPokemon.hasNoneSelected()) { + if (simulation.registry.view().empty()) { return; } if constexpr (std::is_same_v) { - simulation.viewForSelectedPokemon(); - runModifyAtk(simulation); + simulation.addToEntities(); + updateAtk(simulation, true); } else if constexpr ( std::is_same_v || std::is_same_v) { - simulation.viewForSelectedPokemon(); - runModifyDef(simulation); + simulation.addToEntities(); + updateDef(simulation, true); } else if constexpr (std::is_same_v) { - simulation.viewForSelectedPokemon(); - runModifySpa(simulation); + simulation.addToEntities(); + updateSpa(simulation, true); } else if constexpr (std::is_same_v) { - simulation.viewForSelectedPokemon(); - runModifySpd(simulation); + simulation.addToEntities(); + updateSpd(simulation, true); } else { static_assert("No other stat is used as the attacking or defending stat."); @@ -5737,68 +5736,77 @@ void tryBoost(Simulation& simulation) { } void updateAllStats(Simulation& simulation) { - updateAtk(simulation); - updateDef(simulation); - updateSpa(simulation); - updateSpd(simulation); - updateSpe(simulation); + updateAtk(simulation, false); + updateDef(simulation, false); + updateSpa(simulation, false); + updateSpd(simulation, false); + updateSpe(simulation, false); } -void updateAtk(Simulation& simulation) { +void updateAtk(Simulation& simulation, bool ignoreBoosts) { internal::SelectForPokemonView selectedAtkUpdateRequired{simulation}; if (selectedAtkUpdateRequired.hasNoneSelected()) return; simulation.viewForSelectedPokemon(); - simulation.viewForSelectedPokemon>(); + if (!ignoreBoosts) { + simulation.viewForSelectedPokemon>(); + } runModifyAtk(simulation); simulation.registry.clear(); } -void updateDef(Simulation& simulation) { +void updateDef(Simulation& simulation, bool ignoreBoosts) { internal::SelectForPokemonView selectedDefUpdateRequired{simulation}; if (selectedDefUpdateRequired.hasNoneSelected()) return; simulation.viewForSelectedPokemon(); - simulation.viewForSelectedPokemon>(); + if (!ignoreBoosts) { + simulation.viewForSelectedPokemon>(); + } runModifyDef(simulation); simulation.registry.clear(); } -void updateSpa(Simulation& simulation) { +void updateSpa(Simulation& simulation, bool ignoreBoosts) { internal::SelectForPokemonView selectedSpaUpdateRequired{simulation}; if (selectedSpaUpdateRequired.hasNoneSelected()) return; simulation.viewForSelectedPokemon(); - - simulation.viewForSelectedPokemon>(); + if (!ignoreBoosts) { + simulation.viewForSelectedPokemon>(); + } runModifySpa(simulation); simulation.registry.clear(); } -void updateSpd(Simulation& simulation) { +void updateSpd(Simulation& simulation, bool ignoreBoosts) { internal::SelectForPokemonView selectedSpdUpdateRequired{simulation}; if (selectedSpdUpdateRequired.hasNoneSelected()) return; simulation.viewForSelectedPokemon(); - simulation.viewForSelectedPokemon>(); + if (!ignoreBoosts) { + simulation.viewForSelectedPokemon>(); + } runModifySpd(simulation); simulation.registry.clear(); } -void updateSpe(Simulation& simulation) { +void updateSpe(Simulation& simulation, bool ignoreBoosts) { internal::SelectForPokemonView selectedSpeUpdateRequired{simulation}; if (selectedSpeUpdateRequired.hasNoneSelected()) return; simulation.viewForSelectedPokemon(); - simulation.viewForSelectedPokemon>(); + if (!ignoreBoosts) { + simulation.viewForSelectedPokemon>(); + } runModifySpe(simulation); // trick room diff --git a/extras/PokeSim.hpp b/extras/PokeSim.hpp index 373f3d18..77ac01d1 100644 --- a/extras/PokeSim.hpp +++ b/extras/PokeSim.hpp @@ -23636,11 +23636,11 @@ void applyStatBoost(types::stat& stat, types::boost boost); void tryBoost(Simulation& simulation); void updateAllStats(Simulation& simulation); -void updateAtk(Simulation& simulation); -void updateDef(Simulation& simulation); -void updateSpa(Simulation& simulation); -void updateSpd(Simulation& simulation); -void updateSpe(Simulation& simulation); +void updateAtk(Simulation& simulation, bool ignoreBoosts); +void updateDef(Simulation& simulation, bool ignoreBoosts); +void updateSpa(Simulation& simulation, bool ignoreBoosts); +void updateSpd(Simulation& simulation, bool ignoreBoosts); +void updateSpe(Simulation& simulation, bool ignoreBoosts); } // namespace pokesim /////////////// END OF src/Battle/Pokemon/ManagePokemonState.hpp /////////////// @@ -24827,35 +24827,35 @@ struct EntityFilter { template struct Filter, ExcludeContainer, IncludeContainer> { template - static void view(Simulation* container, const PassedInArgs&... passedInArgs) { - container + static void view(Simulation* simulation, const PassedInArgs&... passedInArgs) { + simulation ->view, ExcludeContainer, IncludeContainer>( passedInArgs...); } template - static void group(Simulation* container, const PassedInArgs&... passedInArgs) { - container + static void group(Simulation* simulation, const PassedInArgs&... passedInArgs) { + simulation ->group, ExcludeContainer, IncludeContainer>( passedInArgs...); } }; public: - EntityFilter(Simulation& registryContainer_) : simulation(®istryContainer_) {} + EntityFilter(Simulation& simulation_) : simulation(&simulation_) {} template < auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> auto view(const PassedInArgs&... passedInArgs) { - Filter::view(this, passedInArgs...); + Filter::view(simulation, passedInArgs...); } template < auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> auto group(const PassedInArgs&... passedInArgs) { - Filter::group(this, passedInArgs...); + Filter::group(simulation, passedInArgs...); } template diff --git a/extras/RecentBenchmarkResults.md b/extras/RecentBenchmarkResults.md index cc3315b9..2db29017 100644 --- a/extras/RecentBenchmarkResults.md +++ b/extras/RecentBenchmarkResults.md @@ -7,286 +7,286 @@ ## SV-SingleBattle-MonteCarlo-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 44.159300ms | 80.600140us | 10.684301us | 80.600140us | 79.031460us | 83.585840us | -| 2 | 100 | 1 | 45.586300ms | 93.450710us | 24.697756us | 46.725355us | 45.029685us | 50.614455us | -| 4 | 100 | 1 | 48.509200ms | 107.834870us | 17.156260us | 26.958717us | 26.326602us | 28.158610us | -| 8 | 100 | 1 | 51.811500ms | 131.404320us | 14.351892us | 16.425540us | 16.161313us | 16.928846us | -| 16 | 100 | 1 | 57.059900ms | 173.630810us | 14.640605us | 10.851926us | 10.718998us | 11.113308us | -| 32 | 100 | 1 | 66.234800ms | 243.442500us | 14.971327us | 7.607578us | 7.540566us | 7.743035us | -| 64 | 100 | 1 | 80.830900ms | 390.677600us | 11.606306us | 6.104337us | 6.074578us | 6.148195us | -| 128 | 100 | 1 | 81.206700ms | 652.101280us | 11.488310us | 5.094541us | 5.083141us | 5.126186us | -| 256 | 100 | 1 | 137.446300ms | 1.232455ms | 15.764140us | 4.814276us | 4.804512us | 4.829797us | -| 512 | 100 | 1 | 260.105600ms | 2.498638ms | 37.449864us | 4.880152us | 4.867261us | 4.896160us | -| 1024 | 100 | 1 | 592.781600ms | 5.774650ms | 128.533829us | 5.639307us | 5.615753us | 5.665155us | -| 2048 | 100 | 1 | 1482.497100ms | 14.826539ms | 397.708795us | 7.239521us | 7.203694us | 7.280765us | -| 4096 | 100 | 1 | 4253.900100ms | 42.523669ms | 692.866636us | 10.381755us | 10.350908us | 10.417247us | -| 8192 | 100 | 1 | 15309.124900ms | 152.293990ms | 4.100020ms | 18.590575us | 18.482211us | 18.680722us | -| 16384 | 100 | 1 | 55189.572100ms | 549.043187ms | 10.911039ms | 33.510937us | 33.369244us | 33.632609us | -| 32768 | 100 | 1 | 209324.731900ms | 2059.850197ms | 56.494758ms | 62.861639us | 62.469338us | 63.156512us | -| 65536 | 100 | 1 | 779451.892100ms | 8044.359627ms | 160.517558ms | 122.747187us | 122.124865us | 123.135658us | +| 1 | 100 | 1 | 44.457600ms | 82.251990us | 15.747639us | 82.251990us | 80.430000us | 88.888620us | +| 2 | 100 | 1 | 46.224100ms | 93.532040us | 17.780606us | 46.766020us | 45.560990us | 49.587480us | +| 4 | 100 | 1 | 48.684900ms | 106.298830us | 19.727991us | 26.574707us | 25.933688us | 28.245010us | +| 8 | 100 | 1 | 51.713500ms | 129.058690us | 17.429537us | 16.132336us | 15.829986us | 16.802714us | +| 16 | 100 | 1 | 58.140300ms | 176.397140us | 25.687928us | 11.024821us | 10.800103us | 11.514053us | +| 32 | 100 | 1 | 66.892300ms | 244.606220us | 18.783884us | 7.643944us | 7.562686us | 7.819973us | +| 64 | 100 | 1 | 81.385000ms | 378.625440us | 16.216315us | 5.916023us | 5.880706us | 5.992931us | +| 128 | 100 | 1 | 108.187600ms | 641.047530us | 17.185685us | 5.008184us | 4.990561us | 5.051843us | +| 256 | 100 | 1 | 129.583000ms | 1.181483ms | 16.084935us | 4.615167us | 4.604965us | 4.630503us | +| 512 | 100 | 1 | 239.624700ms | 2.281184ms | 20.665623us | 4.455438us | 4.448814us | 4.465180us | +| 1024 | 100 | 1 | 516.029300ms | 4.970157ms | 53.047916us | 4.853669us | 4.843683us | 4.864059us | +| 2048 | 100 | 1 | 1213.224200ms | 11.891180ms | 195.790072us | 5.806240us | 5.789556us | 5.827467us | +| 4096 | 100 | 1 | 3186.832300ms | 31.699116ms | 344.398042us | 7.739042us | 7.724159us | 7.757425us | +| 8192 | 100 | 1 | 9632.971000ms | 95.723065ms | 607.243932us | 11.684944us | 11.671448us | 11.700713us | +| 16384 | 100 | 1 | 32060.562100ms | 320.874213ms | 1.050601ms | 19.584608us | 19.573028us | 19.598293us | +| 32768 | 100 | 1 | 116193.693100ms | 1153.878722ms | 3.372980ms | 35.213584us | 35.197203us | 35.239203us | +| 65536 | 100 | 1 | 434553.277600ms | 4348.993493ms | 13.759278ms | 66.360374us | 66.326544us | 66.411563us | ## SV-SingleBattle-Branching-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 63.906000ms | 230.666510us | 11.794619us | 230.666510us | 229.165030us | 234.879310us | -| 2 | 100 | 1 | 41.620700ms | 310.707600us | 12.103863us | 155.353800us | 154.605690us | 157.630185us | -| 4 | 100 | 1 | 55.206100ms | 468.816100us | 12.868521us | 117.204025us | 116.706913us | 118.043375us | -| 8 | 100 | 1 | 83.873000ms | 727.924290us | 10.768952us | 90.990536us | 90.808982us | 91.424048us | -| 16 | 100 | 1 | 139.356800ms | 1.253190ms | 24.734092us | 78.324361us | 78.102555us | 78.768078us | -| 32 | 100 | 1 | 247.923300ms | 2.270335ms | 33.858994us | 70.947972us | 70.756280us | 71.172515us | -| 64 | 100 | 1 | 463.719100ms | 4.282177ms | 57.815520us | 66.909017us | 66.747450us | 67.104927us | -| 128 | 100 | 1 | 892.971000ms | 8.314907ms | 89.407211us | 64.960215us | 64.836344us | 65.110081us | -| 256 | 100 | 1 | 1761.395600ms | 16.749997ms | 189.385297us | 65.429675us | 65.297498us | 65.588621us | -| 512 | 100 | 1 | 3489.890900ms | 34.342734ms | 383.319688us | 67.075652us | 66.936020us | 67.230902us | -| 1024 | 100 | 1 | 7914.606100ms | 77.980365ms | 1.108212ms | 76.152700us | 75.954778us | 76.383248us | -| 2048 | 100 | 1 | 20117.202700ms | 201.626442ms | 3.778727ms | 98.450411us | 98.105876us | 98.830696us | -| 4096 | 100 | 1 | 60400.428100ms | 609.360636ms | 13.300748ms | 148.769686us | 148.126273us | 149.405330us | -| 8192 | 100 | 1 | 200557.296000ms | 1993.421535ms | 46.247720ms | 243.337590us | 242.201733us | 244.417870us | +| 1 | 100 | 1 | 46.952800ms | 235.304910us | 22.205126us | 235.304910us | 232.371990us | 242.637170us | +| 2 | 100 | 1 | 40.509600ms | 317.012350us | 21.620820us | 158.506175us | 157.142665us | 162.404535us | +| 4 | 100 | 1 | 56.877000ms | 467.559580us | 20.597410us | 116.889895us | 116.207428us | 118.581920us | +| 8 | 100 | 1 | 89.024400ms | 754.495270us | 21.579249us | 94.311909us | 93.963566us | 95.238776us | +| 16 | 100 | 1 | 146.377200ms | 1.279212ms | 26.524787us | 79.950731us | 79.732906us | 80.506188us | +| 32 | 100 | 1 | 260.332200ms | 2.343487ms | 30.765774us | 73.233961us | 73.073776us | 73.459703us | +| 64 | 100 | 1 | 479.159100ms | 4.398020ms | 42.916879us | 68.719060us | 68.598713us | 68.862738us | +| 128 | 100 | 1 | 905.108200ms | 8.505733ms | 68.601916us | 66.451036us | 66.355465us | 66.566780us | +| 256 | 100 | 1 | 1787.020200ms | 17.173157ms | 599.110117us | 67.082644us | 66.737720us | 67.730331us | +| 512 | 100 | 1 | 3525.618700ms | 34.531420ms | 986.570454us | 67.444179us | 67.176941us | 68.039626us | +| 1024 | 100 | 1 | 7825.770800ms | 76.757648ms | 2.210817ms | 74.958641us | 74.643887us | 75.572091us | +| 2048 | 100 | 1 | 19265.290900ms | 189.801721ms | 4.479901ms | 92.676622us | 92.312612us | 93.193023us | +| 4096 | 100 | 1 | 53461.029700ms | 536.775669ms | 14.004836ms | 131.048747us | 130.422248us | 131.765757us | +| 8192 | 100 | 1 | 157235.653000ms | 1602.240450ms | 10.903696ms | 195.585992us | 195.340336us | 195.864070us | ## SV-DoubleBattle-MonteCarlo-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 57.124300ms | 121.271020us | 17.380266us | 121.271020us | 118.956500us | 127.021260us | -| 2 | 100 | 1 | 58.721900ms | 143.260570us | 19.295710us | 71.630285us | 70.311800us | 74.662130us | -| 4 | 100 | 1 | 61.981100ms | 169.881470us | 17.995256us | 42.470368us | 41.871832us | 43.973997us | -| 8 | 100 | 1 | 67.485300ms | 217.720110us | 22.230134us | 27.215014us | 26.816649us | 28.019099us | -| 16 | 100 | 1 | 44.942100ms | 296.246370us | 17.447534us | 18.515398us | 18.373011us | 18.889347us | -| 32 | 100 | 1 | 59.721600ms | 429.490630us | 11.727622us | 13.421582us | 13.370172us | 13.529308us | -| 64 | 100 | 1 | 87.589800ms | 672.213670us | 12.726807us | 10.503339us | 10.476837us | 10.568265us | -| 128 | 100 | 1 | 127.537200ms | 1.161001ms | 14.643718us | 9.070317us | 9.052986us | 9.100872us | -| 256 | 100 | 1 | 229.431900ms | 2.155918ms | 27.638082us | 8.421553us | 8.403378us | 8.446666us | -| 512 | 100 | 1 | 449.733900ms | 4.304782ms | 56.231430us | 8.407777us | 8.390082us | 8.434659us | -| 1024 | 100 | 1 | 957.718100ms | 9.169605ms | 124.301938us | 8.954692us | 8.932312us | 8.979940us | -| 2048 | 100 | 1 | 2267.598900ms | 21.777567ms | 431.527787us | 10.633577us | 10.593698us | 10.676943us | -| 4096 | 100 | 1 | 5939.797500ms | 58.067230ms | 1.414114ms | 14.176570us | 14.110200us | 14.245706us | +| 1 | 100 | 1 | 58.962200ms | 128.982930us | 18.813965us | 128.982930us | 126.411680us | 134.907280us | +| 2 | 100 | 1 | 61.289900ms | 152.534310us | 23.855316us | 76.267155us | 74.637655us | 80.031175us | +| 4 | 100 | 1 | 64.673500ms | 177.476510us | 25.640290us | 44.369128us | 43.473325us | 46.309160us | +| 8 | 100 | 1 | 70.440800ms | 225.917270us | 23.739148us | 28.239659us | 27.823001us | 29.127900us | +| 16 | 100 | 1 | 46.795800ms | 304.296540us | 29.141063us | 19.018534us | 18.810410us | 19.797833us | +| 32 | 100 | 1 | 61.499500ms | 433.883700us | 17.561624us | 13.558866us | 13.490362us | 13.761538us | +| 64 | 100 | 1 | 79.515600ms | 674.355520us | 15.260973us | 10.536805us | 10.508508us | 10.631618us | +| 128 | 100 | 1 | 127.892900ms | 1.163011ms | 19.259172us | 9.086027us | 9.063606us | 9.127034us | +| 256 | 100 | 1 | 227.804300ms | 2.132265ms | 32.200667us | 8.329162us | 8.307027us | 8.357144us | +| 512 | 100 | 1 | 446.905900ms | 4.184353ms | 67.298055us | 8.172564us | 8.149290us | 8.201355us | +| 1024 | 100 | 1 | 881.333300ms | 8.972288ms | 340.030343us | 8.762000us | 8.706099us | 8.839147us | +| 2048 | 100 | 1 | 2056.524400ms | 19.936351ms | 1.108714ms | 9.734546us | 9.639750us | 9.854292us | +| 4096 | 100 | 1 | 4748.256500ms | 46.745921ms | 1.006507ms | 11.412578us | 11.373035us | 11.473021us | ## SV-DoubleBattle-Branching-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 72.628500ms | 526.785670us | 14.926157us | 526.785670us | 524.914080us | 532.220120us | -| 2 | 100 | 1 | 90.442400ms | 782.887180us | 13.638621us | 391.443590us | 390.507085us | 393.541070us | -| 4 | 100 | 1 | 141.188300ms | 1.253413ms | 13.552514us | 313.353200us | 312.823218us | 314.233333us | -| 8 | 100 | 1 | 238.959000ms | 2.176636ms | 32.573711us | 272.079526us | 271.406250us | 273.048455us | -| 16 | 100 | 1 | 421.161400ms | 3.881687ms | 34.896655us | 242.605467us | 242.205616us | 243.068250us | -| 32 | 100 | 1 | 798.252700ms | 7.375732ms | 94.594706us | 230.491630us | 229.952454us | 231.117446us | -| 64 | 100 | 1 | 1515.810000ms | 14.479536ms | 166.512718us | 226.242753us | 225.785570us | 226.813491us | -| 128 | 100 | 1 | 3102.217200ms | 29.942898ms | 428.335411us | 233.928891us | 233.348150us | 234.668954us | -| 256 | 100 | 1 | 6660.912200ms | 66.802683ms | 1.036226ms | 260.947980us | 260.211671us | 261.804191us | -| 512 | 100 | 1 | 16423.007500ms | 160.754512ms | 3.393378ms | 313.973656us | 312.666810us | 315.273651us | -| 1024 | 100 | 1 | 44383.479000ms | 443.869309ms | 9.722236ms | 433.466122us | 431.575613us | 435.294232us | -| 2048 | 100 | 1 | 136541.548900ms | 1357.189935ms | 44.096279ms | 662.690398us | 658.385504us | 666.772893us | -| 4096 | 100 | 1 | 452116.171300ms | 4610.059697ms | 151.429759ms | 1.125503ms | 1.118127ms | 1.132599ms | +| 1 | 100 | 1 | 74.436200ms | 547.540710us | 21.418222us | 547.540710us | 544.860900us | 555.261320us | +| 2 | 100 | 1 | 92.431700ms | 804.204000us | 23.488244us | 402.102000us | 400.617495us | 406.274035us | +| 4 | 100 | 1 | 147.114900ms | 1.292180ms | 20.750304us | 323.045125us | 322.293543us | 324.523235us | +| 8 | 100 | 1 | 251.301500ms | 2.219364ms | 47.021370us | 277.420441us | 276.568575us | 279.076850us | +| 16 | 100 | 1 | 441.968600ms | 3.984548ms | 48.231591us | 249.034244us | 248.508688us | 249.708379us | +| 32 | 100 | 1 | 835.823400ms | 7.580920ms | 111.889620us | 236.903751us | 236.289645us | 237.673528us | +| 64 | 100 | 1 | 1584.264600ms | 14.954572ms | 420.149010us | 233.665182us | 232.550777us | 235.193086us | +| 128 | 100 | 1 | 3132.409300ms | 32.273753ms | 2.000884ms | 252.138699us | 249.430234us | 255.654815us | +| 256 | 100 | 1 | 6772.926000ms | 67.952725ms | 2.686514ms | 265.440332us | 263.543884us | 267.666623us | +| 512 | 100 | 1 | 15054.575000ms | 149.275330ms | 4.184362ms | 291.553379us | 290.151406us | 293.411080us | +| 1024 | 100 | 1 | 36114.722500ms | 364.654219ms | 5.886747ms | 356.107636us | 355.101059us | 357.380729us | +| 2048 | 100 | 1 | 97341.524900ms | 974.827993ms | 10.401103ms | 475.990231us | 475.063432us | 477.058001us | +| 4096 | 100 | 1 | 298084.507700ms | 2955.044937ms | 14.945097ms | 721.446518us | 720.792684us | 722.242749us | ## SV-SingleBattle-CalcDamage-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 8.171500ms | 12.185760us | 4.664592us | 12.185760us | 11.556070us | 13.647530us | -| 2 | 100 | 1 | 8.101600ms | 13.874650us | 4.464294us | 6.937325us | 6.632270us | 7.654705us | -| 4 | 100 | 1 | 8.322700ms | 14.232210us | 4.549089us | 3.558052us | 3.402165us | 3.915707us | -| 8 | 100 | 1 | 8.727700ms | 15.452620us | 3.367733us | 1.931578us | 1.879295us | 2.096155us | -| 16 | 100 | 1 | 9.120600ms | 20.020820us | 3.867226us | 1.251301us | 1.218841us | 1.332433us | -| 32 | 100 | 1 | 9.838000ms | 26.533890us | 3.290730us | 829.184062ns | 816.025938ns | 866.045000ns | -| 64 | 100 | 1 | 11.360800ms | 40.405300us | 10.062522us | 631.332813ns | 612.032656ns | 692.257031ns | -| 128 | 100 | 1 | 14.191300ms | 65.185590us | 4.793460us | 509.262422ns | 504.013516ns | 520.417266ns | -| 256 | 100 | 1 | 20.021300ms | 115.041910us | 4.814528us | 449.382461ns | 446.467812ns | 454.300313ns | -| 512 | 100 | 1 | 37.134800ms | 214.125370us | 4.611208us | 418.213613ns | 416.762754ns | 420.457734ns | -| 1024 | 100 | 1 | 65.411900ms | 407.856070us | 5.943468us | 398.296943ns | 397.404502ns | 399.814746ns | -| 2048 | 100 | 1 | 123.941600ms | 802.082340us | 12.921079us | 391.641768ns | 390.658716ns | 393.296689ns | -| 4096 | 100 | 1 | 237.681200ms | 1.588086ms | 22.723295us | 387.716206ns | 386.752214ns | 388.957664ns | -| 8192 | 100 | 1 | 471.637000ms | 3.285880ms | 48.884377us | 401.108433ns | 400.074252ns | 402.461996ns | -| 16384 | 100 | 1 | 937.698100ms | 6.689690ms | 69.886446us | 408.306268ns | 407.551823ns | 409.232678ns | -| 32768 | 100 | 1 | 1869.394900ms | 13.677662ms | 181.642466us | 417.409124ns | 416.420208ns | 418.611198ns | -| 65536 | 100 | 1 | 3779.991800ms | 28.300153ms | 245.361268us | 431.826064ns | 431.165085ns | 432.635974ns | +| 1 | 100 | 1 | 8.097800ms | 12.535630us | 4.630367us | 12.535630us | 11.910930us | 13.989690us | +| 2 | 100 | 1 | 8.290900ms | 14.054670us | 5.707550us | 7.027335us | 6.645450us | 7.908145us | +| 4 | 100 | 1 | 8.440800ms | 14.394400us | 4.628322us | 3.598600us | 3.437275us | 3.946117us | +| 8 | 100 | 1 | 8.852200ms | 16.573110us | 7.138636us | 2.071639us | 1.954315us | 2.379954us | +| 16 | 100 | 1 | 9.277500ms | 20.092530us | 5.449486us | 1.255783us | 1.210978us | 1.381037us | +| 32 | 100 | 1 | 10.137000ms | 27.348620us | 3.764064us | 854.644375ns | 838.421250ns | 891.509688ns | +| 64 | 100 | 1 | 11.627100ms | 40.540720us | 4.501925us | 633.448750ns | 623.608281ns | 654.533750ns | +| 128 | 100 | 1 | 14.928000ms | 68.930320us | 8.278577us | 538.518125ns | 528.476250ns | 555.166484ns | +| 256 | 100 | 1 | 20.480100ms | 115.237500us | 3.326980us | 450.146484ns | 448.228281ns | 453.799180ns | +| 512 | 100 | 1 | 37.935600ms | 217.981100us | 4.303264us | 425.744336ns | 424.463105ns | 427.979551ns | +| 1024 | 100 | 1 | 67.105100ms | 419.704440us | 6.242889us | 409.867617ns | 408.875801ns | 411.362617ns | +| 2048 | 100 | 1 | 126.345200ms | 829.973170us | 14.515039us | 405.260337ns | 404.033086ns | 406.837510ns | +| 4096 | 100 | 1 | 244.113000ms | 1.664947ms | 44.927790us | 406.481106ns | 404.637473ns | 409.048181ns | +| 8192 | 100 | 1 | 489.293800ms | 3.455005ms | 47.715887us | 421.753510ns | 420.689055ns | 422.989138ns | +| 16384 | 100 | 1 | 971.299600ms | 6.948011ms | 122.174463us | 424.072941ns | 422.743473ns | 425.701870ns | +| 32768 | 100 | 1 | 1930.765500ms | 14.181650ms | 207.675188us | 432.789622ns | 431.631286ns | 434.115164ns | +| 65536 | 100 | 1 | 3843.360000ms | 29.342387ms | 528.442115us | 447.729300ns | 446.524739ns | 449.928358ns | ## SV-SingleBattle-AnalyzeEffect-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 28.061100ms | 60.185880us | 12.342484us | 60.185880us | 58.516460us | 64.341600us | -| 2 | 100 | 1 | 29.451700ms | 72.548790us | 11.152138us | 36.274395us | 35.605450us | 38.521820us | -| 4 | 100 | 1 | 16.827300ms | 97.392810us | 10.627352us | 24.348202us | 24.036580us | 25.453925us | -| 8 | 100 | 1 | 18.715700ms | 132.414760us | 10.472112us | 16.551845us | 16.398824us | 17.097264us | -| 16 | 100 | 1 | 26.405800ms | 204.107930us | 9.572984us | 12.756746us | 12.679703us | 12.962532us | -| 32 | 100 | 1 | 41.755000ms | 337.257220us | 7.533201us | 10.539288us | 10.506163us | 10.609633us | -| 64 | 100 | 1 | 73.067200ms | 602.509010us | 9.215405us | 9.414203us | 9.390775us | 9.449238us | -| 128 | 100 | 1 | 134.864500ms | 1.127214ms | 16.757135us | 8.806362us | 8.785029us | 8.838245us | -| 256 | 100 | 1 | 243.950000ms | 2.101577ms | 28.288963us | 8.209285us | 8.188709us | 8.232149us | -| 512 | 100 | 1 | 470.095400ms | 4.087662ms | 44.907696us | 7.983714us | 7.968309us | 8.003291us | -| 1024 | 100 | 1 | 903.023500ms | 8.101871ms | 107.030190us | 7.911983us | 7.893976us | 7.935669us | -| 2048 | 100 | 1 | 1797.548100ms | 16.090363ms | 169.356888us | 7.856623us | 7.841833us | 7.874416us | -| 4096 | 100 | 1 | 3675.571200ms | 32.410274ms | 406.745409us | 7.912664us | 7.895053us | 7.934453us | -| 8192 | 100 | 1 | 8275.707100ms | 75.684189ms | 1.553756ms | 9.238793us | 9.207035us | 9.283297us | +| 1 | 100 | 1 | 28.729700ms | 64.254710us | 26.231178us | 64.254710us | 60.815640us | 73.084550us | +| 2 | 100 | 1 | 31.214500ms | 73.620010us | 10.946027us | 36.810005us | 36.144510us | 38.950965us | +| 4 | 100 | 1 | 17.628600ms | 97.167530us | 12.984358us | 24.291882us | 23.861925us | 25.357475us | +| 8 | 100 | 1 | 19.606000ms | 134.511610us | 13.755768us | 16.813951us | 16.618505us | 17.543525us | +| 16 | 100 | 1 | 28.303800ms | 208.570780us | 10.953827us | 13.035674us | 12.952219us | 13.295257us | +| 32 | 100 | 1 | 44.931700ms | 353.779930us | 12.973189us | 11.055623us | 11.005775us | 11.205428us | +| 64 | 100 | 1 | 74.680100ms | 618.602170us | 16.543716us | 9.665659us | 9.626067us | 9.733408us | +| 128 | 100 | 1 | 139.707300ms | 1.152202ms | 18.576272us | 9.001575us | 8.979061us | 9.039023us | +| 256 | 100 | 1 | 252.098800ms | 2.155101ms | 20.720062us | 8.418363us | 8.404075us | 8.436239us | +| 512 | 100 | 1 | 480.867800ms | 4.217645ms | 32.226962us | 8.237587us | 8.226136us | 8.250908us | +| 1024 | 100 | 1 | 940.283000ms | 8.382898ms | 161.794182us | 8.186424us | 8.161473us | 8.225700us | +| 2048 | 100 | 1 | 1969.619400ms | 16.790353ms | 317.456885us | 8.198415us | 8.173875us | 8.237502us | +| 4096 | 100 | 1 | 3796.726900ms | 35.441543ms | 2.511070ms | 8.652721us | 8.560375us | 8.815545us | +| 8192 | 100 | 1 | 9488.057400ms | 88.239158ms | 5.583961ms | 10.771382us | 10.650782us | 10.919371us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 33.188200ms | 85.123010us | 18.712165us | 85.123010us | 81.985060us | 89.444570us | -| 2 | 100 | 1 | 34.232600ms | 94.069440us | 20.673891us | 47.034720us | 45.242665us | 49.342230us | -| 4 | 100 | 1 | 35.896000ms | 107.386860us | 22.679940us | 26.846715us | 25.890705us | 28.172487us | -| 8 | 100 | 1 | 39.617900ms | 127.475140us | 25.527736us | 15.934392us | 15.372860us | 16.633737us | -| 16 | 100 | 1 | 46.247000ms | 171.373600us | 33.401579us | 10.710850us | 10.329899us | 11.157187us | -| 32 | 100 | 1 | 55.920000ms | 239.186940us | 44.412022us | 7.474592us | 7.222417us | 7.769731us | -| 64 | 100 | 1 | 53.917000ms | 374.085620us | 77.167251us | 5.845088us | 5.629496us | 6.105192us | -| 128 | 100 | 1 | 107.641600ms | 654.903640us | 151.095723us | 5.116435us | 4.907649us | 5.372729us | -| 256 | 100 | 1 | 268.785300ms | 1.206087ms | 309.829812us | 4.711279us | 4.502672us | 4.983029us | -| 512 | 100 | 1 | 338.452000ms | 2.416206ms | 744.179317us | 4.719152us | 4.468171us | 5.044560us | -| 1024 | 100 | 1 | 663.913700ms | 5.758951ms | 1.955589ms | 5.623976us | 5.296538us | 6.056937us | -| 2048 | 100 | 1 | 2729.702200ms | 14.161424ms | 5.825275ms | 6.914758us | 6.424338us | 7.564891us | -| 4096 | 100 | 1 | 3176.307200ms | 37.403266ms | 18.536068ms | 9.131657us | 8.351837us | 10.150621us | -| 8192 | 100 | 1 | 9960.079200ms | 119.422677ms | 76.649005ms | 14.577963us | 12.975770us | 16.695299us | +| 1 | 100 | 1 | 34.402500ms | 88.859820us | 26.259969us | 88.859820us | 84.837340us | 95.862800us | +| 2 | 100 | 1 | 36.521400ms | 97.273210us | 26.073481us | 48.636605us | 46.612430us | 51.983225us | +| 4 | 100 | 1 | 37.846900ms | 109.384270us | 23.838461us | 27.346068us | 26.364125us | 28.751822us | +| 8 | 100 | 1 | 41.497400ms | 129.560640us | 26.218105us | 16.195080us | 15.624389us | 16.919383us | +| 16 | 100 | 1 | 48.749400ms | 173.126860us | 33.582567us | 10.820429us | 10.446288us | 11.273799us | +| 32 | 100 | 1 | 57.384300ms | 240.839560us | 45.392678us | 7.526236us | 7.268640us | 7.827727us | +| 64 | 100 | 1 | 54.869900ms | 378.036950us | 75.666421us | 5.906827us | 5.692655us | 6.160546us | +| 128 | 100 | 1 | 105.623700ms | 652.737300us | 139.372802us | 5.099510us | 4.906333us | 5.335088us | +| 256 | 100 | 1 | 262.678500ms | 1.206089ms | 278.135407us | 4.711286us | 4.521573us | 4.949696us | +| 512 | 100 | 1 | 331.707400ms | 2.426667ms | 615.061018us | 4.739584us | 4.530344us | 5.006403us | +| 1024 | 100 | 1 | 645.575700ms | 5.660656ms | 1.542319ms | 5.527985us | 5.265730us | 5.862414us | +| 2048 | 100 | 1 | 2189.925700ms | 13.029472ms | 4.078311ms | 6.362047us | 6.018094us | 6.810331us | +| 4096 | 100 | 1 | 2746.714800ms | 32.371751ms | 12.182736ms | 7.903260us | 7.385740us | 8.567566us | +| 8192 | 100 | 1 | 7405.731200ms | 88.163622ms | 40.631544ms | 10.762161us | 9.909223us | 11.888507us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 33.085100ms | 87.963980us | 18.537446us | 87.963980us | 84.748580us | 92.088660us | -| 2 | 100 | 1 | 38.641500ms | 95.647650us | 23.906903us | 47.823825us | 45.878840us | 50.757790us | -| 4 | 100 | 1 | 40.233200ms | 107.402140us | 22.096871us | 26.850535us | 25.887713us | 28.075155us | -| 8 | 100 | 1 | 43.339000ms | 125.820720us | 24.633706us | 15.727590us | 15.177531us | 16.393408us | -| 16 | 100 | 1 | 50.044000ms | 164.760150us | 29.771415us | 10.297509us | 9.955033us | 10.685868us | -| 32 | 100 | 1 | 58.572300ms | 233.841200us | 45.014948us | 7.307538us | 7.053797us | 7.610035us | -| 64 | 100 | 1 | 50.555600ms | 356.087340us | 76.196533us | 5.563865us | 5.352337us | 5.822784us | -| 128 | 100 | 1 | 90.204700ms | 586.007640us | 143.978249us | 4.578185us | 4.382177us | 4.826925us | -| 256 | 100 | 1 | 163.452300ms | 1.080185ms | 303.001477us | 4.219471us | 4.015233us | 4.483735us | -| 512 | 100 | 1 | 210.477400ms | 2.190487ms | 736.391147us | 4.278295us | 4.029337us | 4.603700us | -| 1024 | 100 | 1 | 439.489500ms | 4.732864ms | 1.914342ms | 4.621937us | 4.302314us | 5.045020us | -| 2048 | 100 | 1 | 2344.529400ms | 11.524619ms | 5.777880ms | 5.627255us | 5.148593us | 6.269513us | -| 4096 | 100 | 1 | 2560.654300ms | 30.992854ms | 18.315189ms | 7.566615us | 6.798617us | 8.572416us | -| 8192 | 100 | 1 | 8313.251000ms | 101.990547ms | 74.932897ms | 12.450018us | 10.878347us | 14.499153us | +| 1 | 100 | 1 | 35.064600ms | 88.230030us | 22.546068us | 88.230030us | 84.748510us | 93.980600us | +| 2 | 100 | 1 | 41.589500ms | 97.748980us | 22.774753us | 48.874490us | 46.987840us | 51.596940us | +| 4 | 100 | 1 | 41.839500ms | 108.060960us | 23.460596us | 27.015240us | 26.005435us | 28.348985us | +| 8 | 100 | 1 | 45.416000ms | 128.641090us | 26.299062us | 16.080136us | 15.501239us | 16.796636us | +| 16 | 100 | 1 | 50.933600ms | 167.444650us | 29.710057us | 10.465291us | 10.126631us | 10.854783us | +| 32 | 100 | 1 | 60.159700ms | 233.195150us | 44.210421us | 7.287348us | 7.037847us | 7.583797us | +| 64 | 100 | 1 | 51.061800ms | 356.522940us | 72.123889us | 5.570671us | 5.366192us | 5.812227us | +| 128 | 100 | 1 | 89.312200ms | 580.797380us | 131.293551us | 4.537480us | 4.354895us | 4.760476us | +| 256 | 100 | 1 | 154.128900ms | 1.055298ms | 262.836810us | 4.122259us | 3.941133us | 4.348115us | +| 512 | 100 | 1 | 200.881000ms | 2.067844ms | 576.071399us | 4.038758us | 3.842598us | 4.285915us | +| 1024 | 100 | 1 | 411.676300ms | 4.309335ms | 1.386320ms | 4.208335us | 3.976835us | 4.513659us | +| 2048 | 100 | 1 | 1784.312800ms | 9.926678ms | 3.805809ms | 4.847011us | 4.528070us | 5.270714us | +| 4096 | 100 | 1 | 4828.732100ms | 24.779982ms | 11.898805ms | 6.049800us | 5.556814us | 6.707496us | +| 8192 | 100 | 1 | 5372.909000ms | 68.179287ms | 39.023253ms | 8.322667us | 7.503177us | 9.400413us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 35.654700ms | 87.223070us | 24.454599us | 87.223070us | 83.402200us | 93.431780us | -| 2 | 100 | 1 | 52.886400ms | 112.037860us | 26.869550us | 56.018930us | 53.940330us | 59.496340us | -| 4 | 100 | 1 | 54.138200ms | 146.361950us | 26.006770us | 36.590488us | 35.579192us | 38.278498us | -| 8 | 100 | 1 | 70.569100ms | 195.996200us | 27.557118us | 24.499525us | 23.995902us | 25.460600us | -| 16 | 100 | 1 | 83.449700ms | 264.626080us | 27.886136us | 16.539130us | 16.281619us | 17.015632us | -| 32 | 100 | 1 | 54.978400ms | 376.505600us | 28.736422us | 11.765800us | 11.633740us | 12.020367us | -| 64 | 100 | 1 | 81.473200ms | 590.567710us | 27.552985us | 9.227620us | 9.158724us | 9.335392us | -| 128 | 100 | 1 | 137.951300ms | 973.915290us | 29.664272us | 7.608713us | 7.571823us | 7.666565us | -| 256 | 100 | 1 | 236.633000ms | 1.769238ms | 39.705402us | 6.911086us | 6.884464us | 6.946459us | -| 512 | 100 | 1 | 470.894900ms | 3.586476ms | 89.355774us | 7.004836us | 6.974048us | 7.043012us | -| 1024 | 100 | 1 | 980.644400ms | 9.019708ms | 217.776144us | 8.808308us | 8.768729us | 8.852249us | -| 2048 | 100 | 1 | 2252.439500ms | 21.553633ms | 336.342723us | 10.524235us | 10.494450us | 10.559130us | -| 4096 | 100 | 1 | 5740.125300ms | 56.454492ms | 884.065906us | 13.782835us | 13.743062us | 13.828210us | -| 8192 | 100 | 1 | 16652.251700ms | 165.212523ms | 1.691477ms | 20.167544us | 20.127728us | 20.208632us | +| 1 | 100 | 1 | 36.977100ms | 87.196100us | 21.508210us | 87.196100us | 83.764590us | 92.633150us | +| 2 | 100 | 1 | 55.528000ms | 113.937330us | 27.260101us | 56.968665us | 54.866995us | 60.543760us | +| 4 | 100 | 1 | 55.988100ms | 147.778260us | 27.636221us | 36.944565us | 35.906053us | 38.842253us | +| 8 | 100 | 1 | 73.123600ms | 198.266780us | 31.477439us | 24.783348us | 24.199561us | 25.863250us | +| 16 | 100 | 1 | 84.558600ms | 268.182810us | 32.272547us | 16.761426us | 16.457561us | 17.304723us | +| 32 | 100 | 1 | 55.210200ms | 374.975870us | 23.876686us | 11.717996us | 11.593683us | 11.894465us | +| 64 | 100 | 1 | 83.701000ms | 584.733600us | 32.646091us | 9.136463us | 9.062842us | 9.282989us | +| 128 | 100 | 1 | 140.400300ms | 975.055400us | 32.328978us | 7.617620us | 7.574435us | 7.675238us | +| 256 | 100 | 1 | 235.081500ms | 1.776103ms | 65.215343us | 6.937903us | 6.893892us | 6.995008us | +| 512 | 100 | 1 | 471.288100ms | 3.851204ms | 476.413051us | 7.521882us | 7.370904us | 7.747884us | +| 1024 | 100 | 1 | 949.526600ms | 8.767654ms | 580.393459us | 8.562162us | 8.458584us | 8.681763us | +| 2048 | 100 | 1 | 2138.753200ms | 20.508774ms | 720.717457us | 10.014050us | 9.950766us | 10.089260us | +| 4096 | 100 | 1 | 5148.977500ms | 51.480044ms | 1.666440ms | 12.568370us | 12.498349us | 12.659211us | +| 8192 | 100 | 1 | 13852.212400ms | 139.780844ms | 3.775370ms | 17.063091us | 16.981966us | 17.164356us | ## SV-SingleBattle-CalcDamage-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 10.744700ms | 13.758060us | 6.767953us | 13.758060us | 12.554200us | 15.248050us | -| 2 | 100 | 1 | 11.100800ms | 15.459920us | 7.974394us | 7.729960us | 7.019030us | 8.584765us | -| 4 | 100 | 1 | 11.699700ms | 20.055020us | 16.116064us | 5.013755us | 4.448317us | 6.215110us | -| 8 | 100 | 1 | 12.832800ms | 21.755510us | 9.508098us | 2.719439us | 2.477778us | 2.945245us | -| 16 | 100 | 1 | 9.838400ms | 29.510680us | 13.378797us | 1.844418us | 1.672779us | 2.000944us | -| 32 | 100 | 1 | 11.216200ms | 45.603210us | 22.880815us | 1.425100us | 1.282887us | 1.563792us | -| 64 | 100 | 1 | 19.644000ms | 78.087080us | 39.925976us | 1.220111us | 1.096246us | 1.339988us | -| 128 | 100 | 1 | 50.036400ms | 138.506060us | 75.091767us | 1.082079us | 965.331406ns | 1.195239us | -| 256 | 100 | 1 | 89.268300ms | 263.545300us | 144.754148us | 1.029474us | 916.427656ns | 1.138227us | -| 512 | 100 | 1 | 171.303900ms | 482.103700us | 292.297865us | 941.608789ns | 828.409844ns | 1.053561us | -| 1024 | 100 | 1 | 336.844600ms | 1.151822ms | 681.248031us | 1.124826us | 990.824912ns | 1.252073us | -| 2048 | 100 | 1 | 658.284400ms | 2.419491ms | 1.392018ms | 1.181392us | 1.043910us | 1.311011us | -| 4096 | 100 | 1 | 1281.540100ms | 5.109368ms | 3.011059ms | 1.247404us | 1.099312us | 1.387562us | -| 8192 | 100 | 1 | 2692.442700ms | 11.179306ms | 6.656857ms | 1.364661us | 1.201349us | 1.518977us | +| 1 | 100 | 1 | 10.969200ms | 14.152840us | 6.952964us | 14.152840us | 12.902790us | 15.663610us | +| 2 | 100 | 1 | 11.370300ms | 15.966060us | 8.273215us | 7.983030us | 7.250755us | 8.892250us | +| 4 | 100 | 1 | 12.017700ms | 18.890490us | 10.976577us | 4.722623us | 4.274312us | 5.387973us | +| 8 | 100 | 1 | 13.123100ms | 23.029480us | 12.748871us | 2.878685us | 2.607686us | 3.247680us | +| 16 | 100 | 1 | 10.094100ms | 30.947490us | 14.976584us | 1.934218us | 1.751040us | 2.117081us | +| 32 | 100 | 1 | 11.348200ms | 46.047310us | 22.241728us | 1.438978us | 1.299546us | 1.571406us | +| 64 | 100 | 1 | 19.949700ms | 85.522360us | 56.660681us | 1.336287us | 1.191811us | 1.551351us | +| 128 | 100 | 1 | 50.816900ms | 143.472720us | 77.822559us | 1.120881us | 999.582891ns | 1.238214us | +| 256 | 100 | 1 | 90.230500ms | 278.895500us | 152.232440us | 1.089436us | 971.194336ns | 1.204293us | +| 512 | 100 | 1 | 174.412300ms | 537.476430us | 316.665997us | 1.049759us | 925.532402ns | 1.168641us | +| 1024 | 100 | 1 | 341.005300ms | 1.248134ms | 722.744849us | 1.218881us | 1.078481us | 1.354589us | +| 2048 | 100 | 1 | 682.917900ms | 2.546078ms | 1.469600ms | 1.243202us | 1.098776us | 1.381982us | +| 4096 | 100 | 1 | 1427.747500ms | 5.354129ms | 3.205460ms | 1.307161us | 1.150773us | 1.457594us | +| 8192 | 100 | 1 | 2829.025200ms | 11.968152ms | 7.280256ms | 1.460956us | 1.282959us | 1.631555us | ## SV-SingleBattle-CalcDamage-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 10.665700ms | 13.781530us | 7.391359us | 13.781530us | 12.526040us | 15.473970us | -| 2 | 100 | 1 | 11.023500ms | 17.909010us | 13.254475us | 8.954505us | 8.159460us | 11.647815us | -| 4 | 100 | 1 | 10.721400ms | 19.140620us | 4.511333us | 4.785155us | 4.631085us | 5.150353us | -| 8 | 100 | 1 | 12.090500ms | 25.107920us | 12.046176us | 3.138490us | 2.954605us | 3.724584us | -| 16 | 100 | 1 | 12.711800ms | 32.112720us | 5.182708us | 2.007045us | 1.960869us | 2.102531us | -| 32 | 100 | 1 | 14.979200ms | 47.444390us | 5.348342us | 1.482637us | 1.455933us | 1.524522us | -| 64 | 100 | 1 | 17.156400ms | 75.611210us | 6.259646us | 1.181425us | 1.164573us | 1.203320us | -| 128 | 100 | 1 | 24.329300ms | 131.749350us | 6.865227us | 1.029292us | 1.019109us | 1.040077us | -| 256 | 100 | 1 | 36.431000ms | 246.316270us | 10.774616us | 962.172930ns | 954.257656ns | 970.687461ns | -| 512 | 100 | 1 | 42.346200ms | 480.128430us | 25.383141us | 937.750840ns | 930.996387ns | 953.196602ns | -| 1024 | 100 | 1 | 90.927300ms | 938.477800us | 22.260166us | 916.482227ns | 912.397783ns | 920.905020ns | -| 2048 | 100 | 1 | 192.435300ms | 1.839090ms | 35.274810us | 897.993271ns | 894.696958ns | 901.448525ns | -| 4096 | 100 | 1 | 377.462600ms | 3.648053ms | 52.832295us | 890.638010ns | 888.178291ns | 893.253059ns | -| 8192 | 100 | 1 | 742.231700ms | 7.298594ms | 110.461215us | 890.941626ns | 888.412839ns | 893.696354ns | +| 1 | 100 | 1 | 11.051700ms | 14.108450us | 7.124786us | 14.108450us | 12.869780us | 15.704940us | +| 2 | 100 | 1 | 11.289300ms | 17.498440us | 5.480808us | 8.749220us | 8.353720us | 9.533440us | +| 4 | 100 | 1 | 10.927800ms | 20.464360us | 5.221275us | 5.116090us | 4.927932us | 5.488300us | +| 8 | 100 | 1 | 12.388100ms | 25.618590us | 7.680164us | 3.202324us | 3.072167us | 3.509516us | +| 16 | 100 | 1 | 12.786800ms | 32.812370us | 5.582711us | 2.050773us | 1.998950us | 2.146999us | +| 32 | 100 | 1 | 14.905300ms | 48.644130us | 6.476272us | 1.520129us | 1.488746us | 1.572514us | +| 64 | 100 | 1 | 17.301700ms | 78.716640us | 7.454745us | 1.229947us | 1.210402us | 1.257050us | +| 128 | 100 | 1 | 24.703000ms | 135.744740us | 8.419088us | 1.060506us | 1.049195us | 1.075385us | +| 256 | 100 | 1 | 37.616200ms | 253.694380us | 10.618556us | 990.993672ns | 982.990273ns | 999.317695ns | +| 512 | 100 | 1 | 43.749800ms | 487.396750us | 15.338202us | 951.946777ns | 946.213496ns | 957.950723ns | +| 1024 | 100 | 1 | 92.818400ms | 954.986410us | 21.826614us | 932.603916ns | 928.547656ns | 936.912422ns | +| 2048 | 100 | 1 | 195.137800ms | 1.890394ms | 33.548595us | 923.043945ns | 919.927202ns | 926.344419ns | +| 4096 | 100 | 1 | 388.287000ms | 3.758284ms | 53.235373us | 917.549856ns | 915.047593ns | 920.165256ns | +| 8192 | 100 | 1 | 766.900900ms | 7.506792ms | 109.267873us | 916.356432ns | 913.788928ns | 919.033979ns | ## SV-SingleBattle-CalcDamage-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 10.602000ms | 13.589110us | 7.013665us | 13.589110us | 12.393990us | 15.189510us | -| 2 | 100 | 1 | 10.216800ms | 17.086420us | 7.000266us | 8.543210us | 8.089265us | 9.766645us | -| 4 | 100 | 1 | 11.504100ms | 20.936800us | 5.974662us | 5.234200us | 5.010980us | 5.648335us | -| 8 | 100 | 1 | 11.876300ms | 26.403980us | 8.006266us | 3.300498us | 3.168466us | 3.639432us | -| 16 | 100 | 1 | 14.307600ms | 36.956230us | 8.526090us | 2.309764us | 2.241067us | 2.493859us | -| 32 | 100 | 1 | 17.556800ms | 56.394100us | 5.521727us | 1.762316us | 1.733937us | 1.804324us | -| 64 | 100 | 1 | 30.827900ms | 101.227870us | 31.297704us | 1.581685us | 1.527072us | 1.800853us | -| 128 | 100 | 1 | 53.685300ms | 179.129640us | 12.346563us | 1.399450us | 1.384641us | 1.425097us | -| 256 | 100 | 1 | 95.504100ms | 347.871100us | 35.358631us | 1.358871us | 1.342382us | 1.414127us | -| 512 | 100 | 1 | 183.961200ms | 664.510840us | 35.243896us | 1.297873us | 1.287120us | 1.315717us | -| 1024 | 100 | 1 | 348.070700ms | 1.676014ms | 49.664134us | 1.636732us | 1.627792us | 1.646840us | -| 2048 | 100 | 1 | 720.045700ms | 3.781840ms | 79.316729us | 1.846601us | 1.839896us | 1.855427us | -| 4096 | 100 | 1 | 1429.753000ms | 8.591502ms | 112.874157us | 2.097535us | 2.092472us | 2.103329us | -| 8192 | 100 | 1 | 2858.205700ms | 19.513900ms | 236.506909us | 2.382068us | 2.376933us | 2.388366us | +| 1 | 100 | 1 | 10.850000ms | 14.052640us | 7.167387us | 14.052640us | 12.797300us | 15.677760us | +| 2 | 100 | 1 | 10.393300ms | 17.782080us | 6.660394us | 8.891040us | 8.451135us | 10.000420us | +| 4 | 100 | 1 | 11.645400ms | 21.431550us | 7.953447us | 5.357887us | 5.104235us | 6.058732us | +| 8 | 100 | 1 | 12.122700ms | 26.696820us | 7.511590us | 3.337102us | 3.214519us | 3.658009us | +| 16 | 100 | 1 | 14.498400ms | 37.443330us | 8.879242us | 2.340208us | 2.266691us | 2.523139us | +| 32 | 100 | 1 | 18.003000ms | 57.495800us | 5.670163us | 1.796744us | 1.767739us | 1.839161us | +| 64 | 100 | 1 | 33.048100ms | 101.082910us | 7.956743us | 1.579420us | 1.559630us | 1.610427us | +| 128 | 100 | 1 | 55.790500ms | 188.828200us | 22.723819us | 1.475220us | 1.452440us | 1.536084us | +| 256 | 100 | 1 | 97.763900ms | 371.276790us | 26.299926us | 1.450300us | 1.433564us | 1.475119us | +| 512 | 100 | 1 | 186.115700ms | 813.058770us | 128.767757us | 1.588005us | 1.543418us | 1.643601us | +| 1024 | 100 | 1 | 358.998200ms | 1.905112ms | 200.903998us | 1.860461us | 1.824065us | 1.900980us | +| 2048 | 100 | 1 | 759.394900ms | 4.117830ms | 242.004061us | 2.010659us | 1.989456us | 2.036012us | +| 4096 | 100 | 1 | 1474.877100ms | 9.181152ms | 396.557739us | 2.241492us | 2.223730us | 2.261734us | +| 8192 | 100 | 1 | 2992.611400ms | 21.050014ms | 1.108958ms | 2.569582us | 2.545772us | 2.599327us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 31.600600ms | 114.651550us | 38.611395us | 114.651550us | 106.092200us | 121.420440us | -| 2 | 100 | 1 | 38.221100ms | 167.613490us | 55.456582us | 83.806745us | 77.383115us | 88.468040us | -| 4 | 100 | 1 | 39.260300ms | 262.240810us | 87.002271us | 65.560203us | 60.471310us | 69.186200us | -| 8 | 100 | 1 | 62.681000ms | 446.481610us | 149.386706us | 55.810201us | 51.431925us | 58.910618us | -| 16 | 100 | 1 | 121.760200ms | 789.037830us | 279.283688us | 49.314864us | 45.239582us | 52.233214us | -| 32 | 100 | 1 | 185.872400ms | 1.449048ms | 513.000027us | 45.282742us | 41.568798us | 47.956709us | -| 64 | 100 | 1 | 383.857300ms | 2.801388ms | 994.828087us | 43.771693us | 40.094598us | 46.366161us | -| 128 | 100 | 1 | 785.160800ms | 5.366773ms | 1.911315ms | 41.927918us | 38.465781us | 44.415775us | -| 256 | 100 | 1 | 1494.570500ms | 10.664093ms | 3.804651ms | 41.656615us | 38.179331us | 44.155145us | -| 512 | 100 | 1 | 3182.276800ms | 22.294825ms | 7.999210ms | 43.544579us | 39.873389us | 46.145017us | -| 1024 | 100 | 1 | 7763.162500ms | 56.110320ms | 20.099699ms | 54.795235us | 50.257554us | 58.109714us | -| 2048 | 100 | 1 | 13854.959600ms | 130.346536ms | 46.490337ms | 63.645770us | 58.361525us | 67.448483us | -| 4096 | 100 | 1 | 29807.685000ms | 279.730628ms | 99.713010ms | 68.293610us | 62.563582us | 72.343266us | +| 1 | 100 | 1 | 32.283100ms | 123.050060us | 41.814504us | 123.050060us | 113.783620us | 130.404060us | +| 2 | 100 | 1 | 39.992500ms | 172.832890us | 57.115395us | 86.416445us | 79.817355us | 91.224100us | +| 4 | 100 | 1 | 40.257300ms | 274.563160us | 91.182119us | 68.640790us | 63.323042us | 72.416715us | +| 8 | 100 | 1 | 64.848800ms | 457.867560us | 153.741525us | 57.233445us | 52.725861us | 60.417514us | +| 16 | 100 | 1 | 125.392900ms | 851.076900us | 333.734614us | 53.192306us | 48.771185us | 56.979695us | +| 32 | 100 | 1 | 191.998900ms | 1.492007ms | 527.753603us | 46.625210us | 42.741974us | 49.367825us | +| 64 | 100 | 1 | 391.446300ms | 2.882242ms | 1.022079ms | 45.035032us | 41.230430us | 47.685740us | +| 128 | 100 | 1 | 800.577500ms | 5.615974ms | 2.014146ms | 43.874794us | 40.254257us | 46.512947us | +| 256 | 100 | 1 | 1561.564100ms | 11.390426ms | 4.099653ms | 44.493851us | 40.822597us | 47.214769us | +| 512 | 100 | 1 | 3385.723600ms | 25.396418ms | 9.429669ms | 49.602379us | 45.384353us | 52.761313us | +| 1024 | 100 | 1 | 8353.375700ms | 63.825308ms | 22.969931ms | 62.329402us | 57.091517us | 66.082574us | +| 2048 | 100 | 1 | 15283.561400ms | 141.882087ms | 50.591579ms | 69.278363us | 63.467827us | 73.385970us | +| 4096 | 100 | 1 | 31089.525500ms | 293.727321ms | 104.932273ms | 71.710772us | 65.696700us | 75.995759us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 43.635600ms | 115.169950us | 42.431582us | 115.169950us | 106.235880us | 122.831400us | -| 2 | 100 | 1 | 28.271900ms | 151.704150us | 26.346074us | 75.852075us | 72.544940us | 77.936180us | -| 4 | 100 | 1 | 29.714000ms | 208.666330us | 23.249470us | 52.166582us | 51.012180us | 53.294555us | -| 8 | 100 | 1 | 41.959100ms | 305.797080us | 27.478856us | 38.224635us | 37.499849us | 38.853590us | -| 16 | 100 | 1 | 60.999900ms | 501.787380us | 39.559579us | 31.361711us | 30.887658us | 31.855696us | -| 32 | 100 | 1 | 102.275100ms | 900.287000us | 54.223063us | 28.133969us | 27.805171us | 28.471155us | -| 64 | 100 | 1 | 182.789700ms | 1.717193ms | 87.963885us | 26.831141us | 26.562752us | 27.100686us | -| 128 | 100 | 1 | 578.987900ms | 5.264351ms | 159.166529us | 41.127742us | 40.889016us | 41.376450us | -| 256 | 100 | 1 | 1169.876800ms | 11.415804ms | 321.842534us | 44.592986us | 44.344346us | 44.837218us | -| 512 | 100 | 1 | 2886.487900ms | 28.449537ms | 639.393680us | 55.565501us | 55.320456us | 55.811677us | -| 1024 | 100 | 1 | 6999.906300ms | 70.785388ms | 2.041090ms | 69.126356us | 68.746386us | 69.529979us | -| 2048 | 100 | 1 | 16471.971200ms | 169.111225ms | 3.058662ms | 82.573840us | 82.279594us | 82.863901us | -| 4096 | 100 | 1 | 38151.893800ms | 392.791796ms | 5.167571ms | 95.896435us | 95.652068us | 96.147046us | +| 1 | 100 | 1 | 45.539500ms | 117.775190us | 41.322366us | 117.775190us | 108.564790us | 124.993020us | +| 2 | 100 | 1 | 29.295400ms | 156.464120us | 27.287248us | 78.232060us | 74.828540us | 80.436825us | +| 4 | 100 | 1 | 32.387300ms | 212.176470us | 22.651891us | 53.044117us | 51.877955us | 54.098260us | +| 8 | 100 | 1 | 44.016300ms | 312.984350us | 28.129237us | 39.123044us | 38.390898us | 39.774001us | +| 16 | 100 | 1 | 62.348600ms | 512.424420us | 40.468179us | 32.026526us | 31.535019us | 32.533203us | +| 32 | 100 | 1 | 103.006100ms | 912.697120us | 53.805699us | 28.521785us | 28.198328us | 28.859658us | +| 64 | 100 | 1 | 187.366100ms | 1.756857ms | 93.180963us | 27.450895us | 27.176722us | 27.745958us | +| 128 | 100 | 1 | 592.508700ms | 5.439960ms | 238.251577us | 42.499688us | 42.169889us | 42.901357us | +| 256 | 100 | 1 | 1202.551200ms | 11.748872ms | 345.520669us | 45.894031us | 45.629829us | 46.158949us | +| 512 | 100 | 1 | 2955.682900ms | 30.222999ms | 878.320440us | 59.029294us | 58.704231us | 59.378723us | +| 1024 | 100 | 1 | 7248.115600ms | 73.287888ms | 2.166319ms | 71.570203us | 71.170911us | 72.003403us | +| 2048 | 100 | 1 | 16697.622200ms | 174.543550ms | 4.069829ms | 85.226343us | 84.848450us | 85.627763us | +| 4096 | 100 | 1 | 39109.379000ms | 407.929813ms | 11.383833ms | 99.592240us | 99.194170us | 100.398566us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 30.650200ms | 115.719860us | 38.771977us | 115.719860us | 107.077670us | 122.446520us | -| 2 | 100 | 1 | 52.638100ms | 185.437690us | 32.682785us | 92.718845us | 89.086665us | 95.558150us | -| 4 | 100 | 1 | 44.016600ms | 304.045200us | 32.978319us | 76.011300us | 74.313033us | 77.529430us | -| 8 | 100 | 1 | 67.043000ms | 525.890810us | 46.921605us | 65.736351us | 64.505540us | 66.803462us | -| 16 | 100 | 1 | 124.804000ms | 963.416700us | 64.780664us | 60.213544us | 59.401251us | 60.988066us | -| 32 | 100 | 1 | 227.785000ms | 1.798079ms | 86.224966us | 56.189967us | 55.655719us | 56.709748us | -| 64 | 100 | 1 | 447.283100ms | 3.453214ms | 140.986003us | 53.956466us | 53.499700us | 54.370247us | -| 128 | 100 | 1 | 820.533100ms | 6.438475ms | 195.923757us | 50.300583us | 49.997983us | 50.597004us | -| 256 | 100 | 1 | 1700.924400ms | 12.749874ms | 407.698990us | 49.804197us | 49.509155us | 50.135285us | -| 512 | 100 | 1 | 3379.099100ms | 27.614083ms | 895.610539us | 53.933757us | 53.606237us | 54.296005us | -| 1024 | 100 | 1 | 7877.656500ms | 73.610019ms | 1.919481ms | 71.884785us | 71.546163us | 72.286915us | -| 2048 | 100 | 1 | 16777.903700ms | 165.887471ms | 2.169109ms | 80.999742us | 80.799219us | 81.213883us | -| 4096 | 100 | 1 | 35072.874700ms | 352.523815ms | 3.224057ms | 86.065384us | 85.911196us | 86.220355us | +| 1 | 100 | 1 | 32.375100ms | 118.204980us | 40.673471us | 118.204980us | 109.404700us | 125.500300us | +| 2 | 100 | 1 | 54.325300ms | 188.845430us | 34.325085us | 94.422715us | 90.646780us | 97.473165us | +| 4 | 100 | 1 | 44.983100ms | 310.630750us | 34.869067us | 77.657687us | 75.888985us | 79.315790us | +| 8 | 100 | 1 | 85.264200ms | 541.530960us | 48.714349us | 67.691370us | 66.417709us | 68.810386us | +| 16 | 100 | 1 | 128.944200ms | 988.521820us | 67.151161us | 61.782614us | 60.931589us | 62.584334us | +| 32 | 100 | 1 | 229.910800ms | 1.844195ms | 90.315410us | 57.631088us | 57.065262us | 58.178122us | +| 64 | 100 | 1 | 454.919600ms | 3.541483ms | 145.007969us | 55.335665us | 54.874292us | 55.766661us | +| 128 | 100 | 1 | 854.568200ms | 6.757463ms | 299.364770us | 52.792681us | 52.387685us | 53.315102us | +| 256 | 100 | 1 | 1997.137900ms | 13.724253ms | 678.252344us | 53.610364us | 53.128042us | 54.173008us | +| 512 | 100 | 1 | 3870.811100ms | 32.309037ms | 2.678342ms | 63.103588us | 62.210405us | 64.294489us | +| 1024 | 100 | 1 | 8475.261800ms | 82.598629ms | 2.895838ms | 80.662723us | 80.132499us | 81.245388us | +| 2048 | 100 | 1 | 17937.639100ms | 179.809727ms | 3.531982ms | 87.797718us | 87.478108us | 88.156860us | +| 4096 | 100 | 1 | 37050.523000ms | 372.427110ms | 4.487934ms | 90.924587us | 90.720675us | 91.148332us | diff --git a/src/Battle/Pokemon/ManagePokemonState.cpp b/src/Battle/Pokemon/ManagePokemonState.cpp index badedb67..e4e3805c 100644 --- a/src/Battle/Pokemon/ManagePokemonState.cpp +++ b/src/Battle/Pokemon/ManagePokemonState.cpp @@ -307,68 +307,77 @@ void tryBoost(Simulation& simulation) { } void updateAllStats(Simulation& simulation) { - updateAtk(simulation); - updateDef(simulation); - updateSpa(simulation); - updateSpd(simulation); - updateSpe(simulation); + updateAtk(simulation, false); + updateDef(simulation, false); + updateSpa(simulation, false); + updateSpd(simulation, false); + updateSpe(simulation, false); } -void updateAtk(Simulation& simulation) { +void updateAtk(Simulation& simulation, bool ignoreBoosts) { internal::SelectForPokemonView selectedAtkUpdateRequired{simulation}; if (selectedAtkUpdateRequired.hasNoneSelected()) return; simulation.viewForSelectedPokemon(); - simulation.viewForSelectedPokemon>(); + if (!ignoreBoosts) { + simulation.viewForSelectedPokemon>(); + } runModifyAtk(simulation); simulation.registry.clear(); } -void updateDef(Simulation& simulation) { +void updateDef(Simulation& simulation, bool ignoreBoosts) { internal::SelectForPokemonView selectedDefUpdateRequired{simulation}; if (selectedDefUpdateRequired.hasNoneSelected()) return; simulation.viewForSelectedPokemon(); - simulation.viewForSelectedPokemon>(); + if (!ignoreBoosts) { + simulation.viewForSelectedPokemon>(); + } runModifyDef(simulation); simulation.registry.clear(); } -void updateSpa(Simulation& simulation) { +void updateSpa(Simulation& simulation, bool ignoreBoosts) { internal::SelectForPokemonView selectedSpaUpdateRequired{simulation}; if (selectedSpaUpdateRequired.hasNoneSelected()) return; simulation.viewForSelectedPokemon(); - - simulation.viewForSelectedPokemon>(); + if (!ignoreBoosts) { + simulation.viewForSelectedPokemon>(); + } runModifySpa(simulation); simulation.registry.clear(); } -void updateSpd(Simulation& simulation) { +void updateSpd(Simulation& simulation, bool ignoreBoosts) { internal::SelectForPokemonView selectedSpdUpdateRequired{simulation}; if (selectedSpdUpdateRequired.hasNoneSelected()) return; simulation.viewForSelectedPokemon(); - simulation.viewForSelectedPokemon>(); + if (!ignoreBoosts) { + simulation.viewForSelectedPokemon>(); + } runModifySpd(simulation); simulation.registry.clear(); } -void updateSpe(Simulation& simulation) { +void updateSpe(Simulation& simulation, bool ignoreBoosts) { internal::SelectForPokemonView selectedSpeUpdateRequired{simulation}; if (selectedSpeUpdateRequired.hasNoneSelected()) return; simulation.viewForSelectedPokemon(); - simulation.viewForSelectedPokemon>(); + if (!ignoreBoosts) { + simulation.viewForSelectedPokemon>(); + } runModifySpe(simulation); // trick room diff --git a/src/Battle/Pokemon/ManagePokemonState.hpp b/src/Battle/Pokemon/ManagePokemonState.hpp index 4dfbe175..6c3b4b5b 100644 --- a/src/Battle/Pokemon/ManagePokemonState.hpp +++ b/src/Battle/Pokemon/ManagePokemonState.hpp @@ -52,9 +52,9 @@ void applyStatBoost(types::stat& stat, types::boost boost); void tryBoost(Simulation& simulation); void updateAllStats(Simulation& simulation); -void updateAtk(Simulation& simulation); -void updateDef(Simulation& simulation); -void updateSpa(Simulation& simulation); -void updateSpd(Simulation& simulation); -void updateSpe(Simulation& simulation); +void updateAtk(Simulation& simulation, bool ignoreBoosts); +void updateDef(Simulation& simulation, bool ignoreBoosts); +void updateSpa(Simulation& simulation, bool ignoreBoosts); +void updateSpd(Simulation& simulation, bool ignoreBoosts); +void updateSpe(Simulation& simulation, bool ignoreBoosts); } // namespace pokesim diff --git a/src/CalcDamage/CalcDamage.cpp b/src/CalcDamage/CalcDamage.cpp index bd49a148..05d558db 100644 --- a/src/CalcDamage/CalcDamage.cpp +++ b/src/CalcDamage/CalcDamage.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -421,27 +422,26 @@ void setUnboostedStat(Simulation& simulation) { simulation.viewForSelectedMoves, Tags>(); } - internal::SelectForPokemonView selectedPokemon{simulation}; - if (selectedPokemon.hasNoneSelected()) { + if (simulation.registry.view().empty()) { return; } if constexpr (std::is_same_v) { - simulation.viewForSelectedPokemon(); - runModifyAtk(simulation); + simulation.addToEntities(); + updateAtk(simulation, true); } else if constexpr ( std::is_same_v || std::is_same_v) { - simulation.viewForSelectedPokemon(); - runModifyDef(simulation); + simulation.addToEntities(); + updateDef(simulation, true); } else if constexpr (std::is_same_v) { - simulation.viewForSelectedPokemon(); - runModifySpa(simulation); + simulation.addToEntities(); + updateSpa(simulation, true); } else if constexpr (std::is_same_v) { - simulation.viewForSelectedPokemon(); - runModifySpd(simulation); + simulation.addToEntities(); + updateSpd(simulation, true); } else { static_assert("No other stat is used as the attacking or defending stat."); diff --git a/src/Utilities/EntityFilter.hpp b/src/Utilities/EntityFilter.hpp index 89f04436..ef174c6c 100644 --- a/src/Utilities/EntityFilter.hpp +++ b/src/Utilities/EntityFilter.hpp @@ -13,35 +13,35 @@ struct EntityFilter { template struct Filter, ExcludeContainer, IncludeContainer> { template - static void view(Simulation* container, const PassedInArgs&... passedInArgs) { - container + static void view(Simulation* simulation, const PassedInArgs&... passedInArgs) { + simulation ->view, ExcludeContainer, IncludeContainer>( passedInArgs...); } template - static void group(Simulation* container, const PassedInArgs&... passedInArgs) { - container + static void group(Simulation* simulation, const PassedInArgs&... passedInArgs) { + simulation ->group, ExcludeContainer, IncludeContainer>( passedInArgs...); } }; public: - EntityFilter(Simulation& registryContainer_) : simulation(®istryContainer_) {} + EntityFilter(Simulation& simulation_) : simulation(&simulation_) {} template < auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> auto view(const PassedInArgs&... passedInArgs) { - Filter::view(this, passedInArgs...); + Filter::view(simulation, passedInArgs...); } template < auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> auto group(const PassedInArgs&... passedInArgs) { - Filter::group(this, passedInArgs...); + Filter::group(simulation, passedInArgs...); } template diff --git a/tests/CalcDamageTest.cpp b/tests/CalcDamageTest.cpp index 29a291a2..5d16b764 100644 --- a/tests/CalcDamageTest.cpp +++ b/tests/CalcDamageTest.cpp @@ -41,31 +41,52 @@ TEST_CASE("Calculate Damage: Vertical Slice 1", "[Simulation][CalculateDamage]") static Pokedex pokedex{GameMechanics::SCARLET_VIOLET}; BattleCreationInfo battleCreationInfo; battleCreationInfo.runWithCalculateDamage = true; - Simulation simulation = createSingleBattleSimulation(pokedex, battleCreationInfo); - - auto& p2Info = battleCreationInfo.sides.p2().team[0]; - p2Info.nature = dex::Nature::MODEST; - - bool useSpecsInsteadOfBoost = GENERATE(false, true); - if (useSpecsInsteadOfBoost) { - p2Info.item = dex::Item::CHOICE_SPECS; - p2Info.currentBoosts.spa = (types::boost)0U; - } - else { - p2Info.item = dex::Item::NO_ITEM; - p2Info.currentBoosts.spa = (types::boost)1U; - } - battleCreationInfo.damageCalculations = { {Slot::P1A, Slot::P2A, {dex::Move::FURY_ATTACK}}, {Slot::P2A, Slot::P1A, {dex::Move::THUNDERBOLT}}, }; + Simulation simulation = createSingleBattleSimulation(pokedex, battleCreationInfo); + std::vector battleInfoList{8, battleCreationInfo}; + + for (std::size_t i = 0; i < battleInfoList.size(); i++) { + auto& p1Info = battleInfoList[i].sides.p1().team[0]; + auto& p2Info = battleInfoList[i].sides.p2().team[0]; + + if (i & 1U) { + p1Info.item = dex::Item::ASSAULT_VEST; + } + else { + p1Info.item = std::nullopt; + } + + if (i & 2U) { + p1Info.currentBoosts.spd = std::nullopt; + } + else { + p1Info.currentBoosts.spd = (types::boost)1U; + } + + p2Info.nature = dex::Nature::MODEST; + if (i & 4U) { + p2Info.item = dex::Item::CHOICE_SPECS; + p2Info.currentBoosts.spa = std::nullopt; + } + else { + p2Info.item = std::nullopt; + p2Info.currentBoosts.spa = (types::boost)1U; + } + } + const IdealDamageValues furyAttackBaseDamage( {13U, 12U, 12U, 12U, 12U, 12U, 12U, 12U, 11U, 11U, 11U, 11U, 11U, 11U, 11U, 11U}, {{{23U, 1U}, {25U, 7U}, {27U, 8U}}}, 12U); const IdealDamageValues thunderboltBaseDamage( + {420U, 414U, 410U, 404U, 402U, 398U, 392U, 390U, 384U, 380U, 378U, 372U, 368U, 362U, 360U, 356U}, + {{{1U, 16U}}}, + 388U); + const IdealDamageValues thunderboltAVDamage( {282U, 278U, 276U, 272U, 270U, 266U, 264U, 260U, 258U, 254U, 252U, 248U, 246U, 242U, 240U, 236U}, {{{1U, 3U}, {2U, 13U}}}, 260U); @@ -75,24 +96,33 @@ TEST_CASE("Calculate Damage: Vertical Slice 1", "[Simulation][CalculateDamage]") {{{16U, 1U}, {17U, 5U}, {18U, 5U}, {19U, 5U}}}, 17U); const IdealDamageValues thunderboltCritDamage( + {630U, 620U, 614U, 608U, 602U, 596U, 590U, 584U, 578U, 572U, 566U, 558U, 552U, 546U, 540U, 534U}, + {{{1U, 16U}}}, + 582U); + const IdealDamageValues thunderboltCritAVDamage( {422U, 416U, 414U, 408U, 404U, 398U, 396U, 392U, 386U, 384U, 378U, 374U, 372U, 366U, 362U, 356U}, {{{1U, 16U}}}, 390U); + const IdealDamageValues thunderboltSpdBoostAVDamage( + {188U, 186U, 182U, 182U, 180U, 176U, 176U, 174U, 170U, 170U, 168U, 168U, 164U, 162U, 162U, 158U}, + {{{2U, 16U}}}, + 173U); + DamageRollOptions damageRollOptions; bool getKoUses = GENERATE(false, true); bool calculateUpToFoeHp = GENERATE(false, true); damageRollOptions.setP1(GENERATE(from_range(damageRollKindCombinations))); damageRollOptions.setP2(GENERATE(from_range(damageRollKindCombinations))); - CAPTURE(useSpecsInsteadOfBoost, getKoUses, calculateUpToFoeHp, damageRollOptions.getP1(), damageRollOptions.getP2()); + CAPTURE(getKoUses, calculateUpToFoeHp); auto& options = simulation.calculateDamageOptions; options.setCalculateUpToFoeHp(calculateUpToFoeHp); options.setNoKoChanceCalculation(!getKoUses); options.setDamageRollOptions(damageRollOptions); - simulation.createInitialStates({battleCreationInfo}); + simulation.createInitialStates(battleInfoList); auto result = simulation.calculateDamage(); const auto damageRolls = result.damageRollResults(); @@ -100,7 +130,7 @@ TEST_CASE("Calculate Damage: Vertical Slice 1", "[Simulation][CalculateDamage]") const auto hpRecovered = result.hpRecoveredResults(); const auto koUses = result.usesUntilKoResults(); - REQUIRE(damageRolls.size() == 2U); + REQUIRE(damageRolls.size() == battleInfoList.size() * 2U); REQUIRE(hpLost.empty()); REQUIRE(hpRecovered.empty()); @@ -110,15 +140,19 @@ TEST_CASE("Calculate Damage: Vertical Slice 1", "[Simulation][CalculateDamage]") else { types::damageRollIndex idealKoUsesSize = 0U; if (damageRollOptions.getP1() & DamageRollKind::ALL_DAMAGE_ROLLS) { - idealKoUsesSize++; + idealKoUsesSize += battleInfoList.size(); } if (damageRollOptions.getP2() & DamageRollKind::ALL_DAMAGE_ROLLS) { - idealKoUsesSize++; + idealKoUsesSize += battleInfoList.size(); } REQUIRE(koUses.size() == idealKoUsesSize); } - auto pickIdealDamageValues = [&](dex::Move move, DamageRollKind damageRollKind) -> const IdealDamageValues& { + auto pickIdealDamageValues = [&]( + dex::Move move, + DamageRollKind damageRollKind, + bool targetHasAssaultVest, + bool targetHasSpdBoost) -> const IdealDamageValues& { REQUIRE((move == dex::Move::FURY_ATTACK || move == dex::Move::THUNDERBOLT)); bool isCrit = damageRollKind & DamageRollKind::GUARANTEED_CRIT_CHANCE; @@ -126,19 +160,34 @@ TEST_CASE("Calculate Damage: Vertical Slice 1", "[Simulation][CalculateDamage]") return isCrit ? furyAttackCritDamage : furyAttackBaseDamage; } - return isCrit ? thunderboltCritDamage : thunderboltBaseDamage; + if (isCrit) { + return targetHasAssaultVest ? thunderboltCritAVDamage : thunderboltCritDamage; + } + if (targetHasSpdBoost) { + return targetHasAssaultVest ? thunderboltSpdBoostAVDamage : thunderboltAVDamage; + } + return targetHasAssaultVest ? thunderboltAVDamage : thunderboltBaseDamage; }; const types::registry& registry = simulation.registry; damageRolls.each([&](types::entity entity, const DamageRolls& trueDamageRolls) { + types::entity source = registry.get(entity).val; types::entity target = registry.get(entity).val; types::stat targetHp = registry.get(target).val; + dex::Move move = registry.get(entity).val; PlayerSideId sideId = registry.get(registry.get(target).val).val; DamageRollKind damageRollKind = sideId == PlayerSideId::P1 ? damageRollOptions.getP1() : damageRollOptions.getP2(); - dex::Move move = registry.get(entity).val; - const IdealDamageValues& idealDamageValues = pickIdealDamageValues(move, damageRollKind); + bool sourceHasChoiceSpecs = registry.all_of(source); + bool sourceHasSpaBoost = registry.all_of(source); + bool targetHasAssaultVest = registry.all_of(target); + bool targetHasSpdBoost = registry.all_of(target); + + CAPTURE(move, damageRollKind, sourceHasChoiceSpecs, sourceHasSpaBoost, targetHasAssaultVest, targetHasSpdBoost); + + const IdealDamageValues& idealDamageValues = + pickIdealDamageValues(move, damageRollKind, targetHasAssaultVest, targetHasSpdBoost); if (damageRollKind & DamageRollKind::ALL_DAMAGE_ROLLS) { REQUIRE(trueDamageRolls.val.size() == idealDamageValues.rolls.val.size()); @@ -157,7 +206,7 @@ TEST_CASE("Calculate Damage: Vertical Slice 1", "[Simulation][CalculateDamage]") REQUIRE(trueKosUses.minUses() == idealKoUses.val[0]); REQUIRE(trueKosUses.maxUses() == idealKoUses.val.back()); - REQUIRE(trueKosUses.guaranteedKo() == (idealKoUses.val.size() == 1U)); + REQUIRE(trueKosUses.guaranteedKo() == (idealKoUses.val.size() == 1U && idealKoUses.val[0].hits == 1U)); REQUIRE(trueKosUses.val.size() == idealKoUses.val.size()); for (types::damageRollIndex i = 0U; i < trueKosUses.val.size(); i++) { diff --git a/tests/Tests.hpp b/tests/Tests.hpp index 31b4c3bb..96c9e601 100644 --- a/tests/Tests.hpp +++ b/tests/Tests.hpp @@ -239,19 +239,19 @@ struct StringMaker { static std::string convert(const pokesim::DamageRollKind& value) { std::string fullName; - if ((int)value & (int)pokesim::DamageRollKind::AVERAGE_DAMAGE) { + if (value & pokesim::DamageRollKind::AVERAGE_DAMAGE) { append(fullName, "AVERAGE_DAMAGE"); } - if ((int)value & (int)pokesim::DamageRollKind::MIN_DAMAGE) { + if (value & pokesim::DamageRollKind::MIN_DAMAGE) { append(fullName, "MIN_DAMAGE"); } - if ((int)value & (int)pokesim::DamageRollKind::MAX_DAMAGE) { + if (value & pokesim::DamageRollKind::MAX_DAMAGE) { append(fullName, "MAX_DAMAGE"); } - if ((int)value & (int)pokesim::DamageRollKind::GUARANTEED_CRIT_CHANCE) { + if (value & pokesim::DamageRollKind::GUARANTEED_CRIT_CHANCE) { append(fullName, "GUARANTEED_CRIT_CHANCE"); } - if ((int)value & (int)pokesim::DamageRollKind::ALL_DAMAGE_ROLLS) { + if (value & pokesim::DamageRollKind::ALL_DAMAGE_ROLLS) { append(fullName, "ALL_DAMAGE_ROLLS"); } From 056fad54d3f1d66d496d458e51da7e3b95a6c9a5 Mon Sep 17 00:00:00 2001 From: aed3 <32887801+aed3@users.noreply.github.com> Date: Tue, 2 Jun 2026 18:27:51 -0500 Subject: [PATCH 3/9] Updating stats to EntityFilter --- extras/PokeSim.cpp | 109 ++---- extras/RecentBenchmarkResults.md | 422 +++++++++++----------- src/Battle/Pokemon/ManagePokemonState.cpp | 46 +-- src/Pokedex/Events/EffectEvents.cpp | 7 +- src/Pokedex/Events/ItemEvents.cpp | 12 +- src/Simulation/RunEvent.cpp | 46 +-- 6 files changed, 287 insertions(+), 355 deletions(-) diff --git a/extras/PokeSim.cpp b/extras/PokeSim.cpp index ca83877a..c84e8c32 100644 --- a/extras/PokeSim.cpp +++ b/extras/PokeSim.cpp @@ -1936,8 +1936,6 @@ types::entityVector Simulation::selectedPokemonEntities() const { ///////////////////// START OF src/Simulation/RunEvent.cpp ///////////////////// -#include - // TODO(aed3) Autogenerate? namespace pokesim { @@ -1947,37 +1945,6 @@ void applyEventModifier(ModifiedComponent& component, EventModifier eventModifie component.val = applyChainedModifier(component.val, eventModifier.val); } -template -internal::RegistryContainer::SelectionFunction getMoveEventPokemonSelector() { - static const size_t SelectAnyPokemon = sizeof...(PokemonSpecifiers) == 0U; - return internal::RegistryContainer::SelectionFunction{ - [](const void*, const types::registry& registry) -> types::entityVector { - entt::dense_set entities; - auto selectedMoveView = registry.view(); - auto begin = selectedMoveView.begin(); - auto end = selectedMoveView.end(); - if (selectedMoveView.empty()) { - auto anyMoveView = registry.view(); - begin = anyMoveView.begin(); - end = anyMoveView.end(); - } - - std::for_each(begin, end, [®istry, &entities](types::entity entity) { - if constexpr ( - SelectAnyPokemon || std::disjunction_v...>) { - entities.insert(registry.get(entity).val); - } - - if constexpr ( - SelectAnyPokemon || std::disjunction_v...>) { - entities.insert(registry.get(entity).val); - } - }); - - return {entities.begin(), entities.end()}; - }}; -} - void applyBasePowerEventModifier(types::handle moveHandle, BasePower basePower, EventModifier eventModifier) { calc_damage::Power& power = moveHandle.emplace(basePower.val); power.val = applyChainedModifier(power.val, eventModifier.val); @@ -2092,7 +2059,7 @@ void runModifyAtk(Simulation&) {} void runModifyDef(Simulation&) {} void runModifySpa(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); // Priority 1 dex::ChoiceSpecs::onModifySpa(simulation); @@ -2100,25 +2067,25 @@ void runModifySpa(Simulation& simulation) { // Priority 5 dex::Plus::onModifySpA(simulation); - simulation.viewForSelectedPokemon>(); + simulation.view>(); simulation.registry.clear(); } void runModifySpd(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); dex::AssaultVest::onModifySpd(simulation); - simulation.viewForSelectedPokemon>(); + simulation.view>(); simulation.registry.clear(); } void runModifySpe(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); dex::ChoiceScarf::onModifySpe(simulation); - simulation.viewForSelectedPokemon>(); + simulation.view>(); simulation.registry.clear(); dex::Paralysis::onModifySpe(simulation); @@ -2650,6 +2617,7 @@ void run(Simulation& simulation) { ////////////////// START OF src/SimulateTurn/RandomChance.cpp ////////////////// #include +#include namespace pokesim::internal { namespace { @@ -4368,9 +4336,7 @@ void lifeOrbOnAfterMove( void AssaultVest::onModifySpd(Simulation& simulation) { const auto modifier = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon, Tags>( - modifier, - 1U); + simulation.view, Tags>(modifier, 1U); } void AssaultVest::onEnd(Simulation& simulation) { @@ -4387,9 +4353,7 @@ void BrightPowder::onModifyAccuracy(Simulation& simulation) { void ChoiceScarf::onModifySpe(Simulation& simulation) { const auto modifier = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon, Tags>( - modifier, - 1U); + simulation.view, Tags>(modifier, 1U); } void ChoiceScarf::onSourceModifyMove(Simulation& simulation) { @@ -4403,9 +4367,7 @@ void ChoiceScarf::onEnd(Simulation& simulation) { void ChoiceSpecs::onModifySpa(Simulation& simulation) { const auto modifier = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon, Tags>( - modifier, - 1U); + simulation.view, Tags>(modifier, 1U); } void ChoiceSpecs::onSourceModifyMove(Simulation& simulation) { @@ -4513,9 +4475,11 @@ void Burn::onResidual(Simulation& simulation) { void Paralysis::onModifySpe(Simulation& simulation) { const auto speedDivisor = simulation.pokedex().getStaticValue(); const auto speedDividend = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon< + simulation.view< paralysisOnModifySpeed, - Tags /*, entt::exclude_t*/>(speedDivisor, speedDividend); + Tags /*, entt::exclude_t*/>( + speedDivisor, + speedDividend); } void Paralysis::onBeforeMove(Simulation& simulation) { @@ -5744,40 +5708,41 @@ void updateAllStats(Simulation& simulation) { } void updateAtk(Simulation& simulation, bool ignoreBoosts) { - internal::SelectForPokemonView selectedAtkUpdateRequired{simulation}; - if (selectedAtkUpdateRequired.hasNoneSelected()) return; + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) return; - simulation.viewForSelectedPokemon(); + filter.view(); if (!ignoreBoosts) { - simulation.viewForSelectedPokemon>(); + filter.view>(); } runModifyAtk(simulation); - simulation.registry.clear(); + filter.clearSelectionTags(); } void updateDef(Simulation& simulation, bool ignoreBoosts) { - internal::SelectForPokemonView selectedDefUpdateRequired{simulation}; - if (selectedDefUpdateRequired.hasNoneSelected()) return; + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) return; - simulation.viewForSelectedPokemon(); + filter.view(); if (!ignoreBoosts) { - simulation.viewForSelectedPokemon>(); + filter.view>(); } runModifyDef(simulation); - simulation.registry.clear(); + filter.clearSelectionTags(); } void updateSpa(Simulation& simulation, bool ignoreBoosts) { - internal::SelectForPokemonView selectedSpaUpdateRequired{simulation}; - if (selectedSpaUpdateRequired.hasNoneSelected()) return; + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) return; + + filter.view(); - simulation.viewForSelectedPokemon(); if (!ignoreBoosts) { - simulation.viewForSelectedPokemon>(); + filter.view>(); } runModifySpa(simulation); @@ -5785,13 +5750,13 @@ void updateSpa(Simulation& simulation, bool ignoreBoosts) { } void updateSpd(Simulation& simulation, bool ignoreBoosts) { - internal::SelectForPokemonView selectedSpdUpdateRequired{simulation}; - if (selectedSpdUpdateRequired.hasNoneSelected()) return; + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) return; - simulation.viewForSelectedPokemon(); + filter.view(); if (!ignoreBoosts) { - simulation.viewForSelectedPokemon>(); + filter.view>(); } runModifySpd(simulation); @@ -5799,13 +5764,13 @@ void updateSpd(Simulation& simulation, bool ignoreBoosts) { } void updateSpe(Simulation& simulation, bool ignoreBoosts) { - internal::SelectForPokemonView selectedSpeUpdateRequired{simulation}; - if (selectedSpeUpdateRequired.hasNoneSelected()) return; + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) return; - simulation.viewForSelectedPokemon(); + filter.view(); if (!ignoreBoosts) { - simulation.viewForSelectedPokemon>(); + filter.view>(); } runModifySpe(simulation); // trick room diff --git a/extras/RecentBenchmarkResults.md b/extras/RecentBenchmarkResults.md index 2db29017..2a202b73 100644 --- a/extras/RecentBenchmarkResults.md +++ b/extras/RecentBenchmarkResults.md @@ -7,286 +7,286 @@ ## SV-SingleBattle-MonteCarlo-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 44.457600ms | 82.251990us | 15.747639us | 82.251990us | 80.430000us | 88.888620us | -| 2 | 100 | 1 | 46.224100ms | 93.532040us | 17.780606us | 46.766020us | 45.560990us | 49.587480us | -| 4 | 100 | 1 | 48.684900ms | 106.298830us | 19.727991us | 26.574707us | 25.933688us | 28.245010us | -| 8 | 100 | 1 | 51.713500ms | 129.058690us | 17.429537us | 16.132336us | 15.829986us | 16.802714us | -| 16 | 100 | 1 | 58.140300ms | 176.397140us | 25.687928us | 11.024821us | 10.800103us | 11.514053us | -| 32 | 100 | 1 | 66.892300ms | 244.606220us | 18.783884us | 7.643944us | 7.562686us | 7.819973us | -| 64 | 100 | 1 | 81.385000ms | 378.625440us | 16.216315us | 5.916023us | 5.880706us | 5.992931us | -| 128 | 100 | 1 | 108.187600ms | 641.047530us | 17.185685us | 5.008184us | 4.990561us | 5.051843us | -| 256 | 100 | 1 | 129.583000ms | 1.181483ms | 16.084935us | 4.615167us | 4.604965us | 4.630503us | -| 512 | 100 | 1 | 239.624700ms | 2.281184ms | 20.665623us | 4.455438us | 4.448814us | 4.465180us | -| 1024 | 100 | 1 | 516.029300ms | 4.970157ms | 53.047916us | 4.853669us | 4.843683us | 4.864059us | -| 2048 | 100 | 1 | 1213.224200ms | 11.891180ms | 195.790072us | 5.806240us | 5.789556us | 5.827467us | -| 4096 | 100 | 1 | 3186.832300ms | 31.699116ms | 344.398042us | 7.739042us | 7.724159us | 7.757425us | -| 8192 | 100 | 1 | 9632.971000ms | 95.723065ms | 607.243932us | 11.684944us | 11.671448us | 11.700713us | -| 16384 | 100 | 1 | 32060.562100ms | 320.874213ms | 1.050601ms | 19.584608us | 19.573028us | 19.598293us | -| 32768 | 100 | 1 | 116193.693100ms | 1153.878722ms | 3.372980ms | 35.213584us | 35.197203us | 35.239203us | -| 65536 | 100 | 1 | 434553.277600ms | 4348.993493ms | 13.759278ms | 66.360374us | 66.326544us | 66.411563us | +| 1 | 100 | 1 | 44.949700ms | 82.454840us | 16.805018us | 82.454840us | 80.332020us | 88.476220us | +| 2 | 100 | 1 | 48.102900ms | 92.669610us | 17.856383us | 46.334805us | 45.123100us | 49.190095us | +| 4 | 100 | 1 | 49.738200ms | 108.680700us | 19.534366us | 27.170175us | 26.531635us | 28.810833us | +| 8 | 100 | 1 | 53.614600ms | 130.007600us | 16.435167us | 16.250950us | 15.975843us | 16.911389us | +| 16 | 100 | 1 | 59.710800ms | 176.470140us | 18.150932us | 11.029384us | 10.873152us | 11.381642us | +| 32 | 100 | 1 | 67.998000ms | 251.079970us | 20.916279us | 7.846249us | 7.759202us | 8.068400us | +| 64 | 100 | 1 | 82.617000ms | 389.795670us | 16.537765us | 6.090557us | 6.052196us | 6.162008us | +| 128 | 100 | 1 | 84.151600ms | 656.268470us | 15.428045us | 5.127097us | 5.111132us | 5.166813us | +| 256 | 100 | 1 | 143.112200ms | 1.211272ms | 16.973018us | 4.731530us | 4.719806us | 4.746077us | +| 512 | 100 | 1 | 242.711200ms | 2.326441ms | 29.528017us | 4.543829us | 4.533634us | 4.556480us | +| 1024 | 100 | 1 | 508.218000ms | 4.933815ms | 48.634230us | 4.818178us | 4.808948us | 4.827558us | +| 2048 | 100 | 1 | 1181.192600ms | 11.442650ms | 158.829357us | 5.587232us | 5.572471us | 5.602940us | +| 4096 | 100 | 1 | 2968.831600ms | 29.589144ms | 386.415335us | 7.223912us | 7.207483us | 7.244757us | +| 8192 | 100 | 1 | 9241.632700ms | 89.245406ms | 2.398857ms | 10.894215us | 10.839006us | 10.954157us | +| 16384 | 100 | 1 | 30737.935400ms | 297.318680ms | 8.777764ms | 18.146892us | 18.042286us | 18.251080us | +| 32768 | 100 | 1 | 102308.144300ms | 1034.819603ms | 30.540078ms | 31.580188us | 31.402077us | 31.766599us | +| 65536 | 100 | 1 | 369333.846000ms | 3798.355673ms | 87.562000ms | 57.958308us | 57.705409us | 58.229502us | ## SV-SingleBattle-Branching-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 46.952800ms | 235.304910us | 22.205126us | 235.304910us | 232.371990us | 242.637170us | -| 2 | 100 | 1 | 40.509600ms | 317.012350us | 21.620820us | 158.506175us | 157.142665us | 162.404535us | -| 4 | 100 | 1 | 56.877000ms | 467.559580us | 20.597410us | 116.889895us | 116.207428us | 118.581920us | -| 8 | 100 | 1 | 89.024400ms | 754.495270us | 21.579249us | 94.311909us | 93.963566us | 95.238776us | -| 16 | 100 | 1 | 146.377200ms | 1.279212ms | 26.524787us | 79.950731us | 79.732906us | 80.506188us | -| 32 | 100 | 1 | 260.332200ms | 2.343487ms | 30.765774us | 73.233961us | 73.073776us | 73.459703us | -| 64 | 100 | 1 | 479.159100ms | 4.398020ms | 42.916879us | 68.719060us | 68.598713us | 68.862738us | -| 128 | 100 | 1 | 905.108200ms | 8.505733ms | 68.601916us | 66.451036us | 66.355465us | 66.566780us | -| 256 | 100 | 1 | 1787.020200ms | 17.173157ms | 599.110117us | 67.082644us | 66.737720us | 67.730331us | -| 512 | 100 | 1 | 3525.618700ms | 34.531420ms | 986.570454us | 67.444179us | 67.176941us | 68.039626us | -| 1024 | 100 | 1 | 7825.770800ms | 76.757648ms | 2.210817ms | 74.958641us | 74.643887us | 75.572091us | -| 2048 | 100 | 1 | 19265.290900ms | 189.801721ms | 4.479901ms | 92.676622us | 92.312612us | 93.193023us | -| 4096 | 100 | 1 | 53461.029700ms | 536.775669ms | 14.004836ms | 131.048747us | 130.422248us | 131.765757us | -| 8192 | 100 | 1 | 157235.653000ms | 1602.240450ms | 10.903696ms | 195.585992us | 195.340336us | 195.864070us | +| 1 | 100 | 1 | 67.466400ms | 234.259630us | 20.507633us | 234.259630us | 231.524910us | 240.941540us | +| 2 | 100 | 1 | 43.383300ms | 319.507910us | 20.790627us | 159.753955us | 158.416205us | 163.383715us | +| 4 | 100 | 1 | 57.292300ms | 467.376800us | 21.653320us | 116.844200us | 116.172337us | 118.866492us | +| 8 | 100 | 1 | 88.864800ms | 757.146950us | 22.436148us | 94.643369us | 94.306354us | 95.728706us | +| 16 | 100 | 1 | 147.887500ms | 1.281822ms | 23.139515us | 80.113897us | 79.904029us | 80.525848us | +| 32 | 100 | 1 | 266.587500ms | 2.342120ms | 24.624954us | 73.191264us | 73.069314us | 73.384363us | +| 64 | 100 | 1 | 484.355300ms | 4.405063ms | 43.134299us | 68.829106us | 68.709386us | 68.975940us | +| 128 | 100 | 1 | 918.028200ms | 8.627047ms | 84.396876us | 67.398803us | 67.277661us | 67.538570us | +| 256 | 100 | 1 | 1791.143500ms | 17.663738ms | 817.171607us | 68.998976us | 68.497363us | 69.802561us | +| 512 | 100 | 1 | 3593.165800ms | 35.169791ms | 1.074326ms | 68.690998us | 68.333416us | 69.169627us | +| 1024 | 100 | 1 | 7908.787700ms | 76.332704ms | 2.744726ms | 74.543656us | 74.154001us | 75.300690us | +| 2048 | 100 | 1 | 18408.110000ms | 183.707434ms | 5.372513ms | 89.700895us | 89.227073us | 90.264963us | +| 4096 | 100 | 1 | 49519.233700ms | 498.808455ms | 11.634415ms | 121.779408us | 121.250449us | 122.372179us | +| 8192 | 100 | 1 | 142572.075700ms | 1455.618120ms | 27.678121ms | 177.687759us | 177.044568us | 178.368765us | ## SV-DoubleBattle-MonteCarlo-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 58.962200ms | 128.982930us | 18.813965us | 128.982930us | 126.411680us | 134.907280us | -| 2 | 100 | 1 | 61.289900ms | 152.534310us | 23.855316us | 76.267155us | 74.637655us | 80.031175us | -| 4 | 100 | 1 | 64.673500ms | 177.476510us | 25.640290us | 44.369128us | 43.473325us | 46.309160us | -| 8 | 100 | 1 | 70.440800ms | 225.917270us | 23.739148us | 28.239659us | 27.823001us | 29.127900us | -| 16 | 100 | 1 | 46.795800ms | 304.296540us | 29.141063us | 19.018534us | 18.810410us | 19.797833us | -| 32 | 100 | 1 | 61.499500ms | 433.883700us | 17.561624us | 13.558866us | 13.490362us | 13.761538us | -| 64 | 100 | 1 | 79.515600ms | 674.355520us | 15.260973us | 10.536805us | 10.508508us | 10.631618us | -| 128 | 100 | 1 | 127.892900ms | 1.163011ms | 19.259172us | 9.086027us | 9.063606us | 9.127034us | -| 256 | 100 | 1 | 227.804300ms | 2.132265ms | 32.200667us | 8.329162us | 8.307027us | 8.357144us | -| 512 | 100 | 1 | 446.905900ms | 4.184353ms | 67.298055us | 8.172564us | 8.149290us | 8.201355us | -| 1024 | 100 | 1 | 881.333300ms | 8.972288ms | 340.030343us | 8.762000us | 8.706099us | 8.839147us | -| 2048 | 100 | 1 | 2056.524400ms | 19.936351ms | 1.108714ms | 9.734546us | 9.639750us | 9.854292us | -| 4096 | 100 | 1 | 4748.256500ms | 46.745921ms | 1.006507ms | 11.412578us | 11.373035us | 11.473021us | +| 1 | 100 | 1 | 57.338200ms | 128.502860us | 20.951052us | 128.502860us | 125.838980us | 135.945040us | +| 2 | 100 | 1 | 60.176600ms | 152.707320us | 31.440752us | 76.353660us | 74.108735us | 80.908175us | +| 4 | 100 | 1 | 64.946200ms | 177.055370us | 22.117127us | 44.263842us | 43.459648us | 45.869915us | +| 8 | 100 | 1 | 39.920700ms | 223.416410us | 21.279384us | 27.927051us | 27.561456us | 28.754069us | +| 16 | 100 | 1 | 50.629000ms | 300.434740us | 20.991383us | 18.777171us | 18.614307us | 19.268122us | +| 32 | 100 | 1 | 64.031100ms | 429.744840us | 16.635334us | 13.429526us | 13.361237us | 13.602931us | +| 64 | 100 | 1 | 78.796300ms | 679.074240us | 17.410223us | 10.610535us | 10.573893us | 10.698411us | +| 128 | 100 | 1 | 128.199000ms | 1.166465ms | 18.035542us | 9.113009us | 9.092194us | 9.151965us | +| 256 | 100 | 1 | 228.021200ms | 2.139131ms | 26.329409us | 8.355981us | 8.337819us | 8.378249us | +| 512 | 100 | 1 | 438.860600ms | 4.180787ms | 49.397654us | 8.165600us | 8.151232us | 8.192060us | +| 1024 | 100 | 1 | 868.343600ms | 8.419260ms | 170.333623us | 8.221934us | 8.194227us | 8.261237us | +| 2048 | 100 | 1 | 1921.545200ms | 18.630270ms | 325.075330us | 9.096812us | 9.067833us | 9.130068us | +| 4096 | 100 | 1 | 4503.861800ms | 44.604228ms | 879.616446us | 10.889704us | 10.850872us | 10.935788us | ## SV-DoubleBattle-Branching-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 74.436200ms | 547.540710us | 21.418222us | 547.540710us | 544.860900us | 555.261320us | -| 2 | 100 | 1 | 92.431700ms | 804.204000us | 23.488244us | 402.102000us | 400.617495us | 406.274035us | -| 4 | 100 | 1 | 147.114900ms | 1.292180ms | 20.750304us | 323.045125us | 322.293543us | 324.523235us | -| 8 | 100 | 1 | 251.301500ms | 2.219364ms | 47.021370us | 277.420441us | 276.568575us | 279.076850us | -| 16 | 100 | 1 | 441.968600ms | 3.984548ms | 48.231591us | 249.034244us | 248.508688us | 249.708379us | -| 32 | 100 | 1 | 835.823400ms | 7.580920ms | 111.889620us | 236.903751us | 236.289645us | 237.673528us | -| 64 | 100 | 1 | 1584.264600ms | 14.954572ms | 420.149010us | 233.665182us | 232.550777us | 235.193086us | -| 128 | 100 | 1 | 3132.409300ms | 32.273753ms | 2.000884ms | 252.138699us | 249.430234us | 255.654815us | -| 256 | 100 | 1 | 6772.926000ms | 67.952725ms | 2.686514ms | 265.440332us | 263.543884us | 267.666623us | -| 512 | 100 | 1 | 15054.575000ms | 149.275330ms | 4.184362ms | 291.553379us | 290.151406us | 293.411080us | -| 1024 | 100 | 1 | 36114.722500ms | 364.654219ms | 5.886747ms | 356.107636us | 355.101059us | 357.380729us | -| 2048 | 100 | 1 | 97341.524900ms | 974.827993ms | 10.401103ms | 475.990231us | 475.063432us | 477.058001us | -| 4096 | 100 | 1 | 298084.507700ms | 2955.044937ms | 14.945097ms | 721.446518us | 720.792684us | 722.242749us | +| 1 | 100 | 1 | 77.420800ms | 538.616250us | 22.374121us | 538.616250us | 535.577570us | 545.712620us | +| 2 | 100 | 1 | 91.406000ms | 801.797390us | 37.713521us | 400.898695us | 398.498205us | 407.799430us | +| 4 | 100 | 1 | 147.023200ms | 1.295004ms | 28.753937us | 323.750878us | 322.845883us | 326.349485us | +| 8 | 100 | 1 | 242.468200ms | 2.204898ms | 32.724488us | 275.612270us | 274.976634us | 276.670583us | +| 16 | 100 | 1 | 423.975400ms | 3.957286ms | 45.821193us | 247.330376us | 246.789621us | 247.912377us | +| 32 | 100 | 1 | 791.395100ms | 7.574752ms | 137.995770us | 236.711011us | 235.962297us | 237.676825us | +| 64 | 100 | 1 | 1547.245400ms | 14.648670ms | 140.372686us | 228.885475us | 228.476145us | 229.337503us | +| 128 | 100 | 1 | 3097.441500ms | 29.746471ms | 1.073025ms | 232.394306us | 231.242081us | 235.014694us | +| 256 | 100 | 1 | 6433.310600ms | 64.112291ms | 2.796794ms | 250.438636us | 248.575919us | 252.913796us | +| 512 | 100 | 1 | 13939.146100ms | 140.707201ms | 4.329898ms | 274.818752us | 273.318227us | 276.646593us | +| 1024 | 100 | 1 | 33693.732100ms | 343.930364ms | 8.786940ms | 335.869497us | 334.329679us | 337.716550us | +| 2048 | 100 | 1 | 94802.980700ms | 901.174466ms | 20.620080ms | 440.026595us | 438.109923us | 442.077777us | +| 4096 | 100 | 1 | 262823.952200ms | 2658.770108ms | 46.514599ms | 649.113796us | 646.972525us | 651.423715us | ## SV-SingleBattle-CalcDamage-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 8.097800ms | 12.535630us | 4.630367us | 12.535630us | 11.910930us | 13.989690us | -| 2 | 100 | 1 | 8.290900ms | 14.054670us | 5.707550us | 7.027335us | 6.645450us | 7.908145us | -| 4 | 100 | 1 | 8.440800ms | 14.394400us | 4.628322us | 3.598600us | 3.437275us | 3.946117us | -| 8 | 100 | 1 | 8.852200ms | 16.573110us | 7.138636us | 2.071639us | 1.954315us | 2.379954us | -| 16 | 100 | 1 | 9.277500ms | 20.092530us | 5.449486us | 1.255783us | 1.210978us | 1.381037us | -| 32 | 100 | 1 | 10.137000ms | 27.348620us | 3.764064us | 854.644375ns | 838.421250ns | 891.509688ns | -| 64 | 100 | 1 | 11.627100ms | 40.540720us | 4.501925us | 633.448750ns | 623.608281ns | 654.533750ns | -| 128 | 100 | 1 | 14.928000ms | 68.930320us | 8.278577us | 538.518125ns | 528.476250ns | 555.166484ns | -| 256 | 100 | 1 | 20.480100ms | 115.237500us | 3.326980us | 450.146484ns | 448.228281ns | 453.799180ns | -| 512 | 100 | 1 | 37.935600ms | 217.981100us | 4.303264us | 425.744336ns | 424.463105ns | 427.979551ns | -| 1024 | 100 | 1 | 67.105100ms | 419.704440us | 6.242889us | 409.867617ns | 408.875801ns | 411.362617ns | -| 2048 | 100 | 1 | 126.345200ms | 829.973170us | 14.515039us | 405.260337ns | 404.033086ns | 406.837510ns | -| 4096 | 100 | 1 | 244.113000ms | 1.664947ms | 44.927790us | 406.481106ns | 404.637473ns | 409.048181ns | -| 8192 | 100 | 1 | 489.293800ms | 3.455005ms | 47.715887us | 421.753510ns | 420.689055ns | 422.989138ns | -| 16384 | 100 | 1 | 971.299600ms | 6.948011ms | 122.174463us | 424.072941ns | 422.743473ns | 425.701870ns | -| 32768 | 100 | 1 | 1930.765500ms | 14.181650ms | 207.675188us | 432.789622ns | 431.631286ns | 434.115164ns | -| 65536 | 100 | 1 | 3843.360000ms | 29.342387ms | 528.442115us | 447.729300ns | 446.524739ns | 449.928358ns | +| 1 | 100 | 1 | 8.276500ms | 12.651890us | 5.313266us | 12.651890us | 11.934160us | 14.379260us | +| 2 | 100 | 1 | 8.206100ms | 12.986810us | 4.547525us | 6.493405us | 6.182505us | 7.197790us | +| 4 | 100 | 1 | 8.317900ms | 13.813200us | 5.135036us | 3.453300us | 3.279930us | 3.852442us | +| 8 | 100 | 1 | 8.574100ms | 14.875640us | 3.693639us | 1.859455us | 1.799068us | 2.021166us | +| 16 | 100 | 1 | 8.960100ms | 19.764240us | 7.826123us | 1.235265us | 1.171223us | 1.404819us | +| 32 | 100 | 1 | 10.069400ms | 26.899880us | 4.492251us | 840.621250ns | 823.811563ns | 898.025313ns | +| 64 | 100 | 1 | 11.520300ms | 40.347300us | 4.807061us | 630.426563ns | 619.806250ns | 652.867188ns | +| 128 | 100 | 1 | 14.484200ms | 65.332530us | 4.065396us | 510.410391ns | 505.789453ns | 519.412422ns | +| 256 | 100 | 1 | 20.253900ms | 114.647630us | 3.433309us | 447.842305ns | 445.806836ns | 451.438242ns | +| 512 | 100 | 1 | 38.501200ms | 219.496150us | 4.924555us | 428.703418ns | 427.042285ns | 430.854219ns | +| 1024 | 100 | 1 | 67.260800ms | 414.803630us | 6.121074us | 405.081670ns | 404.209746ns | 406.771807ns | +| 2048 | 100 | 1 | 127.732000ms | 831.863710us | 11.777084us | 406.183452ns | 405.189521ns | 407.471860ns | +| 4096 | 100 | 1 | 243.851300ms | 1.666978ms | 72.683500us | 406.977166ns | 404.135833ns | 411.329080ns | +| 8192 | 100 | 1 | 496.236200ms | 3.405207ms | 58.552719us | 415.674637ns | 414.362047ns | 417.175470ns | +| 16384 | 100 | 1 | 979.702100ms | 6.853753ms | 104.525430us | 418.319899ns | 417.285983ns | 419.897458ns | +| 32768 | 100 | 1 | 1975.050500ms | 14.013684ms | 249.953184us | 427.663682ns | 426.268586ns | 429.275176ns | +| 65536 | 100 | 1 | 3956.359600ms | 29.068860ms | 396.082026us | 443.555598ns | 442.472564ns | 444.863992ns | ## SV-SingleBattle-AnalyzeEffect-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 28.729700ms | 64.254710us | 26.231178us | 64.254710us | 60.815640us | 73.084550us | -| 2 | 100 | 1 | 31.214500ms | 73.620010us | 10.946027us | 36.810005us | 36.144510us | 38.950965us | -| 4 | 100 | 1 | 17.628600ms | 97.167530us | 12.984358us | 24.291882us | 23.861925us | 25.357475us | -| 8 | 100 | 1 | 19.606000ms | 134.511610us | 13.755768us | 16.813951us | 16.618505us | 17.543525us | -| 16 | 100 | 1 | 28.303800ms | 208.570780us | 10.953827us | 13.035674us | 12.952219us | 13.295257us | -| 32 | 100 | 1 | 44.931700ms | 353.779930us | 12.973189us | 11.055623us | 11.005775us | 11.205428us | -| 64 | 100 | 1 | 74.680100ms | 618.602170us | 16.543716us | 9.665659us | 9.626067us | 9.733408us | -| 128 | 100 | 1 | 139.707300ms | 1.152202ms | 18.576272us | 9.001575us | 8.979061us | 9.039023us | -| 256 | 100 | 1 | 252.098800ms | 2.155101ms | 20.720062us | 8.418363us | 8.404075us | 8.436239us | -| 512 | 100 | 1 | 480.867800ms | 4.217645ms | 32.226962us | 8.237587us | 8.226136us | 8.250908us | -| 1024 | 100 | 1 | 940.283000ms | 8.382898ms | 161.794182us | 8.186424us | 8.161473us | 8.225700us | -| 2048 | 100 | 1 | 1969.619400ms | 16.790353ms | 317.456885us | 8.198415us | 8.173875us | 8.237502us | -| 4096 | 100 | 1 | 3796.726900ms | 35.441543ms | 2.511070ms | 8.652721us | 8.560375us | 8.815545us | -| 8192 | 100 | 1 | 9488.057400ms | 88.239158ms | 5.583961ms | 10.771382us | 10.650782us | 10.919371us | +| 1 | 100 | 1 | 21.322700ms | 60.813600us | 11.697810us | 60.813600us | 59.179780us | 64.414670us | +| 2 | 100 | 1 | 22.700500ms | 70.402990us | 10.535910us | 35.201495us | 34.584315us | 37.372155us | +| 4 | 100 | 1 | 33.136600ms | 93.842790us | 11.205625us | 23.460697us | 23.110982us | 24.490382us | +| 8 | 100 | 1 | 19.808700ms | 138.242090us | 13.088167us | 17.280261us | 17.057012us | 17.792964us | +| 16 | 100 | 1 | 27.239700ms | 202.681500us | 12.881431us | 12.667594us | 12.565491us | 12.959263us | +| 32 | 100 | 1 | 42.409500ms | 337.154990us | 9.732270us | 10.536093us | 10.495936us | 10.634966us | +| 64 | 100 | 1 | 73.001700ms | 604.866300us | 11.734980us | 9.451036us | 9.426358us | 9.510307us | +| 128 | 100 | 1 | 134.336900ms | 1.132497ms | 17.392263us | 8.847636us | 8.822417us | 8.875775us | +| 256 | 100 | 1 | 243.123200ms | 2.105413ms | 31.033874us | 8.224269us | 8.201481us | 8.249313us | +| 512 | 100 | 1 | 469.037600ms | 4.116048ms | 56.494986us | 8.039157us | 8.020881us | 8.065353us | +| 1024 | 100 | 1 | 921.180100ms | 8.151743ms | 85.869325us | 7.960687us | 7.945420us | 7.978422us | +| 2048 | 100 | 1 | 1814.414800ms | 16.689313ms | 902.700331us | 8.149079us | 8.090002us | 8.292278us | +| 4096 | 100 | 1 | 3705.283500ms | 33.614824ms | 2.059925ms | 8.206744us | 8.138901us | 8.366961us | +| 8192 | 100 | 1 | 8522.209700ms | 81.340888ms | 4.406385ms | 9.929308us | 9.837791us | 10.054261us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 34.402500ms | 88.859820us | 26.259969us | 88.859820us | 84.837340us | 95.862800us | -| 2 | 100 | 1 | 36.521400ms | 97.273210us | 26.073481us | 48.636605us | 46.612430us | 51.983225us | -| 4 | 100 | 1 | 37.846900ms | 109.384270us | 23.838461us | 27.346068us | 26.364125us | 28.751822us | -| 8 | 100 | 1 | 41.497400ms | 129.560640us | 26.218105us | 16.195080us | 15.624389us | 16.919383us | -| 16 | 100 | 1 | 48.749400ms | 173.126860us | 33.582567us | 10.820429us | 10.446288us | 11.273799us | -| 32 | 100 | 1 | 57.384300ms | 240.839560us | 45.392678us | 7.526236us | 7.268640us | 7.827727us | -| 64 | 100 | 1 | 54.869900ms | 378.036950us | 75.666421us | 5.906827us | 5.692655us | 6.160546us | -| 128 | 100 | 1 | 105.623700ms | 652.737300us | 139.372802us | 5.099510us | 4.906333us | 5.335088us | -| 256 | 100 | 1 | 262.678500ms | 1.206089ms | 278.135407us | 4.711286us | 4.521573us | 4.949696us | -| 512 | 100 | 1 | 331.707400ms | 2.426667ms | 615.061018us | 4.739584us | 4.530344us | 5.006403us | -| 1024 | 100 | 1 | 645.575700ms | 5.660656ms | 1.542319ms | 5.527985us | 5.265730us | 5.862414us | -| 2048 | 100 | 1 | 2189.925700ms | 13.029472ms | 4.078311ms | 6.362047us | 6.018094us | 6.810331us | -| 4096 | 100 | 1 | 2746.714800ms | 32.371751ms | 12.182736ms | 7.903260us | 7.385740us | 8.567566us | -| 8192 | 100 | 1 | 7405.731200ms | 88.163622ms | 40.631544ms | 10.762161us | 9.909223us | 11.888507us | +| 1 | 100 | 1 | 45.920500ms | 87.701950us | 21.473392us | 87.701950us | 84.288780us | 93.160810us | +| 2 | 100 | 1 | 47.181600ms | 94.298390us | 20.592588us | 47.149195us | 45.468115us | 49.666680us | +| 4 | 100 | 1 | 49.281200ms | 110.877080us | 21.553599us | 27.719270us | 26.763840us | 28.895855us | +| 8 | 100 | 1 | 51.307900ms | 128.963510us | 25.471131us | 16.120439us | 15.558590us | 16.819813us | +| 16 | 100 | 1 | 57.466600ms | 175.056320us | 33.132280us | 10.941020us | 10.570147us | 11.390949us | +| 32 | 100 | 1 | 65.217900ms | 245.369820us | 43.743526us | 7.667807us | 7.418040us | 7.956474us | +| 64 | 100 | 1 | 66.440900ms | 379.251750us | 75.373379us | 5.925809us | 5.713122us | 6.177883us | +| 128 | 100 | 1 | 105.430900ms | 657.861390us | 139.062854us | 5.139542us | 4.944862us | 5.375220us | +| 256 | 100 | 1 | 287.491700ms | 1.216074ms | 271.848875us | 4.750289us | 4.562518us | 4.981771us | +| 512 | 100 | 1 | 397.061600ms | 2.334539ms | 598.493552us | 4.559647us | 4.357107us | 4.822422us | +| 1024 | 100 | 1 | 778.955500ms | 5.464063ms | 1.412491ms | 5.335999us | 5.093020us | 5.637887us | +| 2048 | 100 | 1 | 2019.053100ms | 12.352510ms | 3.665902ms | 6.031499us | 5.721027us | 6.432889us | +| 4096 | 100 | 1 | 2523.960900ms | 29.956222ms | 10.520133ms | 7.313531us | 6.865223us | 7.886504us | +| 8192 | 100 | 1 | 6902.332300ms | 82.290000ms | 37.270979ms | 10.045166us | 9.260234us | 11.070335us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 35.064600ms | 88.230030us | 22.546068us | 88.230030us | 84.748510us | 93.980600us | -| 2 | 100 | 1 | 41.589500ms | 97.748980us | 22.774753us | 48.874490us | 46.987840us | 51.596940us | -| 4 | 100 | 1 | 41.839500ms | 108.060960us | 23.460596us | 27.015240us | 26.005435us | 28.348985us | -| 8 | 100 | 1 | 45.416000ms | 128.641090us | 26.299062us | 16.080136us | 15.501239us | 16.796636us | -| 16 | 100 | 1 | 50.933600ms | 167.444650us | 29.710057us | 10.465291us | 10.126631us | 10.854783us | -| 32 | 100 | 1 | 60.159700ms | 233.195150us | 44.210421us | 7.287348us | 7.037847us | 7.583797us | -| 64 | 100 | 1 | 51.061800ms | 356.522940us | 72.123889us | 5.570671us | 5.366192us | 5.812227us | -| 128 | 100 | 1 | 89.312200ms | 580.797380us | 131.293551us | 4.537480us | 4.354895us | 4.760476us | -| 256 | 100 | 1 | 154.128900ms | 1.055298ms | 262.836810us | 4.122259us | 3.941133us | 4.348115us | -| 512 | 100 | 1 | 200.881000ms | 2.067844ms | 576.071399us | 4.038758us | 3.842598us | 4.285915us | -| 1024 | 100 | 1 | 411.676300ms | 4.309335ms | 1.386320ms | 4.208335us | 3.976835us | 4.513659us | -| 2048 | 100 | 1 | 1784.312800ms | 9.926678ms | 3.805809ms | 4.847011us | 4.528070us | 5.270714us | -| 4096 | 100 | 1 | 4828.732100ms | 24.779982ms | 11.898805ms | 6.049800us | 5.556814us | 6.707496us | -| 8192 | 100 | 1 | 5372.909000ms | 68.179287ms | 39.023253ms | 8.322667us | 7.503177us | 9.400413us | +| 1 | 100 | 1 | 44.684100ms | 88.177340us | 22.498066us | 88.177340us | 84.543950us | 93.754530us | +| 2 | 100 | 1 | 47.191300ms | 98.242510us | 23.810848us | 49.121255us | 47.196155us | 52.012875us | +| 4 | 100 | 1 | 48.935600ms | 109.209250us | 22.701543us | 27.302312us | 26.333373us | 28.606897us | +| 8 | 100 | 1 | 51.141700ms | 128.663690us | 26.451065us | 16.082961us | 15.505026us | 16.821022us | +| 16 | 100 | 1 | 55.936700ms | 167.574970us | 30.844366us | 10.473436us | 10.124536us | 10.880517us | +| 32 | 100 | 1 | 41.324300ms | 242.686410us | 45.809529us | 7.583950us | 7.322801us | 7.886288us | +| 64 | 100 | 1 | 77.386200ms | 374.901070us | 80.512593us | 5.857829us | 5.632580us | 6.129778us | +| 128 | 100 | 1 | 90.685000ms | 599.756540us | 135.797439us | 4.685598us | 4.496655us | 4.914496us | +| 256 | 100 | 1 | 160.291000ms | 1.076271ms | 261.100422us | 4.204185us | 4.025375us | 4.426915us | +| 512 | 100 | 1 | 205.221400ms | 2.097630ms | 569.861419us | 4.096933us | 3.901994us | 4.345284us | +| 1024 | 100 | 1 | 449.066000ms | 4.326292ms | 1.361813ms | 4.224895us | 3.993161us | 4.522605us | +| 2048 | 100 | 1 | 1699.266300ms | 9.626779ms | 3.473577ms | 4.700576us | 4.411732us | 5.090032us | +| 4096 | 100 | 1 | 4412.994700ms | 23.432779ms | 10.355308ms | 5.720893us | 5.285411us | 6.298814us | +| 8192 | 100 | 1 | 5021.357700ms | 64.507687ms | 36.281109ms | 7.874473us | 7.112341us | 8.878120us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 36.977100ms | 87.196100us | 21.508210us | 87.196100us | 83.764590us | 92.633150us | -| 2 | 100 | 1 | 55.528000ms | 113.937330us | 27.260101us | 56.968665us | 54.866995us | 60.543760us | -| 4 | 100 | 1 | 55.988100ms | 147.778260us | 27.636221us | 36.944565us | 35.906053us | 38.842253us | -| 8 | 100 | 1 | 73.123600ms | 198.266780us | 31.477439us | 24.783348us | 24.199561us | 25.863250us | -| 16 | 100 | 1 | 84.558600ms | 268.182810us | 32.272547us | 16.761426us | 16.457561us | 17.304723us | -| 32 | 100 | 1 | 55.210200ms | 374.975870us | 23.876686us | 11.717996us | 11.593683us | 11.894465us | -| 64 | 100 | 1 | 83.701000ms | 584.733600us | 32.646091us | 9.136463us | 9.062842us | 9.282989us | -| 128 | 100 | 1 | 140.400300ms | 975.055400us | 32.328978us | 7.617620us | 7.574435us | 7.675238us | -| 256 | 100 | 1 | 235.081500ms | 1.776103ms | 65.215343us | 6.937903us | 6.893892us | 6.995008us | -| 512 | 100 | 1 | 471.288100ms | 3.851204ms | 476.413051us | 7.521882us | 7.370904us | 7.747884us | -| 1024 | 100 | 1 | 949.526600ms | 8.767654ms | 580.393459us | 8.562162us | 8.458584us | 8.681763us | -| 2048 | 100 | 1 | 2138.753200ms | 20.508774ms | 720.717457us | 10.014050us | 9.950766us | 10.089260us | -| 4096 | 100 | 1 | 5148.977500ms | 51.480044ms | 1.666440ms | 12.568370us | 12.498349us | 12.659211us | -| 8192 | 100 | 1 | 13852.212400ms | 139.780844ms | 3.775370ms | 17.063091us | 16.981966us | 17.164356us | +| 1 | 100 | 1 | 49.086900ms | 87.663330us | 19.808586us | 87.663330us | 84.548710us | 92.673210us | +| 2 | 100 | 1 | 55.908700ms | 111.250230us | 21.844369us | 55.625115us | 53.857910us | 58.279565us | +| 4 | 100 | 1 | 66.188100ms | 146.571770us | 23.313600us | 36.642942us | 35.686273us | 38.039007us | +| 8 | 100 | 1 | 76.333800ms | 197.450370us | 23.872451us | 24.681296us | 24.201246us | 25.413425us | +| 16 | 100 | 1 | 85.654800ms | 271.583770us | 46.035338us | 16.973986us | 16.582074us | 17.891085us | +| 32 | 100 | 1 | 104.051500ms | 387.551710us | 32.777247us | 12.110991us | 11.945506us | 12.359723us | +| 64 | 100 | 1 | 142.669700ms | 610.984670us | 31.467540us | 9.546635us | 9.470931us | 9.675943us | +| 128 | 100 | 1 | 189.069200ms | 1.093588ms | 109.612681us | 8.543660us | 8.416793us | 8.778389us | +| 256 | 100 | 1 | 381.653200ms | 1.881617ms | 74.107893us | 7.350066us | 7.303561us | 7.422596us | +| 512 | 100 | 1 | 690.269400ms | 4.160155ms | 532.446369us | 8.125302us | 7.952076us | 8.367465us | +| 1024 | 100 | 1 | 1016.192100ms | 9.122302ms | 534.702439us | 8.908498us | 8.813256us | 9.020354us | +| 2048 | 100 | 1 | 2201.754300ms | 21.526457ms | 947.472569us | 10.510965us | 10.432876us | 10.618299us | +| 4096 | 100 | 1 | 5302.148100ms | 52.628935ms | 1.985328ms | 12.848861us | 12.764257us | 12.956301us | +| 8192 | 100 | 1 | 13907.246500ms | 141.093253ms | 4.055788ms | 17.223297us | 17.136424us | 17.332283us | ## SV-SingleBattle-CalcDamage-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 10.969200ms | 14.152840us | 6.952964us | 14.152840us | 12.902790us | 15.663610us | -| 2 | 100 | 1 | 11.370300ms | 15.966060us | 8.273215us | 7.983030us | 7.250755us | 8.892250us | -| 4 | 100 | 1 | 12.017700ms | 18.890490us | 10.976577us | 4.722623us | 4.274312us | 5.387973us | -| 8 | 100 | 1 | 13.123100ms | 23.029480us | 12.748871us | 2.878685us | 2.607686us | 3.247680us | -| 16 | 100 | 1 | 10.094100ms | 30.947490us | 14.976584us | 1.934218us | 1.751040us | 2.117081us | -| 32 | 100 | 1 | 11.348200ms | 46.047310us | 22.241728us | 1.438978us | 1.299546us | 1.571406us | -| 64 | 100 | 1 | 19.949700ms | 85.522360us | 56.660681us | 1.336287us | 1.191811us | 1.551351us | -| 128 | 100 | 1 | 50.816900ms | 143.472720us | 77.822559us | 1.120881us | 999.582891ns | 1.238214us | -| 256 | 100 | 1 | 90.230500ms | 278.895500us | 152.232440us | 1.089436us | 971.194336ns | 1.204293us | -| 512 | 100 | 1 | 174.412300ms | 537.476430us | 316.665997us | 1.049759us | 925.532402ns | 1.168641us | -| 1024 | 100 | 1 | 341.005300ms | 1.248134ms | 722.744849us | 1.218881us | 1.078481us | 1.354589us | -| 2048 | 100 | 1 | 682.917900ms | 2.546078ms | 1.469600ms | 1.243202us | 1.098776us | 1.381982us | -| 4096 | 100 | 1 | 1427.747500ms | 5.354129ms | 3.205460ms | 1.307161us | 1.150773us | 1.457594us | -| 8192 | 100 | 1 | 2829.025200ms | 11.968152ms | 7.280256ms | 1.460956us | 1.282959us | 1.631555us | +| 1 | 100 | 1 | 10.646800ms | 13.483540us | 6.841148us | 13.483540us | 12.292880us | 15.011320us | +| 2 | 100 | 1 | 11.036900ms | 15.553950us | 8.125647us | 7.776975us | 7.049255us | 8.661620us | +| 4 | 100 | 1 | 11.689100ms | 17.094490us | 7.915867us | 4.273623us | 3.896452us | 4.673877us | +| 8 | 100 | 1 | 12.705700ms | 22.379680us | 10.740756us | 2.797460us | 2.536591us | 3.065043us | +| 16 | 100 | 1 | 10.082300ms | 30.197460us | 14.197694us | 1.887341us | 1.708842us | 2.056508us | +| 32 | 100 | 1 | 11.495000ms | 48.755440us | 30.320447us | 1.523608us | 1.363181us | 1.742565us | +| 64 | 100 | 1 | 19.887600ms | 81.837970us | 43.095413us | 1.278718us | 1.144779us | 1.408873us | +| 128 | 100 | 1 | 51.077900ms | 142.540750us | 79.380955us | 1.113600us | 990.863906ns | 1.234476us | +| 256 | 100 | 1 | 90.234600ms | 273.079890us | 150.650612us | 1.066718us | 950.041172ns | 1.180214us | +| 512 | 100 | 1 | 185.274200ms | 532.807450us | 314.265557us | 1.040640us | 917.498730ns | 1.157795us | +| 1024 | 100 | 1 | 350.920800ms | 1.202341ms | 708.683928us | 1.174161us | 1.035507us | 1.307055us | +| 2048 | 100 | 1 | 674.811200ms | 2.521488ms | 1.438271ms | 1.231195us | 1.090395us | 1.364682us | +| 4096 | 100 | 1 | 1333.687500ms | 5.296492ms | 3.092342ms | 1.293089us | 1.138989us | 1.435591us | +| 8192 | 100 | 1 | 3064.853000ms | 11.821261ms | 7.048602ms | 1.443025us | 1.271059us | 1.607539us | ## SV-SingleBattle-CalcDamage-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 11.051700ms | 14.108450us | 7.124786us | 14.108450us | 12.869780us | 15.704940us | -| 2 | 100 | 1 | 11.289300ms | 17.498440us | 5.480808us | 8.749220us | 8.353720us | 9.533440us | -| 4 | 100 | 1 | 10.927800ms | 20.464360us | 5.221275us | 5.116090us | 4.927932us | 5.488300us | -| 8 | 100 | 1 | 12.388100ms | 25.618590us | 7.680164us | 3.202324us | 3.072167us | 3.509516us | -| 16 | 100 | 1 | 12.786800ms | 32.812370us | 5.582711us | 2.050773us | 1.998950us | 2.146999us | -| 32 | 100 | 1 | 14.905300ms | 48.644130us | 6.476272us | 1.520129us | 1.488746us | 1.572514us | -| 64 | 100 | 1 | 17.301700ms | 78.716640us | 7.454745us | 1.229947us | 1.210402us | 1.257050us | -| 128 | 100 | 1 | 24.703000ms | 135.744740us | 8.419088us | 1.060506us | 1.049195us | 1.075385us | -| 256 | 100 | 1 | 37.616200ms | 253.694380us | 10.618556us | 990.993672ns | 982.990273ns | 999.317695ns | -| 512 | 100 | 1 | 43.749800ms | 487.396750us | 15.338202us | 951.946777ns | 946.213496ns | 957.950723ns | -| 1024 | 100 | 1 | 92.818400ms | 954.986410us | 21.826614us | 932.603916ns | 928.547656ns | 936.912422ns | -| 2048 | 100 | 1 | 195.137800ms | 1.890394ms | 33.548595us | 923.043945ns | 919.927202ns | 926.344419ns | -| 4096 | 100 | 1 | 388.287000ms | 3.758284ms | 53.235373us | 917.549856ns | 915.047593ns | 920.165256ns | -| 8192 | 100 | 1 | 766.900900ms | 7.506792ms | 109.267873us | 916.356432ns | 913.788928ns | 919.033979ns | +| 1 | 100 | 1 | 10.585400ms | 13.657120us | 6.737867us | 13.657120us | 12.459530us | 15.135310us | +| 2 | 100 | 1 | 11.170600ms | 16.679520us | 5.171333us | 8.339760us | 7.955650us | 9.047105us | +| 4 | 100 | 1 | 10.774200ms | 19.230180us | 4.256702us | 4.807545us | 4.661755us | 5.139230us | +| 8 | 100 | 1 | 12.000500ms | 23.987120us | 6.597564us | 2.998390us | 2.883791us | 3.255337us | +| 16 | 100 | 1 | 12.631100ms | 32.098790us | 5.110339us | 2.006174us | 1.959024us | 2.095273us | +| 32 | 100 | 1 | 14.764900ms | 47.768850us | 5.856369us | 1.492777us | 1.463317us | 1.537767us | +| 64 | 100 | 1 | 17.272800ms | 77.371570us | 6.943248us | 1.208931us | 1.190014us | 1.232955us | +| 128 | 100 | 1 | 23.181500ms | 135.250640us | 8.898299us | 1.056646us | 1.044156us | 1.071690us | +| 256 | 100 | 1 | 25.441200ms | 252.026040us | 14.098895us | 984.476719ns | 975.423359ns | 997.737539ns | +| 512 | 100 | 1 | 43.084600ms | 493.104190us | 15.101376us | 963.094121ns | 957.366309ns | 968.975762ns | +| 1024 | 100 | 1 | 94.093400ms | 962.313160us | 37.247517us | 939.758945ns | 934.615000ns | 950.496953ns | +| 2048 | 100 | 1 | 194.623000ms | 1.873805ms | 34.609932us | 914.943901ns | 911.685737ns | 918.289053ns | +| 4096 | 100 | 1 | 384.820300ms | 3.741791ms | 69.543272us | 913.523167ns | 910.450825ns | 917.099492ns | +| 8192 | 100 | 1 | 773.336200ms | 7.533772ms | 203.873072us | 919.649962ns | 915.665366ns | 925.805492ns | ## SV-SingleBattle-CalcDamage-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 10.850000ms | 14.052640us | 7.167387us | 14.052640us | 12.797300us | 15.677760us | -| 2 | 100 | 1 | 10.393300ms | 17.782080us | 6.660394us | 8.891040us | 8.451135us | 10.000420us | -| 4 | 100 | 1 | 11.645400ms | 21.431550us | 7.953447us | 5.357887us | 5.104235us | 6.058732us | -| 8 | 100 | 1 | 12.122700ms | 26.696820us | 7.511590us | 3.337102us | 3.214519us | 3.658009us | -| 16 | 100 | 1 | 14.498400ms | 37.443330us | 8.879242us | 2.340208us | 2.266691us | 2.523139us | -| 32 | 100 | 1 | 18.003000ms | 57.495800us | 5.670163us | 1.796744us | 1.767739us | 1.839161us | -| 64 | 100 | 1 | 33.048100ms | 101.082910us | 7.956743us | 1.579420us | 1.559630us | 1.610427us | -| 128 | 100 | 1 | 55.790500ms | 188.828200us | 22.723819us | 1.475220us | 1.452440us | 1.536084us | -| 256 | 100 | 1 | 97.763900ms | 371.276790us | 26.299926us | 1.450300us | 1.433564us | 1.475119us | -| 512 | 100 | 1 | 186.115700ms | 813.058770us | 128.767757us | 1.588005us | 1.543418us | 1.643601us | -| 1024 | 100 | 1 | 358.998200ms | 1.905112ms | 200.903998us | 1.860461us | 1.824065us | 1.900980us | -| 2048 | 100 | 1 | 759.394900ms | 4.117830ms | 242.004061us | 2.010659us | 1.989456us | 2.036012us | -| 4096 | 100 | 1 | 1474.877100ms | 9.181152ms | 396.557739us | 2.241492us | 2.223730us | 2.261734us | -| 8192 | 100 | 1 | 2992.611400ms | 21.050014ms | 1.108958ms | 2.569582us | 2.545772us | 2.599327us | +| 1 | 100 | 1 | 10.717000ms | 13.637700us | 7.169501us | 13.637700us | 12.399490us | 15.259480us | +| 2 | 100 | 1 | 10.191700ms | 17.511170us | 6.276989us | 8.755585us | 8.311145us | 9.686665us | +| 4 | 100 | 1 | 11.297000ms | 24.791180us | 39.072495us | 6.197795us | 5.125177us | 10.973160us | +| 8 | 100 | 1 | 12.006900ms | 25.982940us | 8.273220us | 3.247867us | 3.116005us | 3.617074us | +| 16 | 100 | 1 | 14.111600ms | 36.768360us | 9.195698us | 2.298023us | 2.222351us | 2.493099us | +| 32 | 100 | 1 | 17.806100ms | 56.514320us | 6.229850us | 1.766072us | 1.735433us | 1.815224us | +| 64 | 100 | 1 | 31.110900ms | 101.904970us | 11.226836us | 1.592265us | 1.564449us | 1.636397us | +| 128 | 100 | 1 | 54.428700ms | 184.031630us | 24.547965us | 1.437747us | 1.413441us | 1.506724us | +| 256 | 100 | 1 | 96.560500ms | 356.582030us | 27.341034us | 1.392899us | 1.377193us | 1.422496us | +| 512 | 100 | 1 | 188.925600ms | 762.707070us | 162.563964us | 1.489662us | 1.438723us | 1.568637us | +| 1024 | 100 | 1 | 360.725700ms | 1.830224ms | 166.426210us | 1.787328us | 1.758740us | 1.823312us | +| 2048 | 100 | 1 | 750.140800ms | 3.977560ms | 185.196576us | 1.942168us | 1.927102us | 1.963276us | +| 4096 | 100 | 1 | 1431.667900ms | 9.108924ms | 347.392767us | 2.223858us | 2.208992us | 2.242687us | +| 8192 | 100 | 1 | 2952.456400ms | 20.130039ms | 679.709378us | 2.457280us | 2.442747us | 2.475665us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 32.283100ms | 123.050060us | 41.814504us | 123.050060us | 113.783620us | 130.404060us | -| 2 | 100 | 1 | 39.992500ms | 172.832890us | 57.115395us | 86.416445us | 79.817355us | 91.224100us | -| 4 | 100 | 1 | 40.257300ms | 274.563160us | 91.182119us | 68.640790us | 63.323042us | 72.416715us | -| 8 | 100 | 1 | 64.848800ms | 457.867560us | 153.741525us | 57.233445us | 52.725861us | 60.417514us | -| 16 | 100 | 1 | 125.392900ms | 851.076900us | 333.734614us | 53.192306us | 48.771185us | 56.979695us | -| 32 | 100 | 1 | 191.998900ms | 1.492007ms | 527.753603us | 46.625210us | 42.741974us | 49.367825us | -| 64 | 100 | 1 | 391.446300ms | 2.882242ms | 1.022079ms | 45.035032us | 41.230430us | 47.685740us | -| 128 | 100 | 1 | 800.577500ms | 5.615974ms | 2.014146ms | 43.874794us | 40.254257us | 46.512947us | -| 256 | 100 | 1 | 1561.564100ms | 11.390426ms | 4.099653ms | 44.493851us | 40.822597us | 47.214769us | -| 512 | 100 | 1 | 3385.723600ms | 25.396418ms | 9.429669ms | 49.602379us | 45.384353us | 52.761313us | -| 1024 | 100 | 1 | 8353.375700ms | 63.825308ms | 22.969931ms | 62.329402us | 57.091517us | 66.082574us | -| 2048 | 100 | 1 | 15283.561400ms | 141.882087ms | 50.591579ms | 69.278363us | 63.467827us | 73.385970us | -| 4096 | 100 | 1 | 31089.525500ms | 293.727321ms | 104.932273ms | 71.710772us | 65.696700us | 75.995759us | +| 1 | 100 | 1 | 38.109100ms | 115.197860us | 38.639606us | 115.197860us | 106.558090us | 121.910580us | +| 2 | 100 | 1 | 45.364300ms | 168.960740us | 56.107762us | 84.480370us | 78.008290us | 89.245930us | +| 4 | 100 | 1 | 58.034000ms | 263.965870us | 87.727809us | 65.991467us | 60.858650us | 69.670102us | +| 8 | 100 | 1 | 82.845500ms | 674.234500us | 2.317527ms | 84.279313us | 54.108230us | 204.632509us | +| 16 | 100 | 1 | 120.702800ms | 785.082680us | 276.826528us | 49.067668us | 45.075183us | 51.974968us | +| 32 | 100 | 1 | 187.147600ms | 1.448678ms | 514.407748us | 45.271183us | 41.518758us | 47.941498us | +| 64 | 100 | 1 | 378.111900ms | 2.787783ms | 989.553255us | 43.559115us | 39.934512us | 46.138064us | +| 128 | 100 | 1 | 779.283500ms | 5.489406ms | 1.955473ms | 42.885986us | 39.308026us | 45.427079us | +| 256 | 100 | 1 | 1531.588400ms | 10.810205ms | 3.866743ms | 42.227364us | 38.728480us | 44.740760us | +| 512 | 100 | 1 | 3191.366200ms | 22.964107ms | 8.378531ms | 44.851772us | 41.116469us | 47.656758us | +| 1024 | 100 | 1 | 7885.793400ms | 60.018134ms | 21.867140ms | 58.611459us | 53.680299us | 62.202629us | +| 2048 | 100 | 1 | 14428.802100ms | 134.578482ms | 48.037393ms | 65.712149us | 60.188920us | 69.610431us | +| 4096 | 100 | 1 | 29932.421900ms | 281.176778ms | 100.431567ms | 68.646674us | 62.934879us | 72.751932us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 45.539500ms | 117.775190us | 41.322366us | 117.775190us | 108.564790us | 124.993020us | -| 2 | 100 | 1 | 29.295400ms | 156.464120us | 27.287248us | 78.232060us | 74.828540us | 80.436825us | -| 4 | 100 | 1 | 32.387300ms | 212.176470us | 22.651891us | 53.044117us | 51.877955us | 54.098260us | -| 8 | 100 | 1 | 44.016300ms | 312.984350us | 28.129237us | 39.123044us | 38.390898us | 39.774001us | -| 16 | 100 | 1 | 62.348600ms | 512.424420us | 40.468179us | 32.026526us | 31.535019us | 32.533203us | -| 32 | 100 | 1 | 103.006100ms | 912.697120us | 53.805699us | 28.521785us | 28.198328us | 28.859658us | -| 64 | 100 | 1 | 187.366100ms | 1.756857ms | 93.180963us | 27.450895us | 27.176722us | 27.745958us | -| 128 | 100 | 1 | 592.508700ms | 5.439960ms | 238.251577us | 42.499688us | 42.169889us | 42.901357us | -| 256 | 100 | 1 | 1202.551200ms | 11.748872ms | 345.520669us | 45.894031us | 45.629829us | 46.158949us | -| 512 | 100 | 1 | 2955.682900ms | 30.222999ms | 878.320440us | 59.029294us | 58.704231us | 59.378723us | -| 1024 | 100 | 1 | 7248.115600ms | 73.287888ms | 2.166319ms | 71.570203us | 71.170911us | 72.003403us | -| 2048 | 100 | 1 | 16697.622200ms | 174.543550ms | 4.069829ms | 85.226343us | 84.848450us | 85.627763us | -| 4096 | 100 | 1 | 39109.379000ms | 407.929813ms | 11.383833ms | 99.592240us | 99.194170us | 100.398566us | +| 1 | 100 | 1 | 37.357500ms | 115.309800us | 37.830918us | 115.309800us | 107.080590us | 121.997700us | +| 2 | 100 | 1 | 49.408900ms | 148.907540us | 26.573926us | 74.453770us | 71.218660us | 76.638595us | +| 4 | 100 | 1 | 49.385000ms | 208.105790us | 25.663220us | 52.026448us | 50.806350us | 53.340145us | +| 8 | 100 | 1 | 49.859300ms | 304.285290us | 26.865514us | 38.035661us | 37.333662us | 38.658140us | +| 16 | 100 | 1 | 69.670200ms | 492.381750us | 40.204078us | 30.773859us | 30.304268us | 31.290249us | +| 32 | 100 | 1 | 102.196600ms | 889.992660us | 54.908185us | 27.812271us | 27.478248us | 28.152106us | +| 64 | 100 | 1 | 186.175300ms | 1.727627ms | 94.302152us | 26.994175us | 26.707055us | 27.285163us | +| 128 | 100 | 1 | 569.601900ms | 5.141541ms | 195.128310us | 40.168287us | 39.891502us | 40.494046us | +| 256 | 100 | 1 | 1158.851200ms | 11.148704ms | 320.916270us | 43.549626us | 43.303201us | 43.795769us | +| 512 | 100 | 1 | 2842.409500ms | 28.605053ms | 922.317115us | 55.869243us | 55.538357us | 56.246141us | +| 1024 | 100 | 1 | 6959.032000ms | 70.917416ms | 2.125008ms | 69.255289us | 68.858903us | 69.672359us | +| 2048 | 100 | 1 | 16275.526200ms | 168.210626ms | 3.308802ms | 82.134095us | 81.816021us | 82.447981us | +| 4096 | 100 | 1 | 44130.802400ms | 395.863130ms | 14.690629ms | 96.646272us | 96.080964us | 97.557317us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 32.375100ms | 118.204980us | 40.673471us | 118.204980us | 109.404700us | 125.500300us | -| 2 | 100 | 1 | 54.325300ms | 188.845430us | 34.325085us | 94.422715us | 90.646780us | 97.473165us | -| 4 | 100 | 1 | 44.983100ms | 310.630750us | 34.869067us | 77.657687us | 75.888985us | 79.315790us | -| 8 | 100 | 1 | 85.264200ms | 541.530960us | 48.714349us | 67.691370us | 66.417709us | 68.810386us | -| 16 | 100 | 1 | 128.944200ms | 988.521820us | 67.151161us | 61.782614us | 60.931589us | 62.584334us | -| 32 | 100 | 1 | 229.910800ms | 1.844195ms | 90.315410us | 57.631088us | 57.065262us | 58.178122us | -| 64 | 100 | 1 | 454.919600ms | 3.541483ms | 145.007969us | 55.335665us | 54.874292us | 55.766661us | -| 128 | 100 | 1 | 854.568200ms | 6.757463ms | 299.364770us | 52.792681us | 52.387685us | 53.315102us | -| 256 | 100 | 1 | 1997.137900ms | 13.724253ms | 678.252344us | 53.610364us | 53.128042us | 54.173008us | -| 512 | 100 | 1 | 3870.811100ms | 32.309037ms | 2.678342ms | 63.103588us | 62.210405us | 64.294489us | -| 1024 | 100 | 1 | 8475.261800ms | 82.598629ms | 2.895838ms | 80.662723us | 80.132499us | 81.245388us | -| 2048 | 100 | 1 | 17937.639100ms | 179.809727ms | 3.531982ms | 87.797718us | 87.478108us | 88.156860us | -| 4096 | 100 | 1 | 37050.523000ms | 372.427110ms | 4.487934ms | 90.924587us | 90.720675us | 91.148332us | +| 1 | 100 | 1 | 33.421200ms | 114.530850us | 37.134811us | 114.530850us | 106.264090us | 121.009150us | +| 2 | 100 | 1 | 54.222400ms | 182.767210us | 31.606219us | 91.383605us | 87.765175us | 94.080935us | +| 4 | 100 | 1 | 44.733700ms | 305.616410us | 35.853751us | 76.404102us | 74.588845us | 78.109540us | +| 8 | 100 | 1 | 78.252600ms | 527.228890us | 52.098242us | 65.903611us | 64.583855us | 67.141010us | +| 16 | 100 | 1 | 126.897600ms | 959.936890us | 66.593326us | 59.996056us | 59.158465us | 60.792681us | +| 32 | 100 | 1 | 227.822400ms | 1.778233ms | 87.514937us | 55.569796us | 55.017744us | 56.087518us | +| 64 | 100 | 1 | 443.894500ms | 3.425548ms | 139.686009us | 53.524186us | 53.075096us | 53.932535us | +| 128 | 100 | 1 | 830.846400ms | 6.731957ms | 324.945720us | 52.593418us | 52.140874us | 53.140685us | +| 256 | 100 | 1 | 2023.144600ms | 13.192342ms | 1.670731ms | 51.532586us | 50.584520us | 53.398978us | +| 512 | 100 | 1 | 3460.695100ms | 30.330633ms | 3.038560ms | 59.239518us | 58.253075us | 60.630620us | +| 1024 | 100 | 1 | 7844.574800ms | 76.707040ms | 3.905913ms | 74.909219us | 74.239557us | 75.756451us | +| 2048 | 100 | 1 | 17085.103300ms | 171.006150ms | 4.389771ms | 83.499097us | 83.111350us | 83.950997us | +| 4096 | 100 | 1 | 34969.298200ms | 356.046660ms | 5.030564ms | 86.925454us | 86.695058us | 87.177322us | diff --git a/src/Battle/Pokemon/ManagePokemonState.cpp b/src/Battle/Pokemon/ManagePokemonState.cpp index e4e3805c..ebd64ab2 100644 --- a/src/Battle/Pokemon/ManagePokemonState.cpp +++ b/src/Battle/Pokemon/ManagePokemonState.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -315,40 +316,41 @@ void updateAllStats(Simulation& simulation) { } void updateAtk(Simulation& simulation, bool ignoreBoosts) { - internal::SelectForPokemonView selectedAtkUpdateRequired{simulation}; - if (selectedAtkUpdateRequired.hasNoneSelected()) return; + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) return; - simulation.viewForSelectedPokemon(); + filter.view(); if (!ignoreBoosts) { - simulation.viewForSelectedPokemon>(); + filter.view>(); } runModifyAtk(simulation); - simulation.registry.clear(); + filter.clearSelectionTags(); } void updateDef(Simulation& simulation, bool ignoreBoosts) { - internal::SelectForPokemonView selectedDefUpdateRequired{simulation}; - if (selectedDefUpdateRequired.hasNoneSelected()) return; + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) return; - simulation.viewForSelectedPokemon(); + filter.view(); if (!ignoreBoosts) { - simulation.viewForSelectedPokemon>(); + filter.view>(); } runModifyDef(simulation); - simulation.registry.clear(); + filter.clearSelectionTags(); } void updateSpa(Simulation& simulation, bool ignoreBoosts) { - internal::SelectForPokemonView selectedSpaUpdateRequired{simulation}; - if (selectedSpaUpdateRequired.hasNoneSelected()) return; + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) return; + + filter.view(); - simulation.viewForSelectedPokemon(); if (!ignoreBoosts) { - simulation.viewForSelectedPokemon>(); + filter.view>(); } runModifySpa(simulation); @@ -356,13 +358,13 @@ void updateSpa(Simulation& simulation, bool ignoreBoosts) { } void updateSpd(Simulation& simulation, bool ignoreBoosts) { - internal::SelectForPokemonView selectedSpdUpdateRequired{simulation}; - if (selectedSpdUpdateRequired.hasNoneSelected()) return; + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) return; - simulation.viewForSelectedPokemon(); + filter.view(); if (!ignoreBoosts) { - simulation.viewForSelectedPokemon>(); + filter.view>(); } runModifySpd(simulation); @@ -370,13 +372,13 @@ void updateSpd(Simulation& simulation, bool ignoreBoosts) { } void updateSpe(Simulation& simulation, bool ignoreBoosts) { - internal::SelectForPokemonView selectedSpeUpdateRequired{simulation}; - if (selectedSpeUpdateRequired.hasNoneSelected()) return; + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) return; - simulation.viewForSelectedPokemon(); + filter.view(); if (!ignoreBoosts) { - simulation.viewForSelectedPokemon>(); + filter.view>(); } runModifySpe(simulation); // trick room diff --git a/src/Pokedex/Events/EffectEvents.cpp b/src/Pokedex/Events/EffectEvents.cpp index 8430af30..90902df9 100644 --- a/src/Pokedex/Events/EffectEvents.cpp +++ b/src/Pokedex/Events/EffectEvents.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -83,9 +84,11 @@ void Burn::onResidual(Simulation& simulation) { void Paralysis::onModifySpe(Simulation& simulation) { const auto speedDivisor = simulation.pokedex().getStaticValue(); const auto speedDividend = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon< + simulation.view< paralysisOnModifySpeed, - Tags /*, entt::exclude_t*/>(speedDivisor, speedDividend); + Tags /*, entt::exclude_t*/>( + speedDivisor, + speedDividend); } void Paralysis::onBeforeMove(Simulation& simulation) { diff --git a/src/Pokedex/Events/ItemEvents.cpp b/src/Pokedex/Events/ItemEvents.cpp index 0ad95efc..0c533b47 100644 --- a/src/Pokedex/Events/ItemEvents.cpp +++ b/src/Pokedex/Events/ItemEvents.cpp @@ -105,9 +105,7 @@ void lifeOrbOnAfterMove( void AssaultVest::onModifySpd(Simulation& simulation) { const auto modifier = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon, Tags>( - modifier, - 1U); + simulation.view, Tags>(modifier, 1U); } void AssaultVest::onEnd(Simulation& simulation) { @@ -124,9 +122,7 @@ void BrightPowder::onModifyAccuracy(Simulation& simulation) { void ChoiceScarf::onModifySpe(Simulation& simulation) { const auto modifier = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon, Tags>( - modifier, - 1U); + simulation.view, Tags>(modifier, 1U); } void ChoiceScarf::onSourceModifyMove(Simulation& simulation) { @@ -140,9 +136,7 @@ void ChoiceScarf::onEnd(Simulation& simulation) { void ChoiceSpecs::onModifySpa(Simulation& simulation) { const auto modifier = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon, Tags>( - modifier, - 1U); + simulation.view, Tags>(modifier, 1U); } void ChoiceSpecs::onSourceModifyMove(Simulation& simulation) { diff --git a/src/Simulation/RunEvent.cpp b/src/Simulation/RunEvent.cpp index 71b1fde2..119190c2 100644 --- a/src/Simulation/RunEvent.cpp +++ b/src/Simulation/RunEvent.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -23,10 +24,8 @@ #include #include #include -#include #include #include -#include #include "Simulation.hpp" @@ -39,37 +38,6 @@ void applyEventModifier(ModifiedComponent& component, EventModifier eventModifie component.val = applyChainedModifier(component.val, eventModifier.val); } -template -internal::RegistryContainer::SelectionFunction getMoveEventPokemonSelector() { - static const size_t SelectAnyPokemon = sizeof...(PokemonSpecifiers) == 0U; - return internal::RegistryContainer::SelectionFunction{ - [](const void*, const types::registry& registry) -> types::entityVector { - entt::dense_set entities; - auto selectedMoveView = registry.view(); - auto begin = selectedMoveView.begin(); - auto end = selectedMoveView.end(); - if (selectedMoveView.empty()) { - auto anyMoveView = registry.view(); - begin = anyMoveView.begin(); - end = anyMoveView.end(); - } - - std::for_each(begin, end, [®istry, &entities](types::entity entity) { - if constexpr ( - SelectAnyPokemon || std::disjunction_v...>) { - entities.insert(registry.get(entity).val); - } - - if constexpr ( - SelectAnyPokemon || std::disjunction_v...>) { - entities.insert(registry.get(entity).val); - } - }); - - return {entities.begin(), entities.end()}; - }}; -} - void applyBasePowerEventModifier(types::handle moveHandle, BasePower basePower, EventModifier eventModifier) { calc_damage::Power& power = moveHandle.emplace(basePower.val); power.val = applyChainedModifier(power.val, eventModifier.val); @@ -184,7 +152,7 @@ void runModifyAtk(Simulation&) {} void runModifyDef(Simulation&) {} void runModifySpa(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); // Priority 1 dex::ChoiceSpecs::onModifySpa(simulation); @@ -192,25 +160,25 @@ void runModifySpa(Simulation& simulation) { // Priority 5 dex::Plus::onModifySpA(simulation); - simulation.viewForSelectedPokemon>(); + simulation.view>(); simulation.registry.clear(); } void runModifySpd(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); dex::AssaultVest::onModifySpd(simulation); - simulation.viewForSelectedPokemon>(); + simulation.view>(); simulation.registry.clear(); } void runModifySpe(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); dex::ChoiceScarf::onModifySpe(simulation); - simulation.viewForSelectedPokemon>(); + simulation.view>(); simulation.registry.clear(); dex::Paralysis::onModifySpe(simulation); From d24d1d1d5f6af5854dab1b8e828825258d4007cd Mon Sep 17 00:00:00 2001 From: aed3 <32887801+aed3@users.noreply.github.com> Date: Wed, 3 Jun 2026 10:50:26 -0500 Subject: [PATCH 4/9] ApplySideDamageRollOptions to EntityFilter Profiling showed this function was one of the biggest time sinks due to the old selection. Replacing that with the EntityFilter over doubled the speed of the 8000+ input benchmarks. --- extras/PokeSim.cpp | 70 ++--- extras/PokeSim.hpp | 6 + extras/RecentBenchmarkResults.md | 422 +++++++++++++++--------------- src/CalcDamage/CalcDamage.cpp | 72 ++--- src/Components/Tags/Selection.hpp | 1 + src/Utilities/EntityFilter.hpp | 5 + 6 files changed, 298 insertions(+), 278 deletions(-) diff --git a/extras/PokeSim.cpp b/extras/PokeSim.cpp index c84e8c32..ac5a8375 100644 --- a/extras/PokeSim.cpp +++ b/extras/PokeSim.cpp @@ -4820,8 +4820,8 @@ void applySideDamageRollOptions(Simulation& simulation) { isSimulateTurn || isCalculateDamage || isAnalyzeEffect, "Using a type that isn't a valid simulation tag."); - pokesim::internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) { + pokesim::internal::EntityFilter moveFilter{simulation}; + if (moveFilter.hasNoneSelected()) { return; } @@ -4846,51 +4846,50 @@ void applySideDamageRollOptions(Simulation& simulation) { } if (damageRollOptions.sidesMatch()) { + moveFilter.template addToSelected(); if constexpr (onlyPassDamageRoll) { ApplyDamageRollKind(simulation, damageRollOptions.getP1()); } else { ApplyDamageRollKind(simulation, damageRollOptions.getP1(), calculateUpToFoeHp, noKoChanceCalculation); } + simulation.registry.clear(); } else { - simulation.viewForSelectedMoves(); - pokesim::internal::SelectForCurrentActionMoveView p1DefendingMoves{simulation}; - if (!p1DefendingMoves.hasNoneSelected()) { - if constexpr (onlyPassDamageRoll) { - ApplyDamageRollKind(simulation, damageRollOptions.getP1()); - } - else { - ApplyDamageRollKind(simulation, damageRollOptions.getP1(), calculateUpToFoeHp, noKoChanceCalculation); - } + moveFilter.template view(); + + simulation.addToEntities(); + if constexpr (onlyPassDamageRoll) { + ApplyDamageRollKind(simulation, damageRollOptions.getP1()); + } + else { + ApplyDamageRollKind(simulation, damageRollOptions.getP1(), calculateUpToFoeHp, noKoChanceCalculation); } - p1DefendingMoves.deselect(); + simulation.registry.clear(); - pokesim::internal::SelectForCurrentActionMoveView p2DefendingMoves{simulation}; - if (!p2DefendingMoves.hasNoneSelected()) { - if constexpr (onlyPassDamageRoll) { - ApplyDamageRollKind(simulation, damageRollOptions.getP2()); - } - else { - ApplyDamageRollKind(simulation, damageRollOptions.getP2(), calculateUpToFoeHp, noKoChanceCalculation); - } + simulation.addToEntities(); + if constexpr (onlyPassDamageRoll) { + ApplyDamageRollKind(simulation, damageRollOptions.getP2()); + } + else { + ApplyDamageRollKind(simulation, damageRollOptions.getP2(), calculateUpToFoeHp, noKoChanceCalculation); } - simulation.registry.clear(); + simulation.registry.clear(); } } template void setIfMoveCrits(Simulation& simulation, DamageRollKind damageRollKind) { if (damageRollKind & DamageRollKind::GUARANTEED_CRIT_CHANCE) { - simulation.addToEntities(); + simulation.addToEntities(); return; } if constexpr (std::is_same_v) { - simulation.addToEntities(); + simulation.addToEntities(); runModifyCritBoostEvent(simulation); - simulation.viewForSelectedMoves( + simulation.view( simulation.pokedex().getStaticValue()); simulation.registry.clear(); @@ -4909,37 +4908,42 @@ void applyDamageRollsAndModifiers( damageRollKind != DamageRollKind::GUARANTEED_CRIT_CHANCE, "Must pick a damage roll kind to go along with crits."); - simulation.addToEntities(); + pokesim::internal::EntityFilter moveFilter{simulation}; + if (moveFilter.hasNoneSelected()) { + return; + } + + simulation.addToEntities(); if (damageRollKind & DamageRollKind::ALL_DAMAGE_ROLLS) { - simulation.viewForSelectedMoves(simulation.pokedex()); + moveFilter.view(simulation.pokedex()); } else { if (damageRollKind & DamageRollKind::MAX_DAMAGE) { - simulation.viewForSelectedMoves(simulation.pokedex()); + moveFilter.view(simulation.pokedex()); } if (damageRollKind & DamageRollKind::AVERAGE_DAMAGE) { - simulation.viewForSelectedMoves(simulation.pokedex()); + moveFilter.view(simulation.pokedex()); } if (damageRollKind & DamageRollKind::MIN_DAMAGE) { - simulation.viewForSelectedMoves(simulation.pokedex()); + moveFilter.view(simulation.pokedex()); } } if constexpr (std::is_same_v) { if (calculateUpToFoeHp) { - simulation.viewForSelectedMoves(); + moveFilter.view(); } simulate_turn::cloneFromDamageRolls(simulation, damageRollKind); } else { - simulation.viewForSelectedMoves(simulation.pokedex()); + moveFilter.view(simulation.pokedex()); if (calculateUpToFoeHp) { - simulation.viewForSelectedMoves(); + moveFilter.view(); } if (!noKoChanceCalculation && damageRollKind & DamageRollKind::ALL_DAMAGE_ROLLS) { - simulation.viewForSelectedMoves>(); + moveFilter.view>(); } } } diff --git a/extras/PokeSim.hpp b/extras/PokeSim.hpp index 77ac01d1..95c1a46e 100644 --- a/extras/PokeSim.hpp +++ b/extras/PokeSim.hpp @@ -19851,6 +19851,7 @@ struct SelectedForViewMove {}; namespace pokesim::internal::tags { struct CloneFromDamageRolls {}; +struct ApplySideDamageRollOptions {}; } // namespace pokesim::internal::tags /////////////////// END OF src/Components/Tags/Selection.hpp /////////////////// @@ -24874,6 +24875,11 @@ struct EntityFilter { void clearSelectionTags() { simulation->registry.clear(); } + template + void addToSelected(const Args&... args) { + simulation->addToEntities(args...); + } + private: Simulation* simulation = nullptr; }; diff --git a/extras/RecentBenchmarkResults.md b/extras/RecentBenchmarkResults.md index 2a202b73..5acd2ffc 100644 --- a/extras/RecentBenchmarkResults.md +++ b/extras/RecentBenchmarkResults.md @@ -7,286 +7,286 @@ ## SV-SingleBattle-MonteCarlo-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 44.949700ms | 82.454840us | 16.805018us | 82.454840us | 80.332020us | 88.476220us | -| 2 | 100 | 1 | 48.102900ms | 92.669610us | 17.856383us | 46.334805us | 45.123100us | 49.190095us | -| 4 | 100 | 1 | 49.738200ms | 108.680700us | 19.534366us | 27.170175us | 26.531635us | 28.810833us | -| 8 | 100 | 1 | 53.614600ms | 130.007600us | 16.435167us | 16.250950us | 15.975843us | 16.911389us | -| 16 | 100 | 1 | 59.710800ms | 176.470140us | 18.150932us | 11.029384us | 10.873152us | 11.381642us | -| 32 | 100 | 1 | 67.998000ms | 251.079970us | 20.916279us | 7.846249us | 7.759202us | 8.068400us | -| 64 | 100 | 1 | 82.617000ms | 389.795670us | 16.537765us | 6.090557us | 6.052196us | 6.162008us | -| 128 | 100 | 1 | 84.151600ms | 656.268470us | 15.428045us | 5.127097us | 5.111132us | 5.166813us | -| 256 | 100 | 1 | 143.112200ms | 1.211272ms | 16.973018us | 4.731530us | 4.719806us | 4.746077us | -| 512 | 100 | 1 | 242.711200ms | 2.326441ms | 29.528017us | 4.543829us | 4.533634us | 4.556480us | -| 1024 | 100 | 1 | 508.218000ms | 4.933815ms | 48.634230us | 4.818178us | 4.808948us | 4.827558us | -| 2048 | 100 | 1 | 1181.192600ms | 11.442650ms | 158.829357us | 5.587232us | 5.572471us | 5.602940us | -| 4096 | 100 | 1 | 2968.831600ms | 29.589144ms | 386.415335us | 7.223912us | 7.207483us | 7.244757us | -| 8192 | 100 | 1 | 9241.632700ms | 89.245406ms | 2.398857ms | 10.894215us | 10.839006us | 10.954157us | -| 16384 | 100 | 1 | 30737.935400ms | 297.318680ms | 8.777764ms | 18.146892us | 18.042286us | 18.251080us | -| 32768 | 100 | 1 | 102308.144300ms | 1034.819603ms | 30.540078ms | 31.580188us | 31.402077us | 31.766599us | -| 65536 | 100 | 1 | 369333.846000ms | 3798.355673ms | 87.562000ms | 57.958308us | 57.705409us | 58.229502us | +| 1 | 100 | 1 | 45.314300ms | 79.295320us | 11.343534us | 79.295320us | 77.767320us | 82.973330us | +| 2 | 100 | 1 | 48.620600ms | 92.462290us | 15.206491us | 46.231145us | 45.045545us | 48.176640us | +| 4 | 100 | 1 | 49.831900ms | 103.594010us | 11.226841us | 25.898502us | 25.514680us | 26.764730us | +| 8 | 100 | 1 | 53.443600ms | 128.597880us | 15.822917us | 16.074735us | 15.779803us | 16.615455us | +| 16 | 100 | 1 | 59.213800ms | 173.385590us | 18.200670us | 10.836599us | 10.683481us | 11.206371us | +| 32 | 100 | 1 | 66.213300ms | 240.626100us | 12.077856us | 7.519566us | 7.467072us | 7.635835us | +| 64 | 100 | 1 | 82.737700ms | 372.640920us | 11.040805us | 5.822514us | 5.800824us | 5.883124us | +| 128 | 100 | 1 | 110.627100ms | 636.838280us | 29.291109us | 4.975299us | 4.947349us | 5.065579us | +| 256 | 100 | 1 | 163.975700ms | 1.141664ms | 15.423379us | 4.459625us | 4.448014us | 4.471778us | +| 512 | 100 | 1 | 237.292400ms | 2.172108ms | 30.788183us | 4.242399us | 4.231237us | 4.254927us | +| 1024 | 100 | 1 | 449.435400ms | 4.319955ms | 49.196584us | 4.218706us | 4.210119us | 4.229086us | +| 2048 | 100 | 1 | 956.748400ms | 9.126239ms | 126.304234us | 4.456172us | 4.445615us | 4.470087us | +| 4096 | 100 | 1 | 2091.659600ms | 20.320105ms | 242.745646us | 4.960963us | 4.950295us | 4.973581us | +| 8192 | 100 | 1 | 5012.525300ms | 50.293118ms | 856.932790us | 6.139297us | 6.119837us | 6.161111us | +| 16384 | 100 | 1 | 14250.474300ms | 140.107734ms | 3.111135ms | 8.551497us | 8.513605us | 8.588225us | +| 32768 | 100 | 1 | 41441.077300ms | 430.155516ms | 11.626548ms | 13.127305us | 13.056813us | 13.195978us | +| 65536 | 100 | 1 | 147444.607400ms | 1449.631127ms | 44.489820ms | 22.119616us | 21.986110us | 22.251426us | ## SV-SingleBattle-Branching-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 67.466400ms | 234.259630us | 20.507633us | 234.259630us | 231.524910us | 240.941540us | -| 2 | 100 | 1 | 43.383300ms | 319.507910us | 20.790627us | 159.753955us | 158.416205us | 163.383715us | -| 4 | 100 | 1 | 57.292300ms | 467.376800us | 21.653320us | 116.844200us | 116.172337us | 118.866492us | -| 8 | 100 | 1 | 88.864800ms | 757.146950us | 22.436148us | 94.643369us | 94.306354us | 95.728706us | -| 16 | 100 | 1 | 147.887500ms | 1.281822ms | 23.139515us | 80.113897us | 79.904029us | 80.525848us | -| 32 | 100 | 1 | 266.587500ms | 2.342120ms | 24.624954us | 73.191264us | 73.069314us | 73.384363us | -| 64 | 100 | 1 | 484.355300ms | 4.405063ms | 43.134299us | 68.829106us | 68.709386us | 68.975940us | -| 128 | 100 | 1 | 918.028200ms | 8.627047ms | 84.396876us | 67.398803us | 67.277661us | 67.538570us | -| 256 | 100 | 1 | 1791.143500ms | 17.663738ms | 817.171607us | 68.998976us | 68.497363us | 69.802561us | -| 512 | 100 | 1 | 3593.165800ms | 35.169791ms | 1.074326ms | 68.690998us | 68.333416us | 69.169627us | -| 1024 | 100 | 1 | 7908.787700ms | 76.332704ms | 2.744726ms | 74.543656us | 74.154001us | 75.300690us | -| 2048 | 100 | 1 | 18408.110000ms | 183.707434ms | 5.372513ms | 89.700895us | 89.227073us | 90.264963us | -| 4096 | 100 | 1 | 49519.233700ms | 498.808455ms | 11.634415ms | 121.779408us | 121.250449us | 122.372179us | -| 8192 | 100 | 1 | 142572.075700ms | 1455.618120ms | 27.678121ms | 177.687759us | 177.044568us | 178.368765us | +| 1 | 100 | 1 | 67.188000ms | 236.576080us | 14.580504us | 236.576080us | 234.389940us | 240.513580us | +| 2 | 100 | 1 | 42.587600ms | 316.481310us | 12.583012us | 158.240655us | 157.340105us | 160.084645us | +| 4 | 100 | 1 | 55.938600ms | 463.307720us | 16.245037us | 115.826930us | 115.294893us | 117.191637us | +| 8 | 100 | 1 | 86.959500ms | 754.058240us | 21.219256us | 94.257280us | 93.880531us | 95.037594us | +| 16 | 100 | 1 | 141.548100ms | 1.271032ms | 23.176321us | 79.439493us | 79.195451us | 79.776112us | +| 32 | 100 | 1 | 250.907400ms | 2.287061ms | 15.882690us | 71.470657us | 71.383674us | 71.580119us | +| 64 | 100 | 1 | 474.161500ms | 4.336383ms | 55.230949us | 67.755986us | 67.609642us | 67.954396us | +| 128 | 100 | 1 | 885.544000ms | 8.297026ms | 67.898468us | 64.820520us | 64.731403us | 64.941942us | +| 256 | 100 | 1 | 1711.784300ms | 16.420812ms | 181.708188us | 64.143796us | 64.017675us | 64.296227us | +| 512 | 100 | 1 | 3284.941200ms | 32.059684ms | 323.298335us | 62.616569us | 62.504598us | 62.754634us | +| 1024 | 100 | 1 | 6744.468900ms | 66.915987ms | 796.253206us | 65.347644us | 65.209204us | 65.515625us | +| 2048 | 100 | 1 | 15145.233600ms | 151.136658ms | 3.808748ms | 73.797196us | 73.530353us | 74.339911us | +| 4096 | 100 | 1 | 38393.538200ms | 379.160267ms | 2.867756ms | 92.568425us | 92.435182us | 92.709433us | +| 8192 | 100 | 1 | 104039.365500ms | 1037.387131ms | 7.044688ms | 126.634171us | 126.467643us | 126.805946us | ## SV-DoubleBattle-MonteCarlo-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 57.338200ms | 128.502860us | 20.951052us | 128.502860us | 125.838980us | 135.945040us | -| 2 | 100 | 1 | 60.176600ms | 152.707320us | 31.440752us | 76.353660us | 74.108735us | 80.908175us | -| 4 | 100 | 1 | 64.946200ms | 177.055370us | 22.117127us | 44.263842us | 43.459648us | 45.869915us | -| 8 | 100 | 1 | 39.920700ms | 223.416410us | 21.279384us | 27.927051us | 27.561456us | 28.754069us | -| 16 | 100 | 1 | 50.629000ms | 300.434740us | 20.991383us | 18.777171us | 18.614307us | 19.268122us | -| 32 | 100 | 1 | 64.031100ms | 429.744840us | 16.635334us | 13.429526us | 13.361237us | 13.602931us | -| 64 | 100 | 1 | 78.796300ms | 679.074240us | 17.410223us | 10.610535us | 10.573893us | 10.698411us | -| 128 | 100 | 1 | 128.199000ms | 1.166465ms | 18.035542us | 9.113009us | 9.092194us | 9.151965us | -| 256 | 100 | 1 | 228.021200ms | 2.139131ms | 26.329409us | 8.355981us | 8.337819us | 8.378249us | -| 512 | 100 | 1 | 438.860600ms | 4.180787ms | 49.397654us | 8.165600us | 8.151232us | 8.192060us | -| 1024 | 100 | 1 | 868.343600ms | 8.419260ms | 170.333623us | 8.221934us | 8.194227us | 8.261237us | -| 2048 | 100 | 1 | 1921.545200ms | 18.630270ms | 325.075330us | 9.096812us | 9.067833us | 9.130068us | -| 4096 | 100 | 1 | 4503.861800ms | 44.604228ms | 879.616446us | 10.889704us | 10.850872us | 10.935788us | +| 1 | 100 | 1 | 59.646500ms | 121.401160us | 18.665405us | 121.401160us | 118.962220us | 127.707110us | +| 2 | 100 | 1 | 60.200600ms | 149.374150us | 19.334607us | 74.687075us | 73.334990us | 77.607850us | +| 4 | 100 | 1 | 63.452400ms | 177.463490us | 24.503051us | 44.365872us | 43.435800us | 45.990398us | +| 8 | 100 | 1 | 69.066700ms | 217.012110us | 23.649069us | 27.126514us | 26.700563us | 27.983929us | +| 16 | 100 | 1 | 47.811100ms | 294.277390us | 12.232093us | 18.392337us | 18.291971us | 18.645361us | +| 32 | 100 | 1 | 61.211100ms | 421.563470us | 13.008306us | 13.173858us | 13.122542us | 13.314831us | +| 64 | 100 | 1 | 88.021200ms | 664.400140us | 12.117095us | 10.381252us | 10.358080us | 10.452906us | +| 128 | 100 | 1 | 126.152600ms | 1.144099ms | 17.398984us | 8.938272us | 8.916912us | 8.972928us | +| 256 | 100 | 1 | 222.203100ms | 2.085685ms | 13.205739us | 8.147208us | 8.138963us | 8.159933us | +| 512 | 100 | 1 | 419.512600ms | 3.998429ms | 42.642825us | 7.809432us | 7.795057us | 7.828327us | +| 1024 | 100 | 1 | 825.713400ms | 7.851240ms | 99.104491us | 7.667227us | 7.650281us | 7.688702us | +| 2048 | 100 | 1 | 1680.246700ms | 16.298925ms | 194.335205us | 7.958460us | 7.941612us | 7.978983us | +| 4096 | 100 | 1 | 3594.440100ms | 35.468897ms | 411.953820us | 8.659399us | 8.641120us | 8.680645us | ## SV-DoubleBattle-Branching-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 77.420800ms | 538.616250us | 22.374121us | 538.616250us | 535.577570us | 545.712620us | -| 2 | 100 | 1 | 91.406000ms | 801.797390us | 37.713521us | 400.898695us | 398.498205us | 407.799430us | -| 4 | 100 | 1 | 147.023200ms | 1.295004ms | 28.753937us | 323.750878us | 322.845883us | 326.349485us | -| 8 | 100 | 1 | 242.468200ms | 2.204898ms | 32.724488us | 275.612270us | 274.976634us | 276.670583us | -| 16 | 100 | 1 | 423.975400ms | 3.957286ms | 45.821193us | 247.330376us | 246.789621us | 247.912377us | -| 32 | 100 | 1 | 791.395100ms | 7.574752ms | 137.995770us | 236.711011us | 235.962297us | 237.676825us | -| 64 | 100 | 1 | 1547.245400ms | 14.648670ms | 140.372686us | 228.885475us | 228.476145us | 229.337503us | -| 128 | 100 | 1 | 3097.441500ms | 29.746471ms | 1.073025ms | 232.394306us | 231.242081us | 235.014694us | -| 256 | 100 | 1 | 6433.310600ms | 64.112291ms | 2.796794ms | 250.438636us | 248.575919us | 252.913796us | -| 512 | 100 | 1 | 13939.146100ms | 140.707201ms | 4.329898ms | 274.818752us | 273.318227us | 276.646593us | -| 1024 | 100 | 1 | 33693.732100ms | 343.930364ms | 8.786940ms | 335.869497us | 334.329679us | 337.716550us | -| 2048 | 100 | 1 | 94802.980700ms | 901.174466ms | 20.620080ms | 440.026595us | 438.109923us | 442.077777us | -| 4096 | 100 | 1 | 262823.952200ms | 2658.770108ms | 46.514599ms | 649.113796us | 646.972525us | 651.423715us | +| 1 | 100 | 1 | 74.018200ms | 525.216350us | 14.077858us | 525.216350us | 523.492610us | 530.612500us | +| 2 | 100 | 1 | 89.013500ms | 787.208040us | 18.036879us | 393.604020us | 392.406950us | 396.585720us | +| 4 | 100 | 1 | 141.186000ms | 1.270016ms | 19.882145us | 317.503965us | 316.586343us | 318.535675us | +| 8 | 100 | 1 | 237.071500ms | 2.156659ms | 9.889668us | 269.582320us | 269.382502us | 269.886241us | +| 16 | 100 | 1 | 420.346000ms | 3.896473ms | 46.591252us | 243.529574us | 242.993384us | 244.143313us | +| 32 | 100 | 1 | 784.548000ms | 7.332147ms | 85.296712us | 229.129606us | 228.656854us | 229.701655us | +| 64 | 100 | 1 | 1458.860600ms | 14.020110ms | 136.057216us | 219.064225us | 218.683776us | 219.522960us | +| 128 | 100 | 1 | 2848.971800ms | 27.459640ms | 281.417326us | 214.528435us | 214.140466us | 215.011291us | +| 256 | 100 | 1 | 5652.537500ms | 55.405452ms | 705.913127us | 216.427545us | 215.953759us | 217.053168us | +| 512 | 100 | 1 | 11378.630700ms | 113.776427ms | 1.525825ms | 222.219584us | 221.720452us | 222.911750us | +| 1024 | 100 | 1 | 24534.720800ms | 247.145988ms | 1.859332ms | 241.353504us | 241.006992us | 241.720519us | +| 2048 | 100 | 1 | 55511.206400ms | 555.937492ms | 2.427185ms | 271.453853us | 271.247068us | 271.714519us | +| 4096 | 100 | 1 | 135872.299500ms | 1369.523267ms | 15.831077ms | 334.356266us | 333.709409us | 335.257108us | ## SV-SingleBattle-CalcDamage-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 8.276500ms | 12.651890us | 5.313266us | 12.651890us | 11.934160us | 14.379260us | -| 2 | 100 | 1 | 8.206100ms | 12.986810us | 4.547525us | 6.493405us | 6.182505us | 7.197790us | -| 4 | 100 | 1 | 8.317900ms | 13.813200us | 5.135036us | 3.453300us | 3.279930us | 3.852442us | -| 8 | 100 | 1 | 8.574100ms | 14.875640us | 3.693639us | 1.859455us | 1.799068us | 2.021166us | -| 16 | 100 | 1 | 8.960100ms | 19.764240us | 7.826123us | 1.235265us | 1.171223us | 1.404819us | -| 32 | 100 | 1 | 10.069400ms | 26.899880us | 4.492251us | 840.621250ns | 823.811563ns | 898.025313ns | -| 64 | 100 | 1 | 11.520300ms | 40.347300us | 4.807061us | 630.426563ns | 619.806250ns | 652.867188ns | -| 128 | 100 | 1 | 14.484200ms | 65.332530us | 4.065396us | 510.410391ns | 505.789453ns | 519.412422ns | -| 256 | 100 | 1 | 20.253900ms | 114.647630us | 3.433309us | 447.842305ns | 445.806836ns | 451.438242ns | -| 512 | 100 | 1 | 38.501200ms | 219.496150us | 4.924555us | 428.703418ns | 427.042285ns | 430.854219ns | -| 1024 | 100 | 1 | 67.260800ms | 414.803630us | 6.121074us | 405.081670ns | 404.209746ns | 406.771807ns | -| 2048 | 100 | 1 | 127.732000ms | 831.863710us | 11.777084us | 406.183452ns | 405.189521ns | 407.471860ns | -| 4096 | 100 | 1 | 243.851300ms | 1.666978ms | 72.683500us | 406.977166ns | 404.135833ns | 411.329080ns | -| 8192 | 100 | 1 | 496.236200ms | 3.405207ms | 58.552719us | 415.674637ns | 414.362047ns | 417.175470ns | -| 16384 | 100 | 1 | 979.702100ms | 6.853753ms | 104.525430us | 418.319899ns | 417.285983ns | 419.897458ns | -| 32768 | 100 | 1 | 1975.050500ms | 14.013684ms | 249.953184us | 427.663682ns | 426.268586ns | 429.275176ns | -| 65536 | 100 | 1 | 3956.359600ms | 29.068860ms | 396.082026us | 443.555598ns | 442.472564ns | 444.863992ns | +| 1 | 100 | 1 | 9.123400ms | 12.194620us | 4.323483us | 12.194620us | 11.611140us | 13.573120us | +| 2 | 100 | 1 | 9.405700ms | 14.174940us | 4.965322us | 7.087470us | 6.739085us | 7.836795us | +| 4 | 100 | 1 | 9.539300ms | 15.034900us | 5.283975us | 3.758725us | 3.569545us | 4.147300us | +| 8 | 100 | 1 | 9.779900ms | 15.783310us | 2.981567us | 1.972914us | 1.917061us | 2.074313us | +| 16 | 100 | 1 | 10.297600ms | 20.038440us | 4.217041us | 1.252402us | 1.215919us | 1.334731us | +| 32 | 100 | 1 | 11.072800ms | 27.005760us | 2.785460us | 843.930000ns | 831.071250ns | 867.853438ns | +| 64 | 100 | 1 | 12.536000ms | 39.237300us | 5.612672us | 613.082813ns | 600.835312ns | 639.497187ns | +| 128 | 100 | 1 | 15.450700ms | 63.202130us | 5.978875us | 493.766641ns | 487.445625ns | 509.000000ns | +| 256 | 100 | 1 | 21.307500ms | 110.963760us | 3.430843us | 433.452187ns | 431.057344ns | 436.331484ns | +| 512 | 100 | 1 | 39.518800ms | 206.846610us | 5.798504us | 403.997285ns | 402.048906ns | 406.548984ns | +| 1024 | 100 | 1 | 67.856200ms | 396.362320us | 7.379558us | 387.072578ns | 385.853916ns | 388.745654ns | +| 2048 | 100 | 1 | 127.362300ms | 770.373380us | 13.082051us | 376.158877ns | 375.185020ns | 377.847305ns | +| 4096 | 100 | 1 | 214.908600ms | 1.519471ms | 20.745457us | 370.964539ns | 370.075635ns | 372.089609ns | +| 8192 | 100 | 1 | 490.773100ms | 3.213016ms | 79.269001us | 392.213895ns | 390.486979ns | 394.301458ns | +| 16384 | 100 | 1 | 964.034700ms | 6.508262ms | 77.505374us | 397.232786ns | 396.388889ns | 398.260826ns | +| 32768 | 100 | 1 | 1943.858800ms | 13.307367ms | 342.288684us | 406.108598ns | 404.509446ns | 408.849981ns | +| 65536 | 100 | 1 | 3912.511100ms | 27.390763ms | 405.744858us | 417.949870ns | 416.946959ns | 419.439677ns | ## SV-SingleBattle-AnalyzeEffect-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 21.322700ms | 60.813600us | 11.697810us | 60.813600us | 59.179780us | 64.414670us | -| 2 | 100 | 1 | 22.700500ms | 70.402990us | 10.535910us | 35.201495us | 34.584315us | 37.372155us | -| 4 | 100 | 1 | 33.136600ms | 93.842790us | 11.205625us | 23.460697us | 23.110982us | 24.490382us | -| 8 | 100 | 1 | 19.808700ms | 138.242090us | 13.088167us | 17.280261us | 17.057012us | 17.792964us | -| 16 | 100 | 1 | 27.239700ms | 202.681500us | 12.881431us | 12.667594us | 12.565491us | 12.959263us | -| 32 | 100 | 1 | 42.409500ms | 337.154990us | 9.732270us | 10.536093us | 10.495936us | 10.634966us | -| 64 | 100 | 1 | 73.001700ms | 604.866300us | 11.734980us | 9.451036us | 9.426358us | 9.510307us | -| 128 | 100 | 1 | 134.336900ms | 1.132497ms | 17.392263us | 8.847636us | 8.822417us | 8.875775us | -| 256 | 100 | 1 | 243.123200ms | 2.105413ms | 31.033874us | 8.224269us | 8.201481us | 8.249313us | -| 512 | 100 | 1 | 469.037600ms | 4.116048ms | 56.494986us | 8.039157us | 8.020881us | 8.065353us | -| 1024 | 100 | 1 | 921.180100ms | 8.151743ms | 85.869325us | 7.960687us | 7.945420us | 7.978422us | -| 2048 | 100 | 1 | 1814.414800ms | 16.689313ms | 902.700331us | 8.149079us | 8.090002us | 8.292278us | -| 4096 | 100 | 1 | 3705.283500ms | 33.614824ms | 2.059925ms | 8.206744us | 8.138901us | 8.366961us | -| 8192 | 100 | 1 | 8522.209700ms | 81.340888ms | 4.406385ms | 9.929308us | 9.837791us | 10.054261us | +| 1 | 100 | 1 | 28.392300ms | 59.671590us | 10.904096us | 59.671590us | 58.390880us | 64.155750us | +| 2 | 100 | 1 | 30.458200ms | 70.570860us | 11.396619us | 35.285430us | 34.544185us | 37.282010us | +| 4 | 100 | 1 | 34.626700ms | 97.856090us | 13.430807us | 24.464022us | 24.043993us | 25.717188us | +| 8 | 100 | 1 | 21.254100ms | 131.764980us | 11.816756us | 16.470623us | 16.288770us | 17.027611us | +| 16 | 100 | 1 | 26.751400ms | 207.257750us | 23.573236us | 12.953609us | 12.760914us | 13.476947us | +| 32 | 100 | 1 | 42.332500ms | 343.716180us | 11.258859us | 10.741131us | 10.688969us | 10.838876us | +| 64 | 100 | 1 | 73.499300ms | 610.961130us | 14.187271us | 9.546268us | 9.507779us | 9.595822us | +| 128 | 100 | 1 | 133.245400ms | 1.129385ms | 15.356708us | 8.823319us | 8.803022us | 8.851097us | +| 256 | 100 | 1 | 244.058100ms | 2.136046ms | 25.333237us | 8.343931us | 8.328747us | 8.369920us | +| 512 | 100 | 1 | 467.665600ms | 4.138008ms | 44.674628us | 8.082047us | 8.066375us | 8.100877us | +| 1024 | 100 | 1 | 939.639800ms | 8.181446ms | 102.106135us | 7.989693us | 7.972043us | 8.011590us | +| 2048 | 100 | 1 | 1804.045000ms | 16.197987ms | 175.924811us | 7.909174us | 7.894771us | 7.929197us | +| 4096 | 100 | 1 | 3687.274400ms | 33.166555ms | 638.602762us | 8.097303us | 8.071121us | 8.133550us | +| 8192 | 100 | 1 | 8171.172100ms | 76.046720ms | 1.747123ms | 9.283047us | 9.249000us | 9.335619us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 45.920500ms | 87.701950us | 21.473392us | 87.701950us | 84.288780us | 93.160810us | -| 2 | 100 | 1 | 47.181600ms | 94.298390us | 20.592588us | 47.149195us | 45.468115us | 49.666680us | -| 4 | 100 | 1 | 49.281200ms | 110.877080us | 21.553599us | 27.719270us | 26.763840us | 28.895855us | -| 8 | 100 | 1 | 51.307900ms | 128.963510us | 25.471131us | 16.120439us | 15.558590us | 16.819813us | -| 16 | 100 | 1 | 57.466600ms | 175.056320us | 33.132280us | 10.941020us | 10.570147us | 11.390949us | -| 32 | 100 | 1 | 65.217900ms | 245.369820us | 43.743526us | 7.667807us | 7.418040us | 7.956474us | -| 64 | 100 | 1 | 66.440900ms | 379.251750us | 75.373379us | 5.925809us | 5.713122us | 6.177883us | -| 128 | 100 | 1 | 105.430900ms | 657.861390us | 139.062854us | 5.139542us | 4.944862us | 5.375220us | -| 256 | 100 | 1 | 287.491700ms | 1.216074ms | 271.848875us | 4.750289us | 4.562518us | 4.981771us | -| 512 | 100 | 1 | 397.061600ms | 2.334539ms | 598.493552us | 4.559647us | 4.357107us | 4.822422us | -| 1024 | 100 | 1 | 778.955500ms | 5.464063ms | 1.412491ms | 5.335999us | 5.093020us | 5.637887us | -| 2048 | 100 | 1 | 2019.053100ms | 12.352510ms | 3.665902ms | 6.031499us | 5.721027us | 6.432889us | -| 4096 | 100 | 1 | 2523.960900ms | 29.956222ms | 10.520133ms | 7.313531us | 6.865223us | 7.886504us | -| 8192 | 100 | 1 | 6902.332300ms | 82.290000ms | 37.270979ms | 10.045166us | 9.260234us | 11.070335us | +| 1 | 100 | 1 | 44.109000ms | 84.203320us | 20.478700us | 84.203320us | 80.940960us | 89.295670us | +| 2 | 100 | 1 | 45.938600ms | 92.868510us | 19.192629us | 46.434255us | 44.834730us | 48.714650us | +| 4 | 100 | 1 | 47.863300ms | 107.140790us | 23.002300us | 26.785197us | 25.853675us | 28.175915us | +| 8 | 100 | 1 | 51.333500ms | 125.930230us | 24.715273us | 15.741279us | 15.210028us | 16.436614us | +| 16 | 100 | 1 | 58.045500ms | 173.502140us | 32.529437us | 10.843884us | 10.476442us | 11.277882us | +| 32 | 100 | 1 | 65.482500ms | 240.570920us | 43.052472us | 7.517841us | 7.278008us | 7.809280us | +| 64 | 100 | 1 | 61.153100ms | 389.344460us | 78.384610us | 6.083507us | 5.866500us | 6.351753us | +| 128 | 100 | 1 | 102.833600ms | 648.482310us | 122.551332us | 5.066268us | 4.894333us | 5.271826us | +| 256 | 100 | 1 | 278.912600ms | 1.175155ms | 228.816810us | 4.590449us | 4.430584us | 4.782841us | +| 512 | 100 | 1 | 384.124500ms | 2.222170ms | 467.347159us | 4.340176us | 4.176985us | 4.536329us | +| 1024 | 100 | 1 | 750.405000ms | 5.049344ms | 1.026126ms | 4.931000us | 4.752802us | 5.148388us | +| 2048 | 100 | 1 | 1569.662400ms | 10.950154ms | 2.201658ms | 5.346755us | 5.153649us | 5.579888us | +| 4096 | 100 | 1 | 4218.994300ms | 24.479004ms | 5.435169ms | 5.976319us | 5.739909us | 6.266486us | +| 8192 | 100 | 1 | 5035.283200ms | 58.103781ms | 13.792881ms | 7.092747us | 6.794698us | 7.459009us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 44.684100ms | 88.177340us | 22.498066us | 88.177340us | 84.543950us | 93.754530us | -| 2 | 100 | 1 | 47.191300ms | 98.242510us | 23.810848us | 49.121255us | 47.196155us | 52.012875us | -| 4 | 100 | 1 | 48.935600ms | 109.209250us | 22.701543us | 27.302312us | 26.333373us | 28.606897us | -| 8 | 100 | 1 | 51.141700ms | 128.663690us | 26.451065us | 16.082961us | 15.505026us | 16.821022us | -| 16 | 100 | 1 | 55.936700ms | 167.574970us | 30.844366us | 10.473436us | 10.124536us | 10.880517us | -| 32 | 100 | 1 | 41.324300ms | 242.686410us | 45.809529us | 7.583950us | 7.322801us | 7.886288us | -| 64 | 100 | 1 | 77.386200ms | 374.901070us | 80.512593us | 5.857829us | 5.632580us | 6.129778us | -| 128 | 100 | 1 | 90.685000ms | 599.756540us | 135.797439us | 4.685598us | 4.496655us | 4.914496us | -| 256 | 100 | 1 | 160.291000ms | 1.076271ms | 261.100422us | 4.204185us | 4.025375us | 4.426915us | -| 512 | 100 | 1 | 205.221400ms | 2.097630ms | 569.861419us | 4.096933us | 3.901994us | 4.345284us | -| 1024 | 100 | 1 | 449.066000ms | 4.326292ms | 1.361813ms | 4.224895us | 3.993161us | 4.522605us | -| 2048 | 100 | 1 | 1699.266300ms | 9.626779ms | 3.473577ms | 4.700576us | 4.411732us | 5.090032us | -| 4096 | 100 | 1 | 4412.994700ms | 23.432779ms | 10.355308ms | 5.720893us | 5.285411us | 6.298814us | -| 8192 | 100 | 1 | 5021.357700ms | 64.507687ms | 36.281109ms | 7.874473us | 7.112341us | 8.878120us | +| 1 | 100 | 1 | 42.201500ms | 85.653080us | 23.988525us | 85.653080us | 81.975640us | 91.914330us | +| 2 | 100 | 1 | 46.607900ms | 96.808370us | 21.323495us | 48.404185us | 46.605510us | 50.847175us | +| 4 | 100 | 1 | 49.009700ms | 109.843610us | 25.937607us | 27.460902us | 26.400527us | 29.035005us | +| 8 | 100 | 1 | 51.485200ms | 126.859620us | 25.911459us | 15.857452us | 15.295229us | 16.578599us | +| 16 | 100 | 1 | 57.567700ms | 170.392120us | 34.386288us | 10.649508us | 10.269952us | 11.117324us | +| 32 | 100 | 1 | 47.287700ms | 231.748030us | 42.469048us | 7.242126us | 7.001047us | 7.524955us | +| 64 | 100 | 1 | 81.358700ms | 362.492350us | 70.177293us | 5.663943us | 5.463955us | 5.895189us | +| 128 | 100 | 1 | 87.133800ms | 590.170450us | 118.725029us | 4.610707us | 4.444655us | 4.809498us | +| 256 | 100 | 1 | 164.291100ms | 1.057555ms | 221.641563us | 4.131076us | 3.977299us | 4.317517us | +| 512 | 100 | 1 | 201.003500ms | 2.022753ms | 442.939830us | 3.950690us | 3.797759us | 4.141310us | +| 1024 | 100 | 1 | 387.527300ms | 3.960816ms | 906.429239us | 3.867984us | 3.713188us | 4.062929us | +| 2048 | 100 | 1 | 628.812000ms | 8.208360ms | 1.974947ms | 4.007988us | 3.836707us | 4.219121us | +| 4096 | 100 | 1 | 2615.154600ms | 17.755908ms | 4.685549ms | 4.334938us | 4.134458us | 4.586882us | +| 8192 | 100 | 1 | 3254.125700ms | 40.308454ms | 11.730455ms | 4.920466us | 4.666864us | 5.235834us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 49.086900ms | 87.663330us | 19.808586us | 87.663330us | 84.548710us | 92.673210us | -| 2 | 100 | 1 | 55.908700ms | 111.250230us | 21.844369us | 55.625115us | 53.857910us | 58.279565us | -| 4 | 100 | 1 | 66.188100ms | 146.571770us | 23.313600us | 36.642942us | 35.686273us | 38.039007us | -| 8 | 100 | 1 | 76.333800ms | 197.450370us | 23.872451us | 24.681296us | 24.201246us | 25.413425us | -| 16 | 100 | 1 | 85.654800ms | 271.583770us | 46.035338us | 16.973986us | 16.582074us | 17.891085us | -| 32 | 100 | 1 | 104.051500ms | 387.551710us | 32.777247us | 12.110991us | 11.945506us | 12.359723us | -| 64 | 100 | 1 | 142.669700ms | 610.984670us | 31.467540us | 9.546635us | 9.470931us | 9.675943us | -| 128 | 100 | 1 | 189.069200ms | 1.093588ms | 109.612681us | 8.543660us | 8.416793us | 8.778389us | -| 256 | 100 | 1 | 381.653200ms | 1.881617ms | 74.107893us | 7.350066us | 7.303561us | 7.422596us | -| 512 | 100 | 1 | 690.269400ms | 4.160155ms | 532.446369us | 8.125302us | 7.952076us | 8.367465us | -| 1024 | 100 | 1 | 1016.192100ms | 9.122302ms | 534.702439us | 8.908498us | 8.813256us | 9.020354us | -| 2048 | 100 | 1 | 2201.754300ms | 21.526457ms | 947.472569us | 10.510965us | 10.432876us | 10.618299us | -| 4096 | 100 | 1 | 5302.148100ms | 52.628935ms | 1.985328ms | 12.848861us | 12.764257us | 12.956301us | -| 8192 | 100 | 1 | 13907.246500ms | 141.093253ms | 4.055788ms | 17.223297us | 17.136424us | 17.332283us | +| 1 | 100 | 1 | 45.020200ms | 85.286270us | 21.327183us | 85.286270us | 81.882440us | 90.580380us | +| 2 | 100 | 1 | 58.600100ms | 113.713530us | 27.550626us | 56.856765us | 54.731945us | 60.452920us | +| 4 | 100 | 1 | 47.723200ms | 145.805600us | 20.715191us | 36.451400us | 35.625608us | 37.750030us | +| 8 | 100 | 1 | 61.561300ms | 195.967030us | 20.631437us | 24.495879us | 24.089795us | 25.152018us | +| 16 | 100 | 1 | 69.761800ms | 268.623580us | 26.470043us | 16.788974us | 16.554834us | 17.280094us | +| 32 | 100 | 1 | 88.180700ms | 382.636930us | 21.629142us | 11.957404us | 11.851525us | 12.133614us | +| 64 | 100 | 1 | 88.622100ms | 609.546240us | 27.171097us | 9.524160us | 9.458754us | 9.636423us | +| 128 | 100 | 1 | 216.767300ms | 1.023856ms | 31.316165us | 7.998872us | 7.961049us | 8.062738us | +| 256 | 100 | 1 | 321.697500ms | 1.844912ms | 48.147205us | 7.206686us | 7.174662us | 7.250028us | +| 512 | 100 | 1 | 556.670000ms | 3.603662ms | 98.097462us | 7.038402us | 7.003118us | 7.078382us | +| 1024 | 100 | 1 | 1086.133300ms | 8.664668ms | 180.967908us | 8.461590us | 8.429681us | 8.499139us | +| 2048 | 100 | 1 | 2002.421600ms | 19.261439ms | 369.321049us | 9.405000us | 9.373084us | 9.444197us | +| 4096 | 100 | 1 | 4645.559500ms | 44.805628ms | 885.946322us | 10.938874us | 10.898563us | 10.983773us | +| 8192 | 100 | 1 | 11575.743400ms | 113.679222ms | 3.060292ms | 13.876858us | 13.810165us | 13.957394us | ## SV-SingleBattle-CalcDamage-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 10.646800ms | 13.483540us | 6.841148us | 13.483540us | 12.292880us | 15.011320us | -| 2 | 100 | 1 | 11.036900ms | 15.553950us | 8.125647us | 7.776975us | 7.049255us | 8.661620us | -| 4 | 100 | 1 | 11.689100ms | 17.094490us | 7.915867us | 4.273623us | 3.896452us | 4.673877us | -| 8 | 100 | 1 | 12.705700ms | 22.379680us | 10.740756us | 2.797460us | 2.536591us | 3.065043us | -| 16 | 100 | 1 | 10.082300ms | 30.197460us | 14.197694us | 1.887341us | 1.708842us | 2.056508us | -| 32 | 100 | 1 | 11.495000ms | 48.755440us | 30.320447us | 1.523608us | 1.363181us | 1.742565us | -| 64 | 100 | 1 | 19.887600ms | 81.837970us | 43.095413us | 1.278718us | 1.144779us | 1.408873us | -| 128 | 100 | 1 | 51.077900ms | 142.540750us | 79.380955us | 1.113600us | 990.863906ns | 1.234476us | -| 256 | 100 | 1 | 90.234600ms | 273.079890us | 150.650612us | 1.066718us | 950.041172ns | 1.180214us | -| 512 | 100 | 1 | 185.274200ms | 532.807450us | 314.265557us | 1.040640us | 917.498730ns | 1.157795us | -| 1024 | 100 | 1 | 350.920800ms | 1.202341ms | 708.683928us | 1.174161us | 1.035507us | 1.307055us | -| 2048 | 100 | 1 | 674.811200ms | 2.521488ms | 1.438271ms | 1.231195us | 1.090395us | 1.364682us | -| 4096 | 100 | 1 | 1333.687500ms | 5.296492ms | 3.092342ms | 1.293089us | 1.138989us | 1.435591us | -| 8192 | 100 | 1 | 3064.853000ms | 11.821261ms | 7.048602ms | 1.443025us | 1.271059us | 1.607539us | +| 1 | 100 | 1 | 11.665500ms | 13.987720us | 6.789775us | 13.987720us | 12.792340us | 15.490780us | +| 2 | 100 | 1 | 12.801500ms | 16.809070us | 9.479295us | 8.404535us | 7.571345us | 9.461235us | +| 4 | 100 | 1 | 9.897300ms | 18.085560us | 10.371308us | 4.521390us | 4.091168us | 5.137058us | +| 8 | 100 | 1 | 10.308700ms | 21.665730us | 10.001050us | 2.708216us | 2.456565us | 2.945630us | +| 16 | 100 | 1 | 11.137600ms | 30.997610us | 14.911004us | 1.937351us | 1.752416us | 2.118139us | +| 32 | 100 | 1 | 12.260200ms | 45.213850us | 23.631620us | 1.412933us | 1.272616us | 1.563103us | +| 64 | 100 | 1 | 21.729900ms | 76.418640us | 40.793876us | 1.194041us | 1.070410us | 1.320185us | +| 128 | 100 | 1 | 53.887000ms | 137.749700us | 76.557228us | 1.076170us | 959.408828ns | 1.193286us | +| 256 | 100 | 1 | 79.420500ms | 259.766050us | 141.170651us | 1.014711us | 904.263984ns | 1.120786us | +| 512 | 100 | 1 | 179.802900ms | 469.161320us | 284.242091us | 916.330703ns | 805.905215ns | 1.023834us | +| 1024 | 100 | 1 | 345.920300ms | 1.153964ms | 682.004977us | 1.126918us | 993.459326ns | 1.255033us | +| 2048 | 100 | 1 | 686.825100ms | 2.443393ms | 1.391340ms | 1.193063us | 1.055949us | 1.322409us | +| 4096 | 100 | 1 | 1333.409400ms | 5.020190ms | 2.951563ms | 1.225632us | 1.080028us | 1.363211us | +| 8192 | 100 | 1 | 2806.694200ms | 11.088440ms | 6.605879ms | 1.353569us | 1.191028us | 1.508527us | ## SV-SingleBattle-CalcDamage-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 10.585400ms | 13.657120us | 6.737867us | 13.657120us | 12.459530us | 15.135310us | -| 2 | 100 | 1 | 11.170600ms | 16.679520us | 5.171333us | 8.339760us | 7.955650us | 9.047105us | -| 4 | 100 | 1 | 10.774200ms | 19.230180us | 4.256702us | 4.807545us | 4.661755us | 5.139230us | -| 8 | 100 | 1 | 12.000500ms | 23.987120us | 6.597564us | 2.998390us | 2.883791us | 3.255337us | -| 16 | 100 | 1 | 12.631100ms | 32.098790us | 5.110339us | 2.006174us | 1.959024us | 2.095273us | -| 32 | 100 | 1 | 14.764900ms | 47.768850us | 5.856369us | 1.492777us | 1.463317us | 1.537767us | -| 64 | 100 | 1 | 17.272800ms | 77.371570us | 6.943248us | 1.208931us | 1.190014us | 1.232955us | -| 128 | 100 | 1 | 23.181500ms | 135.250640us | 8.898299us | 1.056646us | 1.044156us | 1.071690us | -| 256 | 100 | 1 | 25.441200ms | 252.026040us | 14.098895us | 984.476719ns | 975.423359ns | 997.737539ns | -| 512 | 100 | 1 | 43.084600ms | 493.104190us | 15.101376us | 963.094121ns | 957.366309ns | 968.975762ns | -| 1024 | 100 | 1 | 94.093400ms | 962.313160us | 37.247517us | 939.758945ns | 934.615000ns | 950.496953ns | -| 2048 | 100 | 1 | 194.623000ms | 1.873805ms | 34.609932us | 914.943901ns | 911.685737ns | 918.289053ns | -| 4096 | 100 | 1 | 384.820300ms | 3.741791ms | 69.543272us | 913.523167ns | 910.450825ns | 917.099492ns | -| 8192 | 100 | 1 | 773.336200ms | 7.533772ms | 203.873072us | 919.649962ns | 915.665366ns | 925.805492ns | +| 1 | 100 | 1 | 11.817200ms | 14.357930us | 8.212114us | 14.357930us | 12.989060us | 16.322960us | +| 2 | 100 | 1 | 12.309300ms | 20.317180us | 28.053676us | 10.158590us | 8.591745us | 16.443885us | +| 4 | 100 | 1 | 12.104500ms | 20.213730us | 5.592307us | 5.053432us | 4.845623us | 5.435725us | +| 8 | 100 | 1 | 13.240400ms | 24.564760us | 5.927845us | 3.070595us | 2.959960us | 3.271049us | +| 16 | 100 | 1 | 13.907000ms | 31.812250us | 5.889463us | 1.988266us | 1.932451us | 2.085397us | +| 32 | 100 | 1 | 15.716900ms | 45.118750us | 5.739531us | 1.409961us | 1.381665us | 1.455471us | +| 64 | 100 | 1 | 18.034800ms | 73.569760us | 7.486963us | 1.149527us | 1.129633us | 1.176284us | +| 128 | 100 | 1 | 25.187600ms | 127.309230us | 10.563699us | 994.603359ns | 980.715312ns | 1.013768us | +| 256 | 100 | 1 | 36.722000ms | 229.405570us | 11.751329us | 896.115508ns | 888.073984ns | 906.390352ns | +| 512 | 100 | 1 | 40.822900ms | 443.643510us | 14.910161us | 866.491230ns | 861.049004ns | 872.490020ns | +| 1024 | 100 | 1 | 87.893800ms | 857.520890us | 20.255035us | 837.422744ns | 833.660752ns | 841.387607ns | +| 2048 | 100 | 1 | 176.221100ms | 1.672086ms | 48.191428us | 816.448203ns | 812.961270ns | 822.905449ns | +| 4096 | 100 | 1 | 341.103200ms | 3.297574ms | 57.697188us | 805.071829ns | 802.473005ns | 808.004026ns | +| 8192 | 100 | 1 | 676.538600ms | 6.579690ms | 108.853966us | 803.184771ns | 800.621213ns | 805.846168ns | ## SV-SingleBattle-CalcDamage-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 10.717000ms | 13.637700us | 7.169501us | 13.637700us | 12.399490us | 15.259480us | -| 2 | 100 | 1 | 10.191700ms | 17.511170us | 6.276989us | 8.755585us | 8.311145us | 9.686665us | -| 4 | 100 | 1 | 11.297000ms | 24.791180us | 39.072495us | 6.197795us | 5.125177us | 10.973160us | -| 8 | 100 | 1 | 12.006900ms | 25.982940us | 8.273220us | 3.247867us | 3.116005us | 3.617074us | -| 16 | 100 | 1 | 14.111600ms | 36.768360us | 9.195698us | 2.298023us | 2.222351us | 2.493099us | -| 32 | 100 | 1 | 17.806100ms | 56.514320us | 6.229850us | 1.766072us | 1.735433us | 1.815224us | -| 64 | 100 | 1 | 31.110900ms | 101.904970us | 11.226836us | 1.592265us | 1.564449us | 1.636397us | -| 128 | 100 | 1 | 54.428700ms | 184.031630us | 24.547965us | 1.437747us | 1.413441us | 1.506724us | -| 256 | 100 | 1 | 96.560500ms | 356.582030us | 27.341034us | 1.392899us | 1.377193us | 1.422496us | -| 512 | 100 | 1 | 188.925600ms | 762.707070us | 162.563964us | 1.489662us | 1.438723us | 1.568637us | -| 1024 | 100 | 1 | 360.725700ms | 1.830224ms | 166.426210us | 1.787328us | 1.758740us | 1.823312us | -| 2048 | 100 | 1 | 750.140800ms | 3.977560ms | 185.196576us | 1.942168us | 1.927102us | 1.963276us | -| 4096 | 100 | 1 | 1431.667900ms | 9.108924ms | 347.392767us | 2.223858us | 2.208992us | 2.242687us | -| 8192 | 100 | 1 | 2952.456400ms | 20.130039ms | 679.709378us | 2.457280us | 2.442747us | 2.475665us | +| 1 | 100 | 1 | 11.707700ms | 13.881870us | 7.553282us | 13.881870us | 12.606100us | 15.626400us | +| 2 | 100 | 1 | 11.337900ms | 17.686430us | 7.169079us | 8.843215us | 8.373055us | 10.037170us | +| 4 | 100 | 1 | 12.508300ms | 20.884350us | 7.116996us | 5.221087us | 4.980415us | 5.791995us | +| 8 | 100 | 1 | 13.032300ms | 26.255370us | 8.148680us | 3.281921us | 3.145665us | 3.614787us | +| 16 | 100 | 1 | 15.171200ms | 36.738350us | 9.708960us | 2.296147us | 2.216166us | 2.497204us | +| 32 | 100 | 1 | 18.830900ms | 56.017790us | 10.553824us | 1.750556us | 1.707417us | 1.862329us | +| 64 | 100 | 1 | 33.078400ms | 94.990340us | 9.846966us | 1.484224us | 1.460863us | 1.525379us | +| 128 | 100 | 1 | 57.816800ms | 171.986770us | 17.027795us | 1.343647us | 1.323814us | 1.379665us | +| 256 | 100 | 1 | 99.974500ms | 325.240960us | 16.494467us | 1.270473us | 1.259546us | 1.285546us | +| 512 | 100 | 1 | 190.061500ms | 634.323610us | 61.096974us | 1.238913us | 1.222405us | 1.275632us | +| 1024 | 100 | 1 | 362.361100ms | 1.689196ms | 88.940301us | 1.649605us | 1.635643us | 1.671002us | +| 2048 | 100 | 1 | 754.599300ms | 3.750632ms | 161.876190us | 1.831363us | 1.819267us | 1.852049us | +| 4096 | 100 | 1 | 1478.448800ms | 8.618165ms | 113.289162us | 2.104044us | 2.098845us | 2.109696us | +| 8192 | 100 | 1 | 2928.204400ms | 19.086635ms | 259.428218us | 2.329911us | 2.324362us | 2.336895us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 38.109100ms | 115.197860us | 38.639606us | 115.197860us | 106.558090us | 121.910580us | -| 2 | 100 | 1 | 45.364300ms | 168.960740us | 56.107762us | 84.480370us | 78.008290us | 89.245930us | -| 4 | 100 | 1 | 58.034000ms | 263.965870us | 87.727809us | 65.991467us | 60.858650us | 69.670102us | -| 8 | 100 | 1 | 82.845500ms | 674.234500us | 2.317527ms | 84.279313us | 54.108230us | 204.632509us | -| 16 | 100 | 1 | 120.702800ms | 785.082680us | 276.826528us | 49.067668us | 45.075183us | 51.974968us | -| 32 | 100 | 1 | 187.147600ms | 1.448678ms | 514.407748us | 45.271183us | 41.518758us | 47.941498us | -| 64 | 100 | 1 | 378.111900ms | 2.787783ms | 989.553255us | 43.559115us | 39.934512us | 46.138064us | -| 128 | 100 | 1 | 779.283500ms | 5.489406ms | 1.955473ms | 42.885986us | 39.308026us | 45.427079us | -| 256 | 100 | 1 | 1531.588400ms | 10.810205ms | 3.866743ms | 42.227364us | 38.728480us | 44.740760us | -| 512 | 100 | 1 | 3191.366200ms | 22.964107ms | 8.378531ms | 44.851772us | 41.116469us | 47.656758us | -| 1024 | 100 | 1 | 7885.793400ms | 60.018134ms | 21.867140ms | 58.611459us | 53.680299us | 62.202629us | -| 2048 | 100 | 1 | 14428.802100ms | 134.578482ms | 48.037393ms | 65.712149us | 60.188920us | 69.610431us | -| 4096 | 100 | 1 | 29932.421900ms | 281.176778ms | 100.431567ms | 68.646674us | 62.934879us | 72.751932us | +| 1 | 100 | 1 | 37.828400ms | 119.511480us | 39.723899us | 119.511480us | 110.546450us | 126.321570us | +| 2 | 100 | 1 | 46.329700ms | 170.944420us | 56.950317us | 85.472210us | 78.903175us | 90.269815us | +| 4 | 100 | 1 | 59.400900ms | 263.678520us | 87.705105us | 65.919630us | 60.796698us | 69.602833us | +| 8 | 100 | 1 | 83.107600ms | 441.236780us | 148.042880us | 55.154598us | 50.804676us | 58.224291us | +| 16 | 100 | 1 | 118.418300ms | 779.017630us | 274.366277us | 48.688602us | 44.694068us | 51.573637us | +| 32 | 100 | 1 | 186.828400ms | 1.471813ms | 520.569391us | 45.994163us | 42.203682us | 48.712051us | +| 64 | 100 | 1 | 387.219000ms | 2.837813ms | 1.008693ms | 44.340824us | 40.623371us | 46.961894us | +| 128 | 100 | 1 | 800.385600ms | 5.488720ms | 1.950870ms | 42.880626us | 39.297904us | 45.430938us | +| 256 | 100 | 1 | 1532.705900ms | 10.902448ms | 3.883943ms | 42.587687us | 39.068419us | 45.126118us | +| 512 | 100 | 1 | 3273.427800ms | 22.883527ms | 8.214830ms | 44.694390us | 40.947714us | 47.354635us | +| 1024 | 100 | 1 | 7781.346800ms | 57.320813ms | 20.637741ms | 55.977356us | 51.299153us | 59.349681us | +| 2048 | 100 | 1 | 14141.893900ms | 131.858312ms | 47.029499ms | 64.383942us | 59.000790us | 68.199793us | +| 4096 | 100 | 1 | 30474.678200ms | 280.956865ms | 100.076290ms | 68.592985us | 62.909545us | 72.660986us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 37.357500ms | 115.309800us | 37.830918us | 115.309800us | 107.080590us | 121.997700us | -| 2 | 100 | 1 | 49.408900ms | 148.907540us | 26.573926us | 74.453770us | 71.218660us | 76.638595us | -| 4 | 100 | 1 | 49.385000ms | 208.105790us | 25.663220us | 52.026448us | 50.806350us | 53.340145us | -| 8 | 100 | 1 | 49.859300ms | 304.285290us | 26.865514us | 38.035661us | 37.333662us | 38.658140us | -| 16 | 100 | 1 | 69.670200ms | 492.381750us | 40.204078us | 30.773859us | 30.304268us | 31.290249us | -| 32 | 100 | 1 | 102.196600ms | 889.992660us | 54.908185us | 27.812271us | 27.478248us | 28.152106us | -| 64 | 100 | 1 | 186.175300ms | 1.727627ms | 94.302152us | 26.994175us | 26.707055us | 27.285163us | -| 128 | 100 | 1 | 569.601900ms | 5.141541ms | 195.128310us | 40.168287us | 39.891502us | 40.494046us | -| 256 | 100 | 1 | 1158.851200ms | 11.148704ms | 320.916270us | 43.549626us | 43.303201us | 43.795769us | -| 512 | 100 | 1 | 2842.409500ms | 28.605053ms | 922.317115us | 55.869243us | 55.538357us | 56.246141us | -| 1024 | 100 | 1 | 6959.032000ms | 70.917416ms | 2.125008ms | 69.255289us | 68.858903us | 69.672359us | -| 2048 | 100 | 1 | 16275.526200ms | 168.210626ms | 3.308802ms | 82.134095us | 81.816021us | 82.447981us | -| 4096 | 100 | 1 | 44130.802400ms | 395.863130ms | 14.690629ms | 96.646272us | 96.080964us | 97.557317us | +| 1 | 100 | 1 | 37.637900ms | 113.877830us | 38.412592us | 113.877830us | 105.367400us | 120.611050us | +| 2 | 100 | 1 | 49.979600ms | 154.573150us | 26.858975us | 77.286575us | 73.896335us | 79.409980us | +| 4 | 100 | 1 | 50.837600ms | 206.042420us | 23.463253us | 51.510605us | 50.328027us | 52.634755us | +| 8 | 100 | 1 | 43.473700ms | 306.914190us | 27.226909us | 38.364274us | 37.644241us | 38.984949us | +| 16 | 100 | 1 | 62.684100ms | 508.832910us | 41.139533us | 31.802057us | 31.311440us | 32.315256us | +| 32 | 100 | 1 | 101.326200ms | 887.082570us | 53.194011us | 27.721330us | 27.401242us | 28.051255us | +| 64 | 100 | 1 | 183.288100ms | 1.728512ms | 95.252739us | 27.007994us | 26.720963us | 27.307024us | +| 128 | 100 | 1 | 576.401700ms | 5.229810ms | 154.546446us | 40.857888us | 40.622199us | 41.097733us | +| 256 | 100 | 1 | 1165.396000ms | 11.370964ms | 341.425336us | 44.417828us | 44.160152us | 44.681060us | +| 512 | 100 | 1 | 2855.276500ms | 28.231802ms | 719.930404us | 55.140238us | 54.872190us | 55.423214us | +| 1024 | 100 | 1 | 7213.498400ms | 69.863460ms | 2.005499ms | 68.226035us | 67.859511us | 68.630532us | +| 2048 | 100 | 1 | 16154.411700ms | 166.317744ms | 3.006831ms | 81.209836us | 80.921955us | 81.494267us | +| 4096 | 100 | 1 | 43766.385800ms | 388.091782ms | 8.592756ms | 94.748970us | 94.434741us | 95.321049us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 33.421200ms | 114.530850us | 37.134811us | 114.530850us | 106.264090us | 121.009150us | -| 2 | 100 | 1 | 54.222400ms | 182.767210us | 31.606219us | 91.383605us | 87.765175us | 94.080935us | -| 4 | 100 | 1 | 44.733700ms | 305.616410us | 35.853751us | 76.404102us | 74.588845us | 78.109540us | -| 8 | 100 | 1 | 78.252600ms | 527.228890us | 52.098242us | 65.903611us | 64.583855us | 67.141010us | -| 16 | 100 | 1 | 126.897600ms | 959.936890us | 66.593326us | 59.996056us | 59.158465us | 60.792681us | -| 32 | 100 | 1 | 227.822400ms | 1.778233ms | 87.514937us | 55.569796us | 55.017744us | 56.087518us | -| 64 | 100 | 1 | 443.894500ms | 3.425548ms | 139.686009us | 53.524186us | 53.075096us | 53.932535us | -| 128 | 100 | 1 | 830.846400ms | 6.731957ms | 324.945720us | 52.593418us | 52.140874us | 53.140685us | -| 256 | 100 | 1 | 2023.144600ms | 13.192342ms | 1.670731ms | 51.532586us | 50.584520us | 53.398978us | -| 512 | 100 | 1 | 3460.695100ms | 30.330633ms | 3.038560ms | 59.239518us | 58.253075us | 60.630620us | -| 1024 | 100 | 1 | 7844.574800ms | 76.707040ms | 3.905913ms | 74.909219us | 74.239557us | 75.756451us | -| 2048 | 100 | 1 | 17085.103300ms | 171.006150ms | 4.389771ms | 83.499097us | 83.111350us | 83.950997us | -| 4096 | 100 | 1 | 34969.298200ms | 356.046660ms | 5.030564ms | 86.925454us | 86.695058us | 87.177322us | +| 1 | 100 | 1 | 33.774100ms | 115.726350us | 38.773720us | 115.726350us | 107.027050us | 122.465840us | +| 2 | 100 | 1 | 55.878600ms | 186.478590us | 36.985204us | 93.239295us | 89.415110us | 96.689255us | +| 4 | 100 | 1 | 45.676000ms | 313.589460us | 37.997134us | 78.397365us | 76.507115us | 80.236040us | +| 8 | 100 | 1 | 68.163500ms | 526.231180us | 45.636559us | 65.778897us | 64.576334us | 66.812641us | +| 16 | 100 | 1 | 126.036400ms | 959.251580us | 67.315535us | 59.953224us | 59.106113us | 60.757346us | +| 32 | 100 | 1 | 228.372500ms | 1.787970ms | 95.717700us | 55.874076us | 55.292789us | 56.459556us | +| 64 | 100 | 1 | 447.514800ms | 3.427528ms | 151.684155us | 53.555124us | 53.075908us | 54.008230us | +| 128 | 100 | 1 | 862.948200ms | 6.575023ms | 205.504859us | 51.367371us | 51.048733us | 51.678935us | +| 256 | 100 | 1 | 1856.923400ms | 13.063530ms | 451.098351us | 51.029413us | 50.707044us | 51.401137us | +| 512 | 100 | 1 | 3549.045400ms | 30.516777ms | 3.311685ms | 59.603080us | 58.510747us | 61.091807us | +| 1024 | 100 | 1 | 8027.162500ms | 77.230871ms | 2.758960ms | 75.420773us | 74.939729us | 76.004797us | +| 2048 | 100 | 1 | 16896.815800ms | 167.318155ms | 2.426699ms | 81.698318us | 81.466807us | 81.930520us | +| 4096 | 100 | 1 | 34920.998900ms | 355.883875ms | 5.145145ms | 86.885712us | 86.653022us | 87.148250us | diff --git a/src/CalcDamage/CalcDamage.cpp b/src/CalcDamage/CalcDamage.cpp index 05d558db..95ba4d6a 100644 --- a/src/CalcDamage/CalcDamage.cpp +++ b/src/CalcDamage/CalcDamage.cpp @@ -262,8 +262,8 @@ void applySideDamageRollOptions(Simulation& simulation) { isSimulateTurn || isCalculateDamage || isAnalyzeEffect, "Using a type that isn't a valid simulation tag."); - pokesim::internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) { + pokesim::internal::EntityFilter moveFilter{simulation}; + if (moveFilter.hasNoneSelected()) { return; } @@ -288,51 +288,50 @@ void applySideDamageRollOptions(Simulation& simulation) { } if (damageRollOptions.sidesMatch()) { + moveFilter.template addToSelected(); if constexpr (onlyPassDamageRoll) { ApplyDamageRollKind(simulation, damageRollOptions.getP1()); } else { ApplyDamageRollKind(simulation, damageRollOptions.getP1(), calculateUpToFoeHp, noKoChanceCalculation); } + simulation.registry.clear(); } else { - simulation.viewForSelectedMoves(); - pokesim::internal::SelectForCurrentActionMoveView p1DefendingMoves{simulation}; - if (!p1DefendingMoves.hasNoneSelected()) { - if constexpr (onlyPassDamageRoll) { - ApplyDamageRollKind(simulation, damageRollOptions.getP1()); - } - else { - ApplyDamageRollKind(simulation, damageRollOptions.getP1(), calculateUpToFoeHp, noKoChanceCalculation); - } + moveFilter.template view(); + + simulation.addToEntities(); + if constexpr (onlyPassDamageRoll) { + ApplyDamageRollKind(simulation, damageRollOptions.getP1()); + } + else { + ApplyDamageRollKind(simulation, damageRollOptions.getP1(), calculateUpToFoeHp, noKoChanceCalculation); } - p1DefendingMoves.deselect(); - - pokesim::internal::SelectForCurrentActionMoveView p2DefendingMoves{simulation}; - if (!p2DefendingMoves.hasNoneSelected()) { - if constexpr (onlyPassDamageRoll) { - ApplyDamageRollKind(simulation, damageRollOptions.getP2()); - } - else { - ApplyDamageRollKind(simulation, damageRollOptions.getP2(), calculateUpToFoeHp, noKoChanceCalculation); - } + simulation.registry.clear(); + + simulation.addToEntities(); + if constexpr (onlyPassDamageRoll) { + ApplyDamageRollKind(simulation, damageRollOptions.getP2()); + } + else { + ApplyDamageRollKind(simulation, damageRollOptions.getP2(), calculateUpToFoeHp, noKoChanceCalculation); } - simulation.registry.clear(); + simulation.registry.clear(); } } template void setIfMoveCrits(Simulation& simulation, DamageRollKind damageRollKind) { if (damageRollKind & DamageRollKind::GUARANTEED_CRIT_CHANCE) { - simulation.addToEntities(); + simulation.addToEntities(); return; } if constexpr (std::is_same_v) { - simulation.addToEntities(); + simulation.addToEntities(); runModifyCritBoostEvent(simulation); - simulation.viewForSelectedMoves( + simulation.view( simulation.pokedex().getStaticValue()); simulation.registry.clear(); @@ -351,37 +350,42 @@ void applyDamageRollsAndModifiers( damageRollKind != DamageRollKind::GUARANTEED_CRIT_CHANCE, "Must pick a damage roll kind to go along with crits."); - simulation.addToEntities(); + pokesim::internal::EntityFilter moveFilter{simulation}; + if (moveFilter.hasNoneSelected()) { + return; + } + + simulation.addToEntities(); if (damageRollKind & DamageRollKind::ALL_DAMAGE_ROLLS) { - simulation.viewForSelectedMoves(simulation.pokedex()); + moveFilter.view(simulation.pokedex()); } else { if (damageRollKind & DamageRollKind::MAX_DAMAGE) { - simulation.viewForSelectedMoves(simulation.pokedex()); + moveFilter.view(simulation.pokedex()); } if (damageRollKind & DamageRollKind::AVERAGE_DAMAGE) { - simulation.viewForSelectedMoves(simulation.pokedex()); + moveFilter.view(simulation.pokedex()); } if (damageRollKind & DamageRollKind::MIN_DAMAGE) { - simulation.viewForSelectedMoves(simulation.pokedex()); + moveFilter.view(simulation.pokedex()); } } if constexpr (std::is_same_v) { if (calculateUpToFoeHp) { - simulation.viewForSelectedMoves(); + moveFilter.view(); } simulate_turn::cloneFromDamageRolls(simulation, damageRollKind); } else { - simulation.viewForSelectedMoves(simulation.pokedex()); + moveFilter.view(simulation.pokedex()); if (calculateUpToFoeHp) { - simulation.viewForSelectedMoves(); + moveFilter.view(); } if (!noKoChanceCalculation && damageRollKind & DamageRollKind::ALL_DAMAGE_ROLLS) { - simulation.viewForSelectedMoves>(); + moveFilter.view>(); } } } diff --git a/src/Components/Tags/Selection.hpp b/src/Components/Tags/Selection.hpp index e4a646bc..c432d228 100644 --- a/src/Components/Tags/Selection.hpp +++ b/src/Components/Tags/Selection.hpp @@ -9,4 +9,5 @@ struct SelectedForViewMove {}; namespace pokesim::internal::tags { struct CloneFromDamageRolls {}; +struct ApplySideDamageRollOptions {}; } // namespace pokesim::internal::tags diff --git a/src/Utilities/EntityFilter.hpp b/src/Utilities/EntityFilter.hpp index ef174c6c..2a6a66e2 100644 --- a/src/Utilities/EntityFilter.hpp +++ b/src/Utilities/EntityFilter.hpp @@ -60,6 +60,11 @@ struct EntityFilter { void clearSelectionTags() { simulation->registry.clear(); } + template + void addToSelected(const Args&... args) { + simulation->addToEntities(args...); + } + private: Simulation* simulation = nullptr; }; From 1714547269f67265142b53944bba2c90fe1e4500 Mon Sep 17 00:00:00 2001 From: aed3 <32887801+aed3@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:45:17 -0500 Subject: [PATCH 5/9] Moving CalcDamage.cpp and MoveHitSteps.cpp Those two files and the functions they call no longer use `SelectForView`. The result is a giant speed improvement for large input counts, with the most being the 65536 inputs benchmark becoming 5 times faster! The best part is the larger input counts now no longer greatly increase their time per input times as inputs increase. That's a very good sign and it makes me wonder how much the random input benchmarks would be improving if they could reach those high entity counts. --- CMakePresets.json | 15 + extras/PokeSim.cpp | 125 ++++--- extras/PokeSim.hpp | 153 ++++---- extras/RecentBenchmarkResults.md | 422 +++++++++++------------ src/CalcDamage/CalcDamage.cpp | 61 ++-- src/CalcDamage/CalcDamageDebugChecks.hpp | 9 +- src/Pokedex/Events/EffectEvents.cpp | 3 +- src/Pokedex/Events/ItemEvents.cpp | 8 +- src/Pokedex/Events/MoveEvents.cpp | 6 +- src/Simulation/MoveHitSteps.cpp | 40 +-- src/Simulation/RunEvent.cpp | 8 +- 11 files changed, 431 insertions(+), 419 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index e070bbb6..f014b3ff 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -83,6 +83,16 @@ "test", "benchmark-release" ] + }, + { + "name": "profile", + "inherits": [ + "benchmark", + "default" + ], + "cacheVariables": { + "CMAKE_BUILD_TYPE": "RelWithDebInfo" + } } ], "buildPresets": [ @@ -127,6 +137,11 @@ "name": "benchmark-release-with-checks", "inherits": "benchmark", "configurePreset": "benchmark-release-with-checks" + }, + { + "name": "profile", + "inherits": "benchmark", + "configurePreset": "profile" } ] } diff --git a/extras/PokeSim.cpp b/extras/PokeSim.cpp index ac5a8375..2a08f289 100644 --- a/extras/PokeSim.cpp +++ b/extras/PokeSim.cpp @@ -1967,22 +1967,22 @@ void runResidual(Simulation& simulation) { void runAccuracyEvent(Simulation&) {} void runModifyAccuracyEvent(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); dex::BrightPowder::onModifyAccuracy(simulation); - simulation.viewForSelectedMoves>(); + simulation.view>(); simulation.registry.clear(); } void runModifyCritBoostEvent(Simulation&) {} void runBasePowerEvent(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); dex::KnockOff::onBasePower(simulation); - simulation.viewForSelectedMoves(); + simulation.view(); simulation.registry.clear(); } @@ -2132,15 +2132,13 @@ void removeHitCountFromFaintedTargets(types::handle moveHandle, CurrentActionTar template void runMoveHitCheck(Simulation& simulation) { - simulation.addToEntities(); - - internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) { + if (simulation.registry.view().empty()) { return; } + simulation.addToEntities(); + Function(simulation); - selectedMoves.deselect(); simulation.view>(); simulation.registry.clear(); @@ -2166,14 +2164,14 @@ void setEffectTarget(types::handle handle, TargetEntityHolder target) { } void runMoveEffects(Simulation& simulation) { - internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) { + internal::EntityFilter moveFilter{simulation}; + if (moveFilter.hasNoneSelected()) { return; } - simulation.viewForSelectedMoves(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); + moveFilter.view(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); tryBoost(simulation); trySetStatus(simulation); @@ -2212,17 +2210,15 @@ void removeFaintedSecondaryEffectTarget( // exists that has a random chance to add a side or field affect regardless of the target's HP, then this function will // need to be reworked. void removeFaintedSecondaryEffectTargets(Simulation& simulation) { - internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) { + internal::EntityFilter moveFilter{simulation}; + if (moveFilter.hasNoneSelected()) { return; } - simulation.viewForSelectedMoves< - removeFaintedSecondaryEffectTarget, - Tags>(simulation.simulateTurnOptions); - simulation.viewForSelectedMoves< - removeFaintedSecondaryEffectTarget, - Tags>(simulation.simulateTurnOptions); + moveFilter.view, Tags>( + simulation.simulateTurnOptions); + moveFilter.view, Tags>( + simulation.simulateTurnOptions); } // TODO(aed3): When adding damage source, change this to accept the move's handle and CurrentActionSource to pass to @@ -2248,7 +2244,7 @@ void setMoveHitCount(Simulation& simulation) { } void applyDamage(Simulation& simulation) { - simulation.viewForSelectedMoves(); + simulation.view(); auto view = simulation.registry.view(entt::exclude); simulation.registry.insert(view.begin(), view.end()); @@ -2293,11 +2289,6 @@ void moveHitLoop(Simulation& simulation) { while (!simulation.registry.view().empty()) { POKESIM_REQUIRE(iterations <= MoveHitLimits::MAX, "More hits were ran more than possible."); - internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - POKESIM_REQUIRE( - !selectedMoves.hasNoneSelected(), - "HitCount should only be present on active moves, meaning this loop should only be entered if there are moves to " - "select."); calc_damage::run(simulation); // 1. call to this.battle.getDamage runDamageEvent(simulation); @@ -4206,7 +4197,7 @@ void Pokedex::loadForBattleInfo(const std::vector& battleInf namespace pokesim::dex { namespace { void knockOffOnBasePowerCheckRemovableItem( - types::registry& registry, CurrentActionSource source, CurrentActionTarget target) { + types::registry& registry, CurrentActionSource source, CurrentActionTarget target, EventModifier&) { if (registry.get(source.val).val > Constants::PokemonCurrentHpStat::MIN) { registry.emplace_or_replace(target.val); } @@ -4230,9 +4221,9 @@ void knockOffOnBasePower( void KnockOff::onBasePower(Simulation& simulation) { const auto modifier = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedMoves>(); + simulation.view>(); checkIfCanRemoveItem(simulation); - simulation.viewForSelectedMoves>(modifier); + simulation.view>(modifier); simulation.registry.clear(); } @@ -4346,9 +4337,7 @@ void AssaultVest::onEnd(Simulation& simulation) { void BrightPowder::onModifyAccuracy(Simulation& simulation) { const auto numerator = simulation.pokedex().getStaticValue(); const auto denominator = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon, Tags>( - numerator, - denominator); + simulation.view, Tags>(numerator, denominator); } void ChoiceScarf::onModifySpe(Simulation& simulation) { @@ -4397,9 +4386,7 @@ void FocusSash::onDamage(Simulation& simulation) { void LifeOrb::onModifyDamage(Simulation& simulation) { const auto numerator = simulation.pokedex().getStaticValue(); const auto denominator = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon, Tags>( - numerator, - denominator); + simulation.view, Tags>(numerator, denominator); } void LifeOrb::onAfterMoveUsed(Simulation& simulation) { @@ -4463,8 +4450,7 @@ void choiceLockOnDisableMove( } // namespace void Burn::onSetDamageRollModifiers(Simulation& simulation) { - simulation - .viewForSelectedPokemon /*, entt::exclude */>(); + simulation.view /*, entt::exclude */>(); } void Burn::onResidual(Simulation& simulation) { @@ -4609,6 +4595,10 @@ types::entity InputSetup::entity() const { namespace pokesim::calc_damage { namespace { +auto getMoveFilter(Simulation& simulation) { + return pokesim::internal::EntityFilter{simulation}; +} + void clearRunVariables(Simulation& simulation) { simulation.registry.clear< tags::Crit, @@ -4820,7 +4810,7 @@ void applySideDamageRollOptions(Simulation& simulation) { isSimulateTurn || isCalculateDamage || isAnalyzeEffect, "Using a type that isn't a valid simulation tag."); - pokesim::internal::EntityFilter moveFilter{simulation}; + pokesim::internal::EntityFilter moveFilter{simulation}; if (moveFilter.hasNoneSelected()) { return; } @@ -4847,6 +4837,7 @@ void applySideDamageRollOptions(Simulation& simulation) { if (damageRollOptions.sidesMatch()) { moveFilter.template addToSelected(); + simulation.removeFromEntities(); if constexpr (onlyPassDamageRoll) { ApplyDamageRollKind(simulation, damageRollOptions.getP1()); } @@ -4859,6 +4850,7 @@ void applySideDamageRollOptions(Simulation& simulation) { moveFilter.template view(); simulation.addToEntities(); + simulation.removeFromEntities(); if constexpr (onlyPassDamageRoll) { ApplyDamageRollKind(simulation, damageRollOptions.getP1()); } @@ -4868,6 +4860,7 @@ void applySideDamageRollOptions(Simulation& simulation) { simulation.registry.clear(); simulation.addToEntities(); + simulation.removeFromEntities(); if constexpr (onlyPassDamageRoll) { ApplyDamageRollKind(simulation, damageRollOptions.getP2()); } @@ -4977,11 +4970,13 @@ void resetEffectiveAndDefendingStat(types::registry& registry, Defender defender template void setUnboostedStat(Simulation& simulation) { static constexpr bool forAttacker = std::is_same_v; + auto moveFilter = getMoveFilter(simulation); + if constexpr (forAttacker) { - simulation.viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); } else { - simulation.viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); } if (simulation.registry.view().empty()) { @@ -5010,34 +5005,31 @@ void setUnboostedStat(Simulation& simulation) { } if constexpr (forAttacker) { - simulation - .viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); } else { - simulation - .viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); } simulation.registry.clear(); } void setDamageFormulaVariables(Simulation& simulation) { - simulation.viewForSelectedMoves(); + auto moveFilter = getMoveFilter(simulation); + moveFilter.view(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - // simulation.viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); + // moveFilter.view, Tags>(); - // simulation.viewForSelectedPokemon>(); + // moveFilter.view>(); setUnboostedStat(simulation); setUnboostedStat(simulation); @@ -5047,15 +5039,16 @@ void setDamageFormulaVariables(Simulation& simulation) { } void setDamageRollModifiers(Simulation& simulation) { - simulation.viewForSelectedMoves(); - simulation.viewForSelectedMoves(simulation.pokedex()); + auto moveFilter = getMoveFilter(simulation); + moveFilter.view(); + moveFilter.view(simulation.pokedex()); dex::Burn::onSetDamageRollModifiers(simulation); runModifyDamageEvent(simulation); } void calcDamage(Simulation& simulation) { - pokesim::internal::SelectForCurrentActionMoveView<> selectedMoves{simulation, entt::exclude}; - if (selectedMoves.hasNoneSelected()) { + auto moveFilter = getMoveFilter(simulation); + if (moveFilter.hasNoneSelected()) { return; } @@ -5070,11 +5063,11 @@ void calcDamage(Simulation& simulation) { runBasePowerEvent(simulation); setDamageFormulaVariables(simulation); - simulation.viewForSelectedMoves(); - simulation.viewForSelectedMoves>( + moveFilter.view(); + moveFilter.view>( simulation.pokedex().getStaticValue()); - simulation.addToEntities(); + simulation.addToEntities(); setDamageRollModifiers(simulation); applySideDamageRollOptions>(simulation); diff --git a/extras/PokeSim.hpp b/extras/PokeSim.hpp index 95c1a46e..2779f462 100644 --- a/extras/PokeSim.hpp +++ b/extras/PokeSim.hpp @@ -240,12 +240,12 @@ * src/Battle/ManageBattleState.hpp * src/SimulateTurn/RandomChance.hpp * src/Simulation/MoveHitSteps.hpp + * src/Utilities/EntityFilter.hpp * src/Battle/Side/ManageSideState.hpp * src/SimulateTurn/ManageActionQueue.hpp * src/SimulateTurn/SimulateTurnDebugChecks.hpp * src/Utilities/RNG.hpp * src/SimulateTurn/CalcDamageSpecifics.hpp - * src/Utilities/EntityFilter.hpp * src/Pokedex/Setup/DexDataSetup.hpp * src/Pokedex/Setup/SpeciesDexDataSetup.hpp * src/Pokedex/Setup/MoveDexDataSetup.hpp @@ -24636,6 +24636,77 @@ void runMoveHitChecks(Simulation& simulation); //////////////////// END OF src/Simulation/MoveHitSteps.hpp //////////////////// +/////////////////// START OF src/Utilities/EntityFilter.hpp //////////////////// + +namespace pokesim::internal { +template +struct EntityFilter { + private: + template + struct Filter; + + template + struct Filter, ExcludeContainer, IncludeContainer> { + template + static void view(Simulation* simulation, const PassedInArgs&... passedInArgs) { + simulation + ->view, ExcludeContainer, IncludeContainer>( + passedInArgs...); + } + + template + static void group(Simulation* simulation, const PassedInArgs&... passedInArgs) { + simulation + ->group, ExcludeContainer, IncludeContainer>( + passedInArgs...); + } + }; + + public: + EntityFilter(Simulation& simulation_) : simulation(&simulation_) {} + + template < + auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, + typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> + auto view(const PassedInArgs&... passedInArgs) { + Filter::view(simulation, passedInArgs...); + } + + template < + auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, + typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> + auto group(const PassedInArgs&... passedInArgs) { + Filter::group(simulation, passedInArgs...); + } + + template + void applySelectionTags(entt::exclude_t exclude = entt::exclude_t{}) { + static_assert( + !(sizeof...(ExcludeComponents) == 0U && std::conjunction_v...>), + "If there are no excludes and all included components are tags, use those tags as the SelectionTags directly."); + auto view = simulation->registry.view(exclude); + simulation->registry.insert(view.begin(), view.end()); + } + + bool hasNoneSelected() { + auto view = simulation->registry.view(); + return view.begin() == view.end(); + } + + void clearSelectionTags() { simulation->registry.clear(); } + + template + void addToSelected(const Args&... args) { + simulation->addToEntities(args...); + } + + private: + Simulation* simulation = nullptr; +}; +} // namespace pokesim::internal + +//////////////////// END OF src/Utilities/EntityFilter.hpp ///////////////////// + ///////////////// START OF src/Battle/Side/ManageSideState.hpp ///////////////// namespace pokesim { @@ -24816,77 +24887,6 @@ void setIfMoveCrits(Simulation& simulation); /////////////// END OF src/SimulateTurn/CalcDamageSpecifics.hpp //////////////// -/////////////////// START OF src/Utilities/EntityFilter.hpp //////////////////// - -namespace pokesim::internal { -template -struct EntityFilter { - private: - template - struct Filter; - - template - struct Filter, ExcludeContainer, IncludeContainer> { - template - static void view(Simulation* simulation, const PassedInArgs&... passedInArgs) { - simulation - ->view, ExcludeContainer, IncludeContainer>( - passedInArgs...); - } - - template - static void group(Simulation* simulation, const PassedInArgs&... passedInArgs) { - simulation - ->group, ExcludeContainer, IncludeContainer>( - passedInArgs...); - } - }; - - public: - EntityFilter(Simulation& simulation_) : simulation(&simulation_) {} - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - auto view(const PassedInArgs&... passedInArgs) { - Filter::view(simulation, passedInArgs...); - } - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - auto group(const PassedInArgs&... passedInArgs) { - Filter::group(simulation, passedInArgs...); - } - - template - void applySelectionTags(entt::exclude_t exclude = entt::exclude_t{}) { - static_assert( - !(sizeof...(ExcludeComponents) == 0U && std::conjunction_v...>), - "If there are no excludes and all included components are tags, use those tags as the SelectionTags directly."); - auto view = simulation->registry.view(exclude); - simulation->registry.insert(view.begin(), view.end()); - } - - bool hasNoneSelected() { - auto view = simulation->registry.view(); - return view.begin() == view.end(); - } - - void clearSelectionTags() { simulation->registry.clear(); } - - template - void addToSelected(const Args&... args) { - simulation->addToEntities(args...); - } - - private: - Simulation* simulation = nullptr; -}; -} // namespace pokesim::internal - -//////////////////// END OF src/Utilities/EntityFilter.hpp ///////////////////// - ///////////////// START OF src/Pokedex/Setup/DexDataSetup.hpp ////////////////// namespace pokesim::dex::internal { @@ -25281,8 +25281,13 @@ struct Checks : pokesim::debug::Checks { std::size_t calcDamageCount = 0U; std::size_t analyzeEffectCount = 0U; + types::entityVector getMoveList() const { + auto view = registry->view(); + return {view.begin(), view.end()}; + } + void checkMoveInputs() { - CurrentActionMovesAsSource moves{simulation->selectedMoveEntities()}; + CurrentActionMovesAsSource moves{getMoveList()}; for (types::entity move : moves.val) { if (has(move)) continue; @@ -25488,7 +25493,7 @@ struct Checks : pokesim::debug::Checks { } void checkMoveOutputs() const { - for (types::entity move : simulation->selectedMoveEntities()) { + for (types::entity move : getMoveList()) { if (has(move)) continue; pokesim::debug::TypesToIgnore typesToIgnore{}; diff --git a/extras/RecentBenchmarkResults.md b/extras/RecentBenchmarkResults.md index 5acd2ffc..b2b848f0 100644 --- a/extras/RecentBenchmarkResults.md +++ b/extras/RecentBenchmarkResults.md @@ -7,286 +7,286 @@ ## SV-SingleBattle-MonteCarlo-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 45.314300ms | 79.295320us | 11.343534us | 79.295320us | 77.767320us | 82.973330us | -| 2 | 100 | 1 | 48.620600ms | 92.462290us | 15.206491us | 46.231145us | 45.045545us | 48.176640us | -| 4 | 100 | 1 | 49.831900ms | 103.594010us | 11.226841us | 25.898502us | 25.514680us | 26.764730us | -| 8 | 100 | 1 | 53.443600ms | 128.597880us | 15.822917us | 16.074735us | 15.779803us | 16.615455us | -| 16 | 100 | 1 | 59.213800ms | 173.385590us | 18.200670us | 10.836599us | 10.683481us | 11.206371us | -| 32 | 100 | 1 | 66.213300ms | 240.626100us | 12.077856us | 7.519566us | 7.467072us | 7.635835us | -| 64 | 100 | 1 | 82.737700ms | 372.640920us | 11.040805us | 5.822514us | 5.800824us | 5.883124us | -| 128 | 100 | 1 | 110.627100ms | 636.838280us | 29.291109us | 4.975299us | 4.947349us | 5.065579us | -| 256 | 100 | 1 | 163.975700ms | 1.141664ms | 15.423379us | 4.459625us | 4.448014us | 4.471778us | -| 512 | 100 | 1 | 237.292400ms | 2.172108ms | 30.788183us | 4.242399us | 4.231237us | 4.254927us | -| 1024 | 100 | 1 | 449.435400ms | 4.319955ms | 49.196584us | 4.218706us | 4.210119us | 4.229086us | -| 2048 | 100 | 1 | 956.748400ms | 9.126239ms | 126.304234us | 4.456172us | 4.445615us | 4.470087us | -| 4096 | 100 | 1 | 2091.659600ms | 20.320105ms | 242.745646us | 4.960963us | 4.950295us | 4.973581us | -| 8192 | 100 | 1 | 5012.525300ms | 50.293118ms | 856.932790us | 6.139297us | 6.119837us | 6.161111us | -| 16384 | 100 | 1 | 14250.474300ms | 140.107734ms | 3.111135ms | 8.551497us | 8.513605us | 8.588225us | -| 32768 | 100 | 1 | 41441.077300ms | 430.155516ms | 11.626548ms | 13.127305us | 13.056813us | 13.195978us | -| 65536 | 100 | 1 | 147444.607400ms | 1449.631127ms | 44.489820ms | 22.119616us | 21.986110us | 22.251426us | +| 1 | 100 | 1 | 46.409700ms | 77.482730us | 16.715119us | 77.482730us | 75.289930us | 83.073330us | +| 2 | 100 | 1 | 46.795900ms | 87.124580us | 20.172168us | 43.562290us | 42.149360us | 46.635865us | +| 4 | 100 | 1 | 51.051600ms | 98.577260us | 14.934484us | 24.644315us | 24.100660us | 25.682182us | +| 8 | 100 | 1 | 52.923600ms | 122.311570us | 17.885996us | 15.288946us | 14.964412us | 15.927890us | +| 16 | 100 | 1 | 60.013900ms | 162.697460us | 20.349131us | 10.168591us | 9.994946us | 10.574209us | +| 32 | 100 | 1 | 66.644600ms | 228.033660us | 18.646168us | 7.126052us | 7.046548us | 7.307726us | +| 64 | 100 | 1 | 80.336000ms | 357.127410us | 17.147995us | 5.580116us | 5.540809us | 5.654680us | +| 128 | 100 | 1 | 106.623200ms | 591.948320us | 14.732299us | 4.624596us | 4.606258us | 4.653389us | +| 256 | 100 | 1 | 158.686300ms | 1.061508ms | 13.909766us | 4.146514us | 4.136363us | 4.157757us | +| 512 | 100 | 1 | 252.041400ms | 1.954950ms | 52.450159us | 3.818262us | 3.804745us | 3.852756us | +| 1024 | 100 | 1 | 465.562700ms | 3.747578ms | 57.544760us | 3.659744us | 3.649797us | 3.672070us | +| 2048 | 100 | 1 | 888.058200ms | 7.386271ms | 87.382538us | 3.606578us | 3.598796us | 3.615618us | +| 4096 | 100 | 1 | 1533.744700ms | 14.780307ms | 198.892460us | 3.608473us | 3.599238us | 3.618314us | +| 8192 | 100 | 1 | 3027.943700ms | 30.009494ms | 334.457038us | 3.663268us | 3.655868us | 3.671944us | +| 16384 | 100 | 1 | 6260.678700ms | 62.106796ms | 566.042424us | 3.790698us | 3.784315us | 3.797911us | +| 32768 | 100 | 1 | 13316.502100ms | 128.219746ms | 1.234067ms | 3.912956us | 3.906862us | 3.922229us | +| 65536 | 100 | 1 | 29680.540900ms | 275.145622ms | 10.952798ms | 4.198389us | 4.166312us | 4.231968us | ## SV-SingleBattle-Branching-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 67.188000ms | 236.576080us | 14.580504us | 236.576080us | 234.389940us | 240.513580us | -| 2 | 100 | 1 | 42.587600ms | 316.481310us | 12.583012us | 158.240655us | 157.340105us | 160.084645us | -| 4 | 100 | 1 | 55.938600ms | 463.307720us | 16.245037us | 115.826930us | 115.294893us | 117.191637us | -| 8 | 100 | 1 | 86.959500ms | 754.058240us | 21.219256us | 94.257280us | 93.880531us | 95.037594us | -| 16 | 100 | 1 | 141.548100ms | 1.271032ms | 23.176321us | 79.439493us | 79.195451us | 79.776112us | -| 32 | 100 | 1 | 250.907400ms | 2.287061ms | 15.882690us | 71.470657us | 71.383674us | 71.580119us | -| 64 | 100 | 1 | 474.161500ms | 4.336383ms | 55.230949us | 67.755986us | 67.609642us | 67.954396us | -| 128 | 100 | 1 | 885.544000ms | 8.297026ms | 67.898468us | 64.820520us | 64.731403us | 64.941942us | -| 256 | 100 | 1 | 1711.784300ms | 16.420812ms | 181.708188us | 64.143796us | 64.017675us | 64.296227us | -| 512 | 100 | 1 | 3284.941200ms | 32.059684ms | 323.298335us | 62.616569us | 62.504598us | 62.754634us | -| 1024 | 100 | 1 | 6744.468900ms | 66.915987ms | 796.253206us | 65.347644us | 65.209204us | 65.515625us | -| 2048 | 100 | 1 | 15145.233600ms | 151.136658ms | 3.808748ms | 73.797196us | 73.530353us | 74.339911us | -| 4096 | 100 | 1 | 38393.538200ms | 379.160267ms | 2.867756ms | 92.568425us | 92.435182us | 92.709433us | -| 8192 | 100 | 1 | 104039.365500ms | 1037.387131ms | 7.044688ms | 126.634171us | 126.467643us | 126.805946us | +| 1 | 100 | 1 | 65.349200ms | 220.990470us | 14.784610us | 220.990470us | 218.930680us | 225.482650us | +| 2 | 100 | 1 | 41.854000ms | 304.876770us | 19.742181us | 152.438385us | 151.144115us | 155.757220us | +| 4 | 100 | 1 | 54.756400ms | 451.439390us | 18.824078us | 112.859848us | 112.268107us | 114.585680us | +| 8 | 100 | 1 | 85.200800ms | 724.838440us | 15.735760us | 90.604805us | 90.352505us | 91.284676us | +| 16 | 100 | 1 | 140.056700ms | 1.248493ms | 20.304086us | 78.030817us | 77.810408us | 78.314320us | +| 32 | 100 | 1 | 246.834500ms | 2.242094ms | 43.948715us | 70.065437us | 69.879035us | 70.502066us | +| 64 | 100 | 1 | 461.690200ms | 4.217008ms | 57.411466us | 65.890748us | 65.737264us | 66.096010us | +| 128 | 100 | 1 | 864.494600ms | 8.074162ms | 82.001137us | 63.079388us | 62.958095us | 63.209519us | +| 256 | 100 | 1 | 1657.832300ms | 15.659157ms | 188.544847us | 61.168583us | 61.034404us | 61.322745us | +| 512 | 100 | 1 | 3056.081300ms | 29.851978ms | 381.935983us | 58.304645us | 58.167694us | 58.461763us | +| 1024 | 100 | 1 | 6036.290400ms | 59.429409ms | 1.029654ms | 58.036532us | 57.863409us | 58.264888us | +| 2048 | 100 | 1 | 12254.900200ms | 122.000381ms | 1.533615ms | 59.570499us | 59.436437us | 59.733568us | +| 4096 | 100 | 1 | 26889.376400ms | 272.343129ms | 3.948859ms | 66.490022us | 66.340270us | 66.742076us | +| 8192 | 100 | 1 | 59898.141400ms | 595.900352ms | 4.210691ms | 72.741742us | 72.646317us | 72.848000us | ## SV-DoubleBattle-MonteCarlo-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 59.646500ms | 121.401160us | 18.665405us | 121.401160us | 118.962220us | 127.707110us | -| 2 | 100 | 1 | 60.200600ms | 149.374150us | 19.334607us | 74.687075us | 73.334990us | 77.607850us | -| 4 | 100 | 1 | 63.452400ms | 177.463490us | 24.503051us | 44.365872us | 43.435800us | 45.990398us | -| 8 | 100 | 1 | 69.066700ms | 217.012110us | 23.649069us | 27.126514us | 26.700563us | 27.983929us | -| 16 | 100 | 1 | 47.811100ms | 294.277390us | 12.232093us | 18.392337us | 18.291971us | 18.645361us | -| 32 | 100 | 1 | 61.211100ms | 421.563470us | 13.008306us | 13.173858us | 13.122542us | 13.314831us | -| 64 | 100 | 1 | 88.021200ms | 664.400140us | 12.117095us | 10.381252us | 10.358080us | 10.452906us | -| 128 | 100 | 1 | 126.152600ms | 1.144099ms | 17.398984us | 8.938272us | 8.916912us | 8.972928us | -| 256 | 100 | 1 | 222.203100ms | 2.085685ms | 13.205739us | 8.147208us | 8.138963us | 8.159933us | -| 512 | 100 | 1 | 419.512600ms | 3.998429ms | 42.642825us | 7.809432us | 7.795057us | 7.828327us | -| 1024 | 100 | 1 | 825.713400ms | 7.851240ms | 99.104491us | 7.667227us | 7.650281us | 7.688702us | -| 2048 | 100 | 1 | 1680.246700ms | 16.298925ms | 194.335205us | 7.958460us | 7.941612us | 7.978983us | -| 4096 | 100 | 1 | 3594.440100ms | 35.468897ms | 411.953820us | 8.659399us | 8.641120us | 8.680645us | +| 1 | 100 | 1 | 57.163900ms | 125.925180us | 20.794387us | 125.925180us | 122.813530us | 131.607590us | +| 2 | 100 | 1 | 61.039400ms | 142.486160us | 20.608210us | 71.243080us | 69.756035us | 74.209240us | +| 4 | 100 | 1 | 63.147600ms | 174.596750us | 21.234272us | 43.649187us | 42.812785us | 44.984780us | +| 8 | 100 | 1 | 69.734700ms | 216.087940us | 23.758200us | 27.010993us | 26.565232us | 27.822330us | +| 16 | 100 | 1 | 48.909700ms | 297.044250us | 14.286610us | 18.565266us | 18.438309us | 18.823473us | +| 32 | 100 | 1 | 64.335900ms | 416.699260us | 18.475095us | 13.021852us | 12.947141us | 13.218321us | +| 64 | 100 | 1 | 88.898400ms | 655.482730us | 15.952018us | 10.241918us | 10.206973us | 10.316269us | +| 128 | 100 | 1 | 122.123600ms | 1.120534ms | 24.531519us | 8.754173us | 8.720157us | 8.796155us | +| 256 | 100 | 1 | 211.299100ms | 1.980204ms | 21.567669us | 7.735171us | 7.719846us | 7.752920us | +| 512 | 100 | 1 | 392.913300ms | 3.736461ms | 45.461237us | 7.297776us | 7.281524us | 7.316334us | +| 1024 | 100 | 1 | 736.361700ms | 7.092699ms | 97.590630us | 6.926464us | 6.910721us | 6.949499us | +| 2048 | 100 | 1 | 1463.072300ms | 14.040165ms | 170.852830us | 6.855549us | 6.840336us | 6.873264us | +| 4096 | 100 | 1 | 2836.901100ms | 27.955121ms | 306.710899us | 6.824981us | 6.811394us | 6.840797us | ## SV-DoubleBattle-Branching-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 74.018200ms | 525.216350us | 14.077858us | 525.216350us | 523.492610us | 530.612500us | -| 2 | 100 | 1 | 89.013500ms | 787.208040us | 18.036879us | 393.604020us | 392.406950us | 396.585720us | -| 4 | 100 | 1 | 141.186000ms | 1.270016ms | 19.882145us | 317.503965us | 316.586343us | 318.535675us | -| 8 | 100 | 1 | 237.071500ms | 2.156659ms | 9.889668us | 269.582320us | 269.382502us | 269.886241us | -| 16 | 100 | 1 | 420.346000ms | 3.896473ms | 46.591252us | 243.529574us | 242.993384us | 244.143313us | -| 32 | 100 | 1 | 784.548000ms | 7.332147ms | 85.296712us | 229.129606us | 228.656854us | 229.701655us | -| 64 | 100 | 1 | 1458.860600ms | 14.020110ms | 136.057216us | 219.064225us | 218.683776us | 219.522960us | -| 128 | 100 | 1 | 2848.971800ms | 27.459640ms | 281.417326us | 214.528435us | 214.140466us | 215.011291us | -| 256 | 100 | 1 | 5652.537500ms | 55.405452ms | 705.913127us | 216.427545us | 215.953759us | 217.053168us | -| 512 | 100 | 1 | 11378.630700ms | 113.776427ms | 1.525825ms | 222.219584us | 221.720452us | 222.911750us | -| 1024 | 100 | 1 | 24534.720800ms | 247.145988ms | 1.859332ms | 241.353504us | 241.006992us | 241.720519us | -| 2048 | 100 | 1 | 55511.206400ms | 555.937492ms | 2.427185ms | 271.453853us | 271.247068us | 271.714519us | -| 4096 | 100 | 1 | 135872.299500ms | 1369.523267ms | 15.831077ms | 334.356266us | 333.709409us | 335.257108us | +| 1 | 100 | 1 | 77.046300ms | 527.121100us | 16.335134us | 527.121100us | 525.037360us | 532.968330us | +| 2 | 100 | 1 | 94.097500ms | 789.393520us | 19.489047us | 394.696760us | 393.298975us | 397.520760us | +| 4 | 100 | 1 | 141.385800ms | 1.253467ms | 19.469214us | 313.366827us | 312.675875us | 314.810083us | +| 8 | 100 | 1 | 239.350500ms | 2.166349ms | 25.823461us | 270.793608us | 270.174405us | 271.446610us | +| 16 | 100 | 1 | 411.802400ms | 3.868569ms | 43.677791us | 241.785546us | 241.288239us | 242.363753us | +| 32 | 100 | 1 | 781.007800ms | 7.273876ms | 91.056132us | 227.308638us | 226.791734us | 227.903270us | +| 64 | 100 | 1 | 1450.211300ms | 13.841396ms | 140.205420us | 216.271810us | 215.879933us | 216.741283us | +| 128 | 100 | 1 | 2823.318200ms | 27.037273ms | 350.735685us | 211.228695us | 210.751143us | 211.843650us | +| 256 | 100 | 1 | 5501.305900ms | 54.453166ms | 974.942976us | 212.707679us | 212.028031us | 213.524335us | +| 512 | 100 | 1 | 11645.569200ms | 108.387979ms | 1.768433ms | 211.695272us | 211.130172us | 212.537286us | +| 1024 | 100 | 1 | 22494.231200ms | 224.384795ms | 2.245263ms | 219.125777us | 218.717894us | 219.575217us | +| 2048 | 100 | 1 | 46282.687200ms | 460.327251ms | 5.021578ms | 224.769165us | 224.379257us | 225.387975us | +| 4096 | 100 | 1 | 96501.423900ms | 974.320764ms | 4.777795ms | 237.871280us | 237.646156us | 238.104488us | ## SV-SingleBattle-CalcDamage-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 9.123400ms | 12.194620us | 4.323483us | 12.194620us | 11.611140us | 13.573120us | -| 2 | 100 | 1 | 9.405700ms | 14.174940us | 4.965322us | 7.087470us | 6.739085us | 7.836795us | -| 4 | 100 | 1 | 9.539300ms | 15.034900us | 5.283975us | 3.758725us | 3.569545us | 4.147300us | -| 8 | 100 | 1 | 9.779900ms | 15.783310us | 2.981567us | 1.972914us | 1.917061us | 2.074313us | -| 16 | 100 | 1 | 10.297600ms | 20.038440us | 4.217041us | 1.252402us | 1.215919us | 1.334731us | -| 32 | 100 | 1 | 11.072800ms | 27.005760us | 2.785460us | 843.930000ns | 831.071250ns | 867.853438ns | -| 64 | 100 | 1 | 12.536000ms | 39.237300us | 5.612672us | 613.082813ns | 600.835312ns | 639.497187ns | -| 128 | 100 | 1 | 15.450700ms | 63.202130us | 5.978875us | 493.766641ns | 487.445625ns | 509.000000ns | -| 256 | 100 | 1 | 21.307500ms | 110.963760us | 3.430843us | 433.452187ns | 431.057344ns | 436.331484ns | -| 512 | 100 | 1 | 39.518800ms | 206.846610us | 5.798504us | 403.997285ns | 402.048906ns | 406.548984ns | -| 1024 | 100 | 1 | 67.856200ms | 396.362320us | 7.379558us | 387.072578ns | 385.853916ns | 388.745654ns | -| 2048 | 100 | 1 | 127.362300ms | 770.373380us | 13.082051us | 376.158877ns | 375.185020ns | 377.847305ns | -| 4096 | 100 | 1 | 214.908600ms | 1.519471ms | 20.745457us | 370.964539ns | 370.075635ns | 372.089609ns | -| 8192 | 100 | 1 | 490.773100ms | 3.213016ms | 79.269001us | 392.213895ns | 390.486979ns | 394.301458ns | -| 16384 | 100 | 1 | 964.034700ms | 6.508262ms | 77.505374us | 397.232786ns | 396.388889ns | 398.260826ns | -| 32768 | 100 | 1 | 1943.858800ms | 13.307367ms | 342.288684us | 406.108598ns | 404.509446ns | 408.849981ns | -| 65536 | 100 | 1 | 3912.511100ms | 27.390763ms | 405.744858us | 417.949870ns | 416.946959ns | 419.439677ns | +| 1 | 100 | 1 | 7.850100ms | 10.752300us | 4.674183us | 10.752300us | 10.109370us | 12.168020us | +| 2 | 100 | 1 | 8.012700ms | 11.823730us | 4.329482us | 5.911865us | 5.610930us | 6.563665us | +| 4 | 100 | 1 | 8.258000ms | 12.337970us | 4.111027us | 3.084492us | 2.940323us | 3.388560us | +| 8 | 100 | 1 | 8.533800ms | 13.308840us | 3.639800us | 1.663605us | 1.603266us | 1.828349us | +| 16 | 100 | 1 | 8.978500ms | 17.141620us | 3.437954us | 1.071351us | 1.042334us | 1.141066us | +| 32 | 100 | 1 | 9.834200ms | 23.777530us | 3.253777us | 743.047812ns | 728.820625ns | 773.391250ns | +| 64 | 100 | 1 | 11.220500ms | 35.637570us | 3.897802us | 556.837031ns | 548.311875ns | 575.469375ns | +| 128 | 100 | 1 | 13.823400ms | 59.169810us | 4.861503us | 462.264141ns | 456.860625ns | 473.458828ns | +| 256 | 100 | 1 | 19.573100ms | 102.758620us | 6.454364us | 401.400859ns | 397.740000ns | 408.611172ns | +| 512 | 100 | 1 | 35.879000ms | 193.344700us | 5.007023us | 377.626367ns | 376.220996ns | 380.442832ns | +| 1024 | 100 | 1 | 62.396800ms | 372.235560us | 6.241373us | 363.511289ns | 362.398154ns | 364.798877ns | +| 2048 | 100 | 1 | 116.663700ms | 727.784080us | 11.710387us | 355.363320ns | 354.364077ns | 356.630962ns | +| 4096 | 100 | 1 | 226.591100ms | 1.468590ms | 31.602499us | 358.542554ns | 357.132751ns | 360.159937ns | +| 8192 | 100 | 1 | 447.422600ms | 3.033021ms | 50.169392us | 370.241835ns | 369.063026ns | 371.477733ns | +| 16384 | 100 | 1 | 897.334400ms | 6.140258ms | 77.516255us | 374.771597ns | 373.926274ns | 375.798879ns | +| 32768 | 100 | 1 | 1794.495900ms | 12.533901ms | 194.663119us | 382.504294ns | 381.502333ns | 383.874395ns | +| 65536 | 100 | 1 | 3606.074100ms | 26.195382ms | 220.330699us | 399.709807ns | 399.088993ns | 400.406826ns | ## SV-SingleBattle-AnalyzeEffect-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 28.392300ms | 59.671590us | 10.904096us | 59.671590us | 58.390880us | 64.155750us | -| 2 | 100 | 1 | 30.458200ms | 70.570860us | 11.396619us | 35.285430us | 34.544185us | 37.282010us | -| 4 | 100 | 1 | 34.626700ms | 97.856090us | 13.430807us | 24.464022us | 24.043993us | 25.717188us | -| 8 | 100 | 1 | 21.254100ms | 131.764980us | 11.816756us | 16.470623us | 16.288770us | 17.027611us | -| 16 | 100 | 1 | 26.751400ms | 207.257750us | 23.573236us | 12.953609us | 12.760914us | 13.476947us | -| 32 | 100 | 1 | 42.332500ms | 343.716180us | 11.258859us | 10.741131us | 10.688969us | 10.838876us | -| 64 | 100 | 1 | 73.499300ms | 610.961130us | 14.187271us | 9.546268us | 9.507779us | 9.595822us | -| 128 | 100 | 1 | 133.245400ms | 1.129385ms | 15.356708us | 8.823319us | 8.803022us | 8.851097us | -| 256 | 100 | 1 | 244.058100ms | 2.136046ms | 25.333237us | 8.343931us | 8.328747us | 8.369920us | -| 512 | 100 | 1 | 467.665600ms | 4.138008ms | 44.674628us | 8.082047us | 8.066375us | 8.100877us | -| 1024 | 100 | 1 | 939.639800ms | 8.181446ms | 102.106135us | 7.989693us | 7.972043us | 8.011590us | -| 2048 | 100 | 1 | 1804.045000ms | 16.197987ms | 175.924811us | 7.909174us | 7.894771us | 7.929197us | -| 4096 | 100 | 1 | 3687.274400ms | 33.166555ms | 638.602762us | 8.097303us | 8.071121us | 8.133550us | -| 8192 | 100 | 1 | 8171.172100ms | 76.046720ms | 1.747123ms | 9.283047us | 9.249000us | 9.335619us | +| 1 | 100 | 1 | 24.474000ms | 58.555240us | 11.996965us | 58.555240us | 56.928190us | 62.329000us | +| 2 | 100 | 1 | 26.272700ms | 70.619310us | 11.547136us | 35.309655us | 34.565285us | 37.346450us | +| 4 | 100 | 1 | 32.165700ms | 91.564800us | 11.357525us | 22.891200us | 22.536423us | 23.927320us | +| 8 | 100 | 1 | 20.884200ms | 127.142210us | 9.495292us | 15.892776us | 15.755410us | 16.401896us | +| 16 | 100 | 1 | 26.323200ms | 201.356830us | 11.704184us | 12.584802us | 12.496835us | 12.875729us | +| 32 | 100 | 1 | 41.688000ms | 335.836750us | 12.341894us | 10.494898us | 10.442030us | 10.616107us | +| 64 | 100 | 1 | 73.047400ms | 601.399880us | 13.583558us | 9.396873us | 9.360062us | 9.444568us | +| 128 | 100 | 1 | 132.251500ms | 1.113533ms | 14.850447us | 8.699479us | 8.679062us | 8.724931us | +| 256 | 100 | 1 | 242.665300ms | 2.080519ms | 19.744797us | 8.127028us | 8.112994us | 8.143532us | +| 512 | 100 | 1 | 464.973600ms | 4.108628ms | 65.980314us | 8.024665us | 8.003110us | 8.055239us | +| 1024 | 100 | 1 | 906.636000ms | 8.187109ms | 160.062882us | 7.995224us | 7.971162us | 8.035848us | +| 2048 | 100 | 1 | 1815.363400ms | 16.137594ms | 191.713861us | 7.879685us | 7.862338us | 7.899305us | +| 4096 | 100 | 1 | 3633.650400ms | 32.633754ms | 649.965437us | 7.967225us | 7.941043us | 8.005272us | +| 8192 | 100 | 1 | 8576.133200ms | 78.869856ms | 2.478687ms | 9.627668us | 9.576243us | 9.696325us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 44.109000ms | 84.203320us | 20.478700us | 84.203320us | 80.940960us | 89.295670us | -| 2 | 100 | 1 | 45.938600ms | 92.868510us | 19.192629us | 46.434255us | 44.834730us | 48.714650us | -| 4 | 100 | 1 | 47.863300ms | 107.140790us | 23.002300us | 26.785197us | 25.853675us | 28.175915us | -| 8 | 100 | 1 | 51.333500ms | 125.930230us | 24.715273us | 15.741279us | 15.210028us | 16.436614us | -| 16 | 100 | 1 | 58.045500ms | 173.502140us | 32.529437us | 10.843884us | 10.476442us | 11.277882us | -| 32 | 100 | 1 | 65.482500ms | 240.570920us | 43.052472us | 7.517841us | 7.278008us | 7.809280us | -| 64 | 100 | 1 | 61.153100ms | 389.344460us | 78.384610us | 6.083507us | 5.866500us | 6.351753us | -| 128 | 100 | 1 | 102.833600ms | 648.482310us | 122.551332us | 5.066268us | 4.894333us | 5.271826us | -| 256 | 100 | 1 | 278.912600ms | 1.175155ms | 228.816810us | 4.590449us | 4.430584us | 4.782841us | -| 512 | 100 | 1 | 384.124500ms | 2.222170ms | 467.347159us | 4.340176us | 4.176985us | 4.536329us | -| 1024 | 100 | 1 | 750.405000ms | 5.049344ms | 1.026126ms | 4.931000us | 4.752802us | 5.148388us | -| 2048 | 100 | 1 | 1569.662400ms | 10.950154ms | 2.201658ms | 5.346755us | 5.153649us | 5.579888us | -| 4096 | 100 | 1 | 4218.994300ms | 24.479004ms | 5.435169ms | 5.976319us | 5.739909us | 6.266486us | -| 8192 | 100 | 1 | 5035.283200ms | 58.103781ms | 13.792881ms | 7.092747us | 6.794698us | 7.459009us | +| 1 | 100 | 1 | 34.695200ms | 85.375870us | 17.267549us | 85.375870us | 82.612170us | 89.663440us | +| 2 | 100 | 1 | 35.994600ms | 94.185540us | 19.604963us | 47.092770us | 45.537990us | 49.550955us | +| 4 | 100 | 1 | 38.303100ms | 106.575190us | 19.548136us | 26.643798us | 25.845545us | 27.844150us | +| 8 | 100 | 1 | 41.518400ms | 128.332240us | 21.910440us | 16.041530us | 15.553647us | 16.636646us | +| 16 | 100 | 1 | 48.214100ms | 169.379870us | 26.293725us | 10.586242us | 10.288232us | 10.936866us | +| 32 | 100 | 1 | 56.351800ms | 235.911590us | 36.592838us | 7.372237us | 7.163853us | 7.612416us | +| 64 | 100 | 1 | 52.641600ms | 370.170230us | 64.454416us | 5.783910us | 5.600788us | 5.997179us | +| 128 | 100 | 1 | 98.075200ms | 626.446140us | 111.705095us | 4.894110us | 4.736825us | 5.080794us | +| 256 | 100 | 1 | 247.289100ms | 1.130022ms | 210.518417us | 4.414149us | 4.267302us | 4.591511us | +| 512 | 100 | 1 | 318.371800ms | 2.142589ms | 418.305390us | 4.184743us | 4.037322us | 4.360070us | +| 1024 | 100 | 1 | 582.124200ms | 4.737882ms | 814.897105us | 4.626838us | 4.483280us | 4.796987us | +| 2048 | 100 | 1 | 1364.841000ms | 9.956639ms | 1.665891ms | 4.861640us | 4.714146us | 5.035216us | +| 4096 | 100 | 1 | 3059.447700ms | 21.120835ms | 3.645981ms | 5.156454us | 4.996585us | 5.348470us | +| 8192 | 100 | 1 | 4675.450300ms | 46.701595ms | 7.773633ms | 5.700878us | 5.524852us | 5.897215us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 42.201500ms | 85.653080us | 23.988525us | 85.653080us | 81.975640us | 91.914330us | -| 2 | 100 | 1 | 46.607900ms | 96.808370us | 21.323495us | 48.404185us | 46.605510us | 50.847175us | -| 4 | 100 | 1 | 49.009700ms | 109.843610us | 25.937607us | 27.460902us | 26.400527us | 29.035005us | -| 8 | 100 | 1 | 51.485200ms | 126.859620us | 25.911459us | 15.857452us | 15.295229us | 16.578599us | -| 16 | 100 | 1 | 57.567700ms | 170.392120us | 34.386288us | 10.649508us | 10.269952us | 11.117324us | -| 32 | 100 | 1 | 47.287700ms | 231.748030us | 42.469048us | 7.242126us | 7.001047us | 7.524955us | -| 64 | 100 | 1 | 81.358700ms | 362.492350us | 70.177293us | 5.663943us | 5.463955us | 5.895189us | -| 128 | 100 | 1 | 87.133800ms | 590.170450us | 118.725029us | 4.610707us | 4.444655us | 4.809498us | -| 256 | 100 | 1 | 164.291100ms | 1.057555ms | 221.641563us | 4.131076us | 3.977299us | 4.317517us | -| 512 | 100 | 1 | 201.003500ms | 2.022753ms | 442.939830us | 3.950690us | 3.797759us | 4.141310us | -| 1024 | 100 | 1 | 387.527300ms | 3.960816ms | 906.429239us | 3.867984us | 3.713188us | 4.062929us | -| 2048 | 100 | 1 | 628.812000ms | 8.208360ms | 1.974947ms | 4.007988us | 3.836707us | 4.219121us | -| 4096 | 100 | 1 | 2615.154600ms | 17.755908ms | 4.685549ms | 4.334938us | 4.134458us | 4.586882us | -| 8192 | 100 | 1 | 3254.125700ms | 40.308454ms | 11.730455ms | 4.920466us | 4.666864us | 5.235834us | +| 1 | 100 | 1 | 34.809900ms | 87.536850us | 17.924196us | 87.536850us | 84.566780us | 91.767030us | +| 2 | 100 | 1 | 37.812100ms | 98.412980us | 18.998222us | 49.206490us | 47.666350us | 51.503555us | +| 4 | 100 | 1 | 48.005600ms | 107.838950us | 18.674025us | 26.959737us | 26.172825us | 28.051313us | +| 8 | 100 | 1 | 50.689400ms | 126.722880us | 23.565195us | 15.840360us | 15.337939us | 16.503580us | +| 16 | 100 | 1 | 55.797900ms | 164.902100us | 25.875432us | 10.306381us | 10.011004us | 10.648586us | +| 32 | 100 | 1 | 62.259400ms | 226.375750us | 37.083054us | 7.074242us | 6.861190us | 7.316479us | +| 64 | 100 | 1 | 70.167600ms | 349.268560us | 63.085621us | 5.457321us | 5.275517us | 5.664418us | +| 128 | 100 | 1 | 83.455900ms | 562.132830us | 108.055687us | 4.391663us | 4.237967us | 4.570657us | +| 256 | 100 | 1 | 140.624600ms | 1.004176ms | 198.976707us | 3.922561us | 3.782422us | 4.089434us | +| 512 | 100 | 1 | 187.142100ms | 1.881124ms | 381.712030us | 3.674069us | 3.540346us | 3.835025us | +| 1024 | 100 | 1 | 363.585900ms | 3.632020ms | 746.555398us | 3.546894us | 3.416161us | 3.703873us | +| 2048 | 100 | 1 | 743.924300ms | 7.239117ms | 1.622727ms | 3.534725us | 3.395272us | 3.709036us | +| 4096 | 100 | 1 | 2008.898900ms | 14.560732ms | 2.974779ms | 3.554866us | 3.425164us | 3.712784us | +| 8192 | 100 | 1 | 2684.121400ms | 29.224074ms | 5.765311ms | 3.567392us | 3.441895us | 3.720486us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 45.020200ms | 85.286270us | 21.327183us | 85.286270us | 81.882440us | 90.580380us | -| 2 | 100 | 1 | 58.600100ms | 113.713530us | 27.550626us | 56.856765us | 54.731945us | 60.452920us | -| 4 | 100 | 1 | 47.723200ms | 145.805600us | 20.715191us | 36.451400us | 35.625608us | 37.750030us | -| 8 | 100 | 1 | 61.561300ms | 195.967030us | 20.631437us | 24.495879us | 24.089795us | 25.152018us | -| 16 | 100 | 1 | 69.761800ms | 268.623580us | 26.470043us | 16.788974us | 16.554834us | 17.280094us | -| 32 | 100 | 1 | 88.180700ms | 382.636930us | 21.629142us | 11.957404us | 11.851525us | 12.133614us | -| 64 | 100 | 1 | 88.622100ms | 609.546240us | 27.171097us | 9.524160us | 9.458754us | 9.636423us | -| 128 | 100 | 1 | 216.767300ms | 1.023856ms | 31.316165us | 7.998872us | 7.961049us | 8.062738us | -| 256 | 100 | 1 | 321.697500ms | 1.844912ms | 48.147205us | 7.206686us | 7.174662us | 7.250028us | -| 512 | 100 | 1 | 556.670000ms | 3.603662ms | 98.097462us | 7.038402us | 7.003118us | 7.078382us | -| 1024 | 100 | 1 | 1086.133300ms | 8.664668ms | 180.967908us | 8.461590us | 8.429681us | 8.499139us | -| 2048 | 100 | 1 | 2002.421600ms | 19.261439ms | 369.321049us | 9.405000us | 9.373084us | 9.444197us | -| 4096 | 100 | 1 | 4645.559500ms | 44.805628ms | 885.946322us | 10.938874us | 10.898563us | 10.983773us | -| 8192 | 100 | 1 | 11575.743400ms | 113.679222ms | 3.060292ms | 13.876858us | 13.810165us | 13.957394us | +| 1 | 100 | 1 | 45.225300ms | 90.816830us | 25.862444us | 90.816830us | 87.052270us | 98.208560us | +| 2 | 100 | 1 | 59.073600ms | 109.038650us | 24.364619us | 54.519325us | 52.698875us | 57.816235us | +| 4 | 100 | 1 | 40.090900ms | 139.934700us | 19.358285us | 34.983675us | 34.197030us | 36.167490us | +| 8 | 100 | 1 | 53.796600ms | 180.707190us | 23.235144us | 22.588399us | 22.167967us | 23.414639us | +| 16 | 100 | 1 | 64.691600ms | 250.302750us | 25.401072us | 15.643922us | 15.412261us | 16.090911us | +| 32 | 100 | 1 | 78.032000ms | 352.438890us | 21.997478us | 11.013715us | 10.904546us | 11.187875us | +| 64 | 100 | 1 | 80.000600ms | 568.101710us | 26.083210us | 8.876589us | 8.816735us | 8.992329us | +| 128 | 100 | 1 | 194.149000ms | 946.673200us | 35.030002us | 7.395884us | 7.349902us | 7.458931us | +| 256 | 100 | 1 | 281.064800ms | 1.700278ms | 70.183183us | 6.641711us | 6.596284us | 6.706343us | +| 512 | 100 | 1 | 477.226700ms | 3.428246ms | 287.000872us | 6.695793us | 6.610554us | 6.846455us | +| 1024 | 100 | 1 | 886.970000ms | 7.953743ms | 406.694995us | 7.767328us | 7.691513us | 7.846493us | +| 2048 | 100 | 1 | 1776.386500ms | 16.983496ms | 422.462889us | 8.292723us | 8.254522us | 8.335611us | +| 4096 | 100 | 1 | 3797.644500ms | 37.128415ms | 853.668270us | 9.064554us | 9.025148us | 9.107102us | +| 8192 | 100 | 1 | 8591.049000ms | 85.192377ms | 1.450161ms | 10.399460us | 10.365998us | 10.435410us | ## SV-SingleBattle-CalcDamage-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 11.665500ms | 13.987720us | 6.789775us | 13.987720us | 12.792340us | 15.490780us | -| 2 | 100 | 1 | 12.801500ms | 16.809070us | 9.479295us | 8.404535us | 7.571345us | 9.461235us | -| 4 | 100 | 1 | 9.897300ms | 18.085560us | 10.371308us | 4.521390us | 4.091168us | 5.137058us | -| 8 | 100 | 1 | 10.308700ms | 21.665730us | 10.001050us | 2.708216us | 2.456565us | 2.945630us | -| 16 | 100 | 1 | 11.137600ms | 30.997610us | 14.911004us | 1.937351us | 1.752416us | 2.118139us | -| 32 | 100 | 1 | 12.260200ms | 45.213850us | 23.631620us | 1.412933us | 1.272616us | 1.563103us | -| 64 | 100 | 1 | 21.729900ms | 76.418640us | 40.793876us | 1.194041us | 1.070410us | 1.320185us | -| 128 | 100 | 1 | 53.887000ms | 137.749700us | 76.557228us | 1.076170us | 959.408828ns | 1.193286us | -| 256 | 100 | 1 | 79.420500ms | 259.766050us | 141.170651us | 1.014711us | 904.263984ns | 1.120786us | -| 512 | 100 | 1 | 179.802900ms | 469.161320us | 284.242091us | 916.330703ns | 805.905215ns | 1.023834us | -| 1024 | 100 | 1 | 345.920300ms | 1.153964ms | 682.004977us | 1.126918us | 993.459326ns | 1.255033us | -| 2048 | 100 | 1 | 686.825100ms | 2.443393ms | 1.391340ms | 1.193063us | 1.055949us | 1.322409us | -| 4096 | 100 | 1 | 1333.409400ms | 5.020190ms | 2.951563ms | 1.225632us | 1.080028us | 1.363211us | -| 8192 | 100 | 1 | 2806.694200ms | 11.088440ms | 6.605879ms | 1.353569us | 1.191028us | 1.508527us | +| 1 | 100 | 1 | 10.693700ms | 13.182920us | 5.506243us | 13.182920us | 12.355840us | 14.672990us | +| 2 | 100 | 1 | 11.665000ms | 14.783270us | 5.929433us | 7.391635us | 6.910800us | 8.117920us | +| 4 | 100 | 1 | 12.254100ms | 17.547610us | 8.814009us | 4.386902us | 4.060155us | 4.989380us | +| 8 | 100 | 1 | 13.229900ms | 21.821700us | 9.761407us | 2.727712us | 2.524870us | 3.017420us | +| 16 | 100 | 1 | 10.092600ms | 29.812520us | 12.318131us | 1.863282us | 1.719562us | 2.020986us | +| 32 | 100 | 1 | 10.874400ms | 43.893240us | 17.985407us | 1.371664us | 1.259389us | 1.479581us | +| 64 | 100 | 1 | 18.273100ms | 75.855480us | 34.642189us | 1.185242us | 1.078218us | 1.290615us | +| 128 | 100 | 1 | 48.516600ms | 135.045570us | 67.986057us | 1.055044us | 950.821250ns | 1.159811us | +| 256 | 100 | 1 | 84.326700ms | 253.459410us | 129.125292us | 990.075820ns | 890.776406ns | 1.089270us | +| 512 | 100 | 1 | 162.363500ms | 459.114440us | 266.199680us | 896.707891ns | 794.046465ns | 997.776387ns | +| 1024 | 100 | 1 | 320.754500ms | 1.093333ms | 624.162230us | 1.067708us | 945.987549ns | 1.184998us | +| 2048 | 100 | 1 | 621.675000ms | 2.190485ms | 1.223562ms | 1.069573us | 950.419155ns | 1.184678us | +| 4096 | 100 | 1 | 1253.136700ms | 4.632213ms | 2.581643ms | 1.130911us | 1.005617us | 1.252791us | +| 8192 | 100 | 1 | 1615.160900ms | 9.997183ms | 5.764058ms | 1.220359us | 1.080249us | 1.355587us | ## SV-SingleBattle-CalcDamage-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 11.817200ms | 14.357930us | 8.212114us | 14.357930us | 12.989060us | 16.322960us | -| 2 | 100 | 1 | 12.309300ms | 20.317180us | 28.053676us | 10.158590us | 8.591745us | 16.443885us | -| 4 | 100 | 1 | 12.104500ms | 20.213730us | 5.592307us | 5.053432us | 4.845623us | 5.435725us | -| 8 | 100 | 1 | 13.240400ms | 24.564760us | 5.927845us | 3.070595us | 2.959960us | 3.271049us | -| 16 | 100 | 1 | 13.907000ms | 31.812250us | 5.889463us | 1.988266us | 1.932451us | 2.085397us | -| 32 | 100 | 1 | 15.716900ms | 45.118750us | 5.739531us | 1.409961us | 1.381665us | 1.455471us | -| 64 | 100 | 1 | 18.034800ms | 73.569760us | 7.486963us | 1.149527us | 1.129633us | 1.176284us | -| 128 | 100 | 1 | 25.187600ms | 127.309230us | 10.563699us | 994.603359ns | 980.715312ns | 1.013768us | -| 256 | 100 | 1 | 36.722000ms | 229.405570us | 11.751329us | 896.115508ns | 888.073984ns | 906.390352ns | -| 512 | 100 | 1 | 40.822900ms | 443.643510us | 14.910161us | 866.491230ns | 861.049004ns | 872.490020ns | -| 1024 | 100 | 1 | 87.893800ms | 857.520890us | 20.255035us | 837.422744ns | 833.660752ns | 841.387607ns | -| 2048 | 100 | 1 | 176.221100ms | 1.672086ms | 48.191428us | 816.448203ns | 812.961270ns | 822.905449ns | -| 4096 | 100 | 1 | 341.103200ms | 3.297574ms | 57.697188us | 805.071829ns | 802.473005ns | 808.004026ns | -| 8192 | 100 | 1 | 676.538600ms | 6.579690ms | 108.853966us | 803.184771ns | 800.621213ns | 805.846168ns | +| 1 | 100 | 1 | 11.288200ms | 13.057090us | 5.439241us | 13.057090us | 12.248800us | 14.560680us | +| 2 | 100 | 1 | 10.296400ms | 15.222880us | 4.566283us | 7.611440us | 7.281720us | 8.270345us | +| 4 | 100 | 1 | 10.225900ms | 17.500350us | 4.747871us | 4.375087us | 4.213468us | 4.748875us | +| 8 | 100 | 1 | 11.613800ms | 21.333240us | 4.824477us | 2.666655us | 2.583117us | 2.852925us | +| 16 | 100 | 1 | 12.623700ms | 28.853410us | 5.284994us | 1.803338us | 1.754194us | 1.893300us | +| 32 | 100 | 1 | 12.876000ms | 45.275350us | 33.993172us | 1.414855us | 1.299240us | 1.868001us | +| 64 | 100 | 1 | 15.839300ms | 74.121750us | 35.610841us | 1.158152us | 1.096680us | 1.401245us | +| 128 | 100 | 1 | 13.093500ms | 116.470100us | 6.473620us | 909.922656ns | 900.600547ns | 920.565000ns | +| 256 | 100 | 1 | 23.714100ms | 221.367740us | 9.594152us | 864.717734ns | 857.528828ns | 872.259805ns | +| 512 | 100 | 1 | 39.670500ms | 425.004210us | 12.620918us | 830.086348ns | 825.434316ns | 835.084355ns | +| 1024 | 100 | 1 | 84.017500ms | 818.896910us | 19.702257us | 799.704014ns | 795.960000ns | 803.472695ns | +| 2048 | 100 | 1 | 166.129300ms | 1.596851ms | 37.232440us | 779.712446ns | 776.405933ns | 783.560757ns | +| 4096 | 100 | 1 | 332.244700ms | 3.181485ms | 65.814086us | 776.729724ns | 773.756147ns | 780.064033ns | +| 8192 | 100 | 1 | 645.062700ms | 6.318617ms | 116.451480us | 771.315491ns | 768.640239ns | 774.241304ns | ## SV-SingleBattle-CalcDamage-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 11.707700ms | 13.881870us | 7.553282us | 13.881870us | 12.606100us | 15.626400us | -| 2 | 100 | 1 | 11.337900ms | 17.686430us | 7.169079us | 8.843215us | 8.373055us | 10.037170us | -| 4 | 100 | 1 | 12.508300ms | 20.884350us | 7.116996us | 5.221087us | 4.980415us | 5.791995us | -| 8 | 100 | 1 | 13.032300ms | 26.255370us | 8.148680us | 3.281921us | 3.145665us | 3.614787us | -| 16 | 100 | 1 | 15.171200ms | 36.738350us | 9.708960us | 2.296147us | 2.216166us | 2.497204us | -| 32 | 100 | 1 | 18.830900ms | 56.017790us | 10.553824us | 1.750556us | 1.707417us | 1.862329us | -| 64 | 100 | 1 | 33.078400ms | 94.990340us | 9.846966us | 1.484224us | 1.460863us | 1.525379us | -| 128 | 100 | 1 | 57.816800ms | 171.986770us | 17.027795us | 1.343647us | 1.323814us | 1.379665us | -| 256 | 100 | 1 | 99.974500ms | 325.240960us | 16.494467us | 1.270473us | 1.259546us | 1.285546us | -| 512 | 100 | 1 | 190.061500ms | 634.323610us | 61.096974us | 1.238913us | 1.222405us | 1.275632us | -| 1024 | 100 | 1 | 362.361100ms | 1.689196ms | 88.940301us | 1.649605us | 1.635643us | 1.671002us | -| 2048 | 100 | 1 | 754.599300ms | 3.750632ms | 161.876190us | 1.831363us | 1.819267us | 1.852049us | -| 4096 | 100 | 1 | 1478.448800ms | 8.618165ms | 113.289162us | 2.104044us | 2.098845us | 2.109696us | -| 8192 | 100 | 1 | 2928.204400ms | 19.086635ms | 259.428218us | 2.329911us | 2.324362us | 2.336895us | +| 1 | 100 | 1 | 11.414200ms | 13.276100us | 5.601076us | 13.276100us | 12.422220us | 14.747580us | +| 2 | 100 | 1 | 8.308800ms | 15.902100us | 6.242244us | 7.951050us | 7.532865us | 8.975810us | +| 4 | 100 | 1 | 11.126300ms | 18.010590us | 3.784443us | 4.502648us | 4.375368us | 4.806132us | +| 8 | 100 | 1 | 11.819700ms | 23.843620us | 7.254938us | 2.980452us | 2.859656us | 3.279584us | +| 16 | 100 | 1 | 14.080800ms | 33.067530us | 7.192671us | 2.066721us | 2.003518us | 2.203933us | +| 32 | 100 | 1 | 16.976200ms | 50.940990us | 6.259665us | 1.591906us | 1.560955us | 1.641317us | +| 64 | 100 | 1 | 29.825600ms | 89.514280us | 11.413419us | 1.398661us | 1.371926us | 1.446989us | +| 128 | 100 | 1 | 49.993600ms | 163.182450us | 15.947358us | 1.274863us | 1.256795us | 1.310190us | +| 256 | 100 | 1 | 69.337500ms | 310.545460us | 18.818575us | 1.213068us | 1.202082us | 1.233298us | +| 512 | 100 | 1 | 106.232300ms | 613.151760us | 38.555528us | 1.197562us | 1.184011us | 1.213894us | +| 1024 | 100 | 1 | 206.819900ms | 1.619897ms | 113.747748us | 1.581930us | 1.562395us | 1.606568us | +| 2048 | 100 | 1 | 415.743100ms | 3.382844ms | 123.035604us | 1.651779us | 1.641265us | 1.665155us | +| 4096 | 100 | 1 | 870.633500ms | 7.669365ms | 108.031069us | 1.872403us | 1.867617us | 1.877980us | +| 8192 | 100 | 1 | 1773.492500ms | 17.368752ms | 353.700322us | 2.120209us | 2.112211us | 2.129182us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 37.828400ms | 119.511480us | 39.723899us | 119.511480us | 110.546450us | 126.321570us | -| 2 | 100 | 1 | 46.329700ms | 170.944420us | 56.950317us | 85.472210us | 78.903175us | 90.269815us | -| 4 | 100 | 1 | 59.400900ms | 263.678520us | 87.705105us | 65.919630us | 60.796698us | 69.602833us | -| 8 | 100 | 1 | 83.107600ms | 441.236780us | 148.042880us | 55.154598us | 50.804676us | 58.224291us | -| 16 | 100 | 1 | 118.418300ms | 779.017630us | 274.366277us | 48.688602us | 44.694068us | 51.573637us | -| 32 | 100 | 1 | 186.828400ms | 1.471813ms | 520.569391us | 45.994163us | 42.203682us | 48.712051us | -| 64 | 100 | 1 | 387.219000ms | 2.837813ms | 1.008693ms | 44.340824us | 40.623371us | 46.961894us | -| 128 | 100 | 1 | 800.385600ms | 5.488720ms | 1.950870ms | 42.880626us | 39.297904us | 45.430938us | -| 256 | 100 | 1 | 1532.705900ms | 10.902448ms | 3.883943ms | 42.587687us | 39.068419us | 45.126118us | -| 512 | 100 | 1 | 3273.427800ms | 22.883527ms | 8.214830ms | 44.694390us | 40.947714us | 47.354635us | -| 1024 | 100 | 1 | 7781.346800ms | 57.320813ms | 20.637741ms | 55.977356us | 51.299153us | 59.349681us | -| 2048 | 100 | 1 | 14141.893900ms | 131.858312ms | 47.029499ms | 64.383942us | 59.000790us | 68.199793us | -| 4096 | 100 | 1 | 30474.678200ms | 280.956865ms | 100.076290ms | 68.592985us | 62.909545us | 72.660986us | +| 1 | 100 | 1 | 19.242200ms | 113.750670us | 39.257362us | 113.750670us | 104.957080us | 120.520780us | +| 2 | 100 | 1 | 23.342900ms | 163.660400us | 55.008293us | 81.830200us | 75.576850us | 86.524970us | +| 4 | 100 | 1 | 35.989200ms | 258.799750us | 86.733160us | 64.699938us | 59.633897us | 68.355985us | +| 8 | 100 | 1 | 60.036300ms | 441.128670us | 147.537211us | 55.141084us | 50.809276us | 58.202946us | +| 16 | 100 | 1 | 119.080900ms | 767.155250us | 270.519669us | 47.947203us | 43.989191us | 50.786746us | +| 32 | 100 | 1 | 183.825900ms | 1.427266ms | 505.020716us | 44.602051us | 40.917186us | 47.241072us | +| 64 | 100 | 1 | 378.083900ms | 2.758346ms | 979.472917us | 43.099159us | 39.530846us | 45.669090us | +| 128 | 100 | 1 | 768.736700ms | 5.320131ms | 1.892549ms | 41.563525us | 38.097039us | 44.036872us | +| 256 | 100 | 1 | 1506.985900ms | 10.670412ms | 3.824515ms | 41.681298us | 38.193117us | 44.196862us | +| 512 | 100 | 1 | 3213.256200ms | 22.529488ms | 8.093681ms | 44.002906us | 40.312809us | 46.632026us | +| 1024 | 100 | 1 | 8066.435900ms | 57.763368ms | 20.725942ms | 56.409539us | 51.702219us | 59.801341us | +| 2048 | 100 | 1 | 14085.102700ms | 132.137078ms | 47.088954ms | 64.520058us | 59.074837us | 68.334073us | +| 4096 | 100 | 1 | 29689.094700ms | 277.304770ms | 98.815939ms | 67.701360us | 62.045641us | 71.718581us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 37.637900ms | 113.877830us | 38.412592us | 113.877830us | 105.367400us | 120.611050us | -| 2 | 100 | 1 | 49.979600ms | 154.573150us | 26.858975us | 77.286575us | 73.896335us | 79.409980us | -| 4 | 100 | 1 | 50.837600ms | 206.042420us | 23.463253us | 51.510605us | 50.328027us | 52.634755us | -| 8 | 100 | 1 | 43.473700ms | 306.914190us | 27.226909us | 38.364274us | 37.644241us | 38.984949us | -| 16 | 100 | 1 | 62.684100ms | 508.832910us | 41.139533us | 31.802057us | 31.311440us | 32.315256us | -| 32 | 100 | 1 | 101.326200ms | 887.082570us | 53.194011us | 27.721330us | 27.401242us | 28.051255us | -| 64 | 100 | 1 | 183.288100ms | 1.728512ms | 95.252739us | 27.007994us | 26.720963us | 27.307024us | -| 128 | 100 | 1 | 576.401700ms | 5.229810ms | 154.546446us | 40.857888us | 40.622199us | 41.097733us | -| 256 | 100 | 1 | 1165.396000ms | 11.370964ms | 341.425336us | 44.417828us | 44.160152us | 44.681060us | -| 512 | 100 | 1 | 2855.276500ms | 28.231802ms | 719.930404us | 55.140238us | 54.872190us | 55.423214us | -| 1024 | 100 | 1 | 7213.498400ms | 69.863460ms | 2.005499ms | 68.226035us | 67.859511us | 68.630532us | -| 2048 | 100 | 1 | 16154.411700ms | 166.317744ms | 3.006831ms | 81.209836us | 80.921955us | 81.494267us | -| 4096 | 100 | 1 | 43766.385800ms | 388.091782ms | 8.592756ms | 94.748970us | 94.434741us | 95.321049us | +| 1 | 100 | 1 | 36.544500ms | 112.292570us | 38.481782us | 112.292570us | 103.786710us | 119.089540us | +| 2 | 100 | 1 | 48.318600ms | 149.157030us | 27.359835us | 74.578515us | 71.295610us | 76.836620us | +| 4 | 100 | 1 | 49.264000ms | 201.802550us | 22.146888us | 50.450637us | 49.323352us | 51.497457us | +| 8 | 100 | 1 | 42.461800ms | 300.872270us | 27.015813us | 37.609034us | 36.889897us | 38.221668us | +| 16 | 100 | 1 | 61.316800ms | 491.930520us | 38.165062us | 30.745658us | 30.290282us | 31.225440us | +| 32 | 100 | 1 | 99.827500ms | 879.617250us | 51.332393us | 27.488039us | 27.176748us | 27.804264us | +| 64 | 100 | 1 | 181.603300ms | 1.711900ms | 92.886515us | 26.748445us | 26.464875us | 27.031945us | +| 128 | 100 | 1 | 567.009300ms | 5.102210ms | 146.599056us | 39.861016us | 39.641013us | 40.088013us | +| 256 | 100 | 1 | 1147.618500ms | 11.136857ms | 322.467143us | 43.503348us | 43.255864us | 43.750040us | +| 512 | 100 | 1 | 2827.583400ms | 28.372058ms | 679.705000us | 55.414177us | 55.153048us | 55.673880us | +| 1024 | 100 | 1 | 6942.700200ms | 70.199774ms | 2.038705ms | 68.554467us | 68.182769us | 68.961704us | +| 2048 | 100 | 1 | 15959.723700ms | 167.418312ms | 3.292425ms | 81.747223us | 81.431201us | 82.061785us | +| 4096 | 100 | 1 | 42363.027100ms | 393.018996ms | 8.533078ms | 95.951903us | 95.568123us | 96.389717us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 33.774100ms | 115.726350us | 38.773720us | 115.726350us | 107.027050us | 122.465840us | -| 2 | 100 | 1 | 55.878600ms | 186.478590us | 36.985204us | 93.239295us | 89.415110us | 96.689255us | -| 4 | 100 | 1 | 45.676000ms | 313.589460us | 37.997134us | 78.397365us | 76.507115us | 80.236040us | -| 8 | 100 | 1 | 68.163500ms | 526.231180us | 45.636559us | 65.778897us | 64.576334us | 66.812641us | -| 16 | 100 | 1 | 126.036400ms | 959.251580us | 67.315535us | 59.953224us | 59.106113us | 60.757346us | -| 32 | 100 | 1 | 228.372500ms | 1.787970ms | 95.717700us | 55.874076us | 55.292789us | 56.459556us | -| 64 | 100 | 1 | 447.514800ms | 3.427528ms | 151.684155us | 53.555124us | 53.075908us | 54.008230us | -| 128 | 100 | 1 | 862.948200ms | 6.575023ms | 205.504859us | 51.367371us | 51.048733us | 51.678935us | -| 256 | 100 | 1 | 1856.923400ms | 13.063530ms | 451.098351us | 51.029413us | 50.707044us | 51.401137us | -| 512 | 100 | 1 | 3549.045400ms | 30.516777ms | 3.311685ms | 59.603080us | 58.510747us | 61.091807us | -| 1024 | 100 | 1 | 8027.162500ms | 77.230871ms | 2.758960ms | 75.420773us | 74.939729us | 76.004797us | -| 2048 | 100 | 1 | 16896.815800ms | 167.318155ms | 2.426699ms | 81.698318us | 81.466807us | 81.930520us | -| 4096 | 100 | 1 | 34920.998900ms | 355.883875ms | 5.145145ms | 86.885712us | 86.653022us | 87.148250us | +| 1 | 100 | 1 | 32.653500ms | 113.680170us | 38.403727us | 113.680170us | 105.403460us | 120.568680us | +| 2 | 100 | 1 | 53.621500ms | 180.854960us | 32.791123us | 90.427480us | 86.742940us | 93.283315us | +| 4 | 100 | 1 | 44.415400ms | 298.041510us | 33.945505us | 74.510378us | 72.752850us | 76.082777us | +| 8 | 100 | 1 | 66.847000ms | 518.581030us | 46.856512us | 64.822629us | 63.601356us | 65.892157us | +| 16 | 100 | 1 | 123.580700ms | 940.561590us | 66.591066us | 58.785099us | 57.946878us | 59.577976us | +| 32 | 100 | 1 | 222.007600ms | 1.775251ms | 92.689523us | 55.476579us | 54.899408us | 56.031337us | +| 64 | 100 | 1 | 439.581700ms | 3.410159ms | 141.671874us | 53.283730us | 52.836187us | 53.705146us | +| 128 | 100 | 1 | 815.239000ms | 6.420998ms | 199.428102us | 50.164045us | 49.855009us | 50.463313us | +| 256 | 100 | 1 | 1737.627300ms | 12.920832ms | 560.552604us | 50.472000us | 50.063322us | 50.926228us | +| 512 | 100 | 1 | 3540.421200ms | 28.468145ms | 1.403576ms | 55.601846us | 55.085855us | 56.158071us | +| 1024 | 100 | 1 | 7860.392700ms | 74.505971ms | 2.072923ms | 72.759738us | 72.377871us | 73.173092us | +| 2048 | 100 | 1 | 16590.917500ms | 166.923047ms | 2.150061ms | 81.505394us | 81.308571us | 81.721565us | +| 4096 | 100 | 1 | 34875.037300ms | 350.612518ms | 3.360694ms | 85.598759us | 85.444323us | 85.765742us | diff --git a/src/CalcDamage/CalcDamage.cpp b/src/CalcDamage/CalcDamage.cpp index 95ba4d6a..b6c7ab94 100644 --- a/src/CalcDamage/CalcDamage.cpp +++ b/src/CalcDamage/CalcDamage.cpp @@ -51,6 +51,10 @@ namespace pokesim::calc_damage { namespace { +auto getMoveFilter(Simulation& simulation) { + return pokesim::internal::EntityFilter{simulation}; +} + void clearRunVariables(Simulation& simulation) { simulation.registry.clear< tags::Crit, @@ -262,7 +266,7 @@ void applySideDamageRollOptions(Simulation& simulation) { isSimulateTurn || isCalculateDamage || isAnalyzeEffect, "Using a type that isn't a valid simulation tag."); - pokesim::internal::EntityFilter moveFilter{simulation}; + pokesim::internal::EntityFilter moveFilter{simulation}; if (moveFilter.hasNoneSelected()) { return; } @@ -289,6 +293,7 @@ void applySideDamageRollOptions(Simulation& simulation) { if (damageRollOptions.sidesMatch()) { moveFilter.template addToSelected(); + simulation.removeFromEntities(); if constexpr (onlyPassDamageRoll) { ApplyDamageRollKind(simulation, damageRollOptions.getP1()); } @@ -301,6 +306,7 @@ void applySideDamageRollOptions(Simulation& simulation) { moveFilter.template view(); simulation.addToEntities(); + simulation.removeFromEntities(); if constexpr (onlyPassDamageRoll) { ApplyDamageRollKind(simulation, damageRollOptions.getP1()); } @@ -310,6 +316,7 @@ void applySideDamageRollOptions(Simulation& simulation) { simulation.registry.clear(); simulation.addToEntities(); + simulation.removeFromEntities(); if constexpr (onlyPassDamageRoll) { ApplyDamageRollKind(simulation, damageRollOptions.getP2()); } @@ -419,11 +426,13 @@ void resetEffectiveAndDefendingStat(types::registry& registry, Defender defender template void setUnboostedStat(Simulation& simulation) { static constexpr bool forAttacker = std::is_same_v; + auto moveFilter = getMoveFilter(simulation); + if constexpr (forAttacker) { - simulation.viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); } else { - simulation.viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); } if (simulation.registry.view().empty()) { @@ -452,34 +461,31 @@ void setUnboostedStat(Simulation& simulation) { } if constexpr (forAttacker) { - simulation - .viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); } else { - simulation - .viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); } simulation.registry.clear(); } void setDamageFormulaVariables(Simulation& simulation) { - simulation.viewForSelectedMoves(); + auto moveFilter = getMoveFilter(simulation); + moveFilter.view(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); - // simulation.viewForSelectedMoves, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); + // moveFilter.view, Tags>(); - // simulation.viewForSelectedPokemon>(); + // moveFilter.view>(); setUnboostedStat(simulation); setUnboostedStat(simulation); @@ -489,15 +495,16 @@ void setDamageFormulaVariables(Simulation& simulation) { } void setDamageRollModifiers(Simulation& simulation) { - simulation.viewForSelectedMoves(); - simulation.viewForSelectedMoves(simulation.pokedex()); + auto moveFilter = getMoveFilter(simulation); + moveFilter.view(); + moveFilter.view(simulation.pokedex()); dex::Burn::onSetDamageRollModifiers(simulation); runModifyDamageEvent(simulation); } void calcDamage(Simulation& simulation) { - pokesim::internal::SelectForCurrentActionMoveView<> selectedMoves{simulation, entt::exclude}; - if (selectedMoves.hasNoneSelected()) { + auto moveFilter = getMoveFilter(simulation); + if (moveFilter.hasNoneSelected()) { return; } @@ -512,11 +519,11 @@ void calcDamage(Simulation& simulation) { runBasePowerEvent(simulation); setDamageFormulaVariables(simulation); - simulation.viewForSelectedMoves(); - simulation.viewForSelectedMoves>( + moveFilter.view(); + moveFilter.view>( simulation.pokedex().getStaticValue()); - simulation.addToEntities(); + simulation.addToEntities(); setDamageRollModifiers(simulation); applySideDamageRollOptions>(simulation); diff --git a/src/CalcDamage/CalcDamageDebugChecks.hpp b/src/CalcDamage/CalcDamageDebugChecks.hpp index 04741d6b..9af451b6 100644 --- a/src/CalcDamage/CalcDamageDebugChecks.hpp +++ b/src/CalcDamage/CalcDamageDebugChecks.hpp @@ -85,8 +85,13 @@ struct Checks : pokesim::debug::Checks { std::size_t calcDamageCount = 0U; std::size_t analyzeEffectCount = 0U; + types::entityVector getMoveList() const { + auto view = registry->view(); + return {view.begin(), view.end()}; + } + void checkMoveInputs() { - CurrentActionMovesAsSource moves{simulation->selectedMoveEntities()}; + CurrentActionMovesAsSource moves{getMoveList()}; for (types::entity move : moves.val) { if (has(move)) continue; @@ -292,7 +297,7 @@ struct Checks : pokesim::debug::Checks { } void checkMoveOutputs() const { - for (types::entity move : simulation->selectedMoveEntities()) { + for (types::entity move : getMoveList()) { if (has(move)) continue; pokesim::debug::TypesToIgnore typesToIgnore{}; diff --git a/src/Pokedex/Events/EffectEvents.cpp b/src/Pokedex/Events/EffectEvents.cpp index 90902df9..c285c271 100644 --- a/src/Pokedex/Events/EffectEvents.cpp +++ b/src/Pokedex/Events/EffectEvents.cpp @@ -72,8 +72,7 @@ void choiceLockOnDisableMove( } // namespace void Burn::onSetDamageRollModifiers(Simulation& simulation) { - simulation - .viewForSelectedPokemon /*, entt::exclude */>(); + simulation.view /*, entt::exclude */>(); } void Burn::onResidual(Simulation& simulation) { diff --git a/src/Pokedex/Events/ItemEvents.cpp b/src/Pokedex/Events/ItemEvents.cpp index 0c533b47..f1e1c99d 100644 --- a/src/Pokedex/Events/ItemEvents.cpp +++ b/src/Pokedex/Events/ItemEvents.cpp @@ -115,9 +115,7 @@ void AssaultVest::onEnd(Simulation& simulation) { void BrightPowder::onModifyAccuracy(Simulation& simulation) { const auto numerator = simulation.pokedex().getStaticValue(); const auto denominator = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon, Tags>( - numerator, - denominator); + simulation.view, Tags>(numerator, denominator); } void ChoiceScarf::onModifySpe(Simulation& simulation) { @@ -166,9 +164,7 @@ void FocusSash::onDamage(Simulation& simulation) { void LifeOrb::onModifyDamage(Simulation& simulation) { const auto numerator = simulation.pokedex().getStaticValue(); const auto denominator = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon, Tags>( - numerator, - denominator); + simulation.view, Tags>(numerator, denominator); } void LifeOrb::onAfterMoveUsed(Simulation& simulation) { diff --git a/src/Pokedex/Events/MoveEvents.cpp b/src/Pokedex/Events/MoveEvents.cpp index 277134df..d182dd60 100644 --- a/src/Pokedex/Events/MoveEvents.cpp +++ b/src/Pokedex/Events/MoveEvents.cpp @@ -16,7 +16,7 @@ namespace pokesim::dex { namespace { void knockOffOnBasePowerCheckRemovableItem( - types::registry& registry, CurrentActionSource source, CurrentActionTarget target) { + types::registry& registry, CurrentActionSource source, CurrentActionTarget target, EventModifier&) { if (registry.get(source.val).val > Constants::PokemonCurrentHpStat::MIN) { registry.emplace_or_replace(target.val); } @@ -40,9 +40,9 @@ void knockOffOnBasePower( void KnockOff::onBasePower(Simulation& simulation) { const auto modifier = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedMoves>(); + simulation.view>(); checkIfCanRemoveItem(simulation); - simulation.viewForSelectedMoves>(modifier); + simulation.view>(modifier); simulation.registry.clear(); } diff --git a/src/Simulation/MoveHitSteps.cpp b/src/Simulation/MoveHitSteps.cpp index 39471a06..5ee33e0e 100644 --- a/src/Simulation/MoveHitSteps.cpp +++ b/src/Simulation/MoveHitSteps.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -45,15 +46,13 @@ void removeHitCountFromFaintedTargets(types::handle moveHandle, CurrentActionTar template void runMoveHitCheck(Simulation& simulation) { - simulation.addToEntities(); - - internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) { + if (simulation.registry.view().empty()) { return; } + simulation.addToEntities(); + Function(simulation); - selectedMoves.deselect(); simulation.view>(); simulation.registry.clear(); @@ -79,14 +78,14 @@ void setEffectTarget(types::handle handle, TargetEntityHolder target) { } void runMoveEffects(Simulation& simulation) { - internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) { + internal::EntityFilter moveFilter{simulation}; + if (moveFilter.hasNoneSelected()) { return; } - simulation.viewForSelectedMoves(); - simulation.viewForSelectedMoves, Tags>(); - simulation.viewForSelectedMoves, Tags>(); + moveFilter.view(); + moveFilter.view, Tags>(); + moveFilter.view, Tags>(); tryBoost(simulation); trySetStatus(simulation); @@ -125,17 +124,15 @@ void removeFaintedSecondaryEffectTarget( // exists that has a random chance to add a side or field affect regardless of the target's HP, then this function will // need to be reworked. void removeFaintedSecondaryEffectTargets(Simulation& simulation) { - internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - if (selectedMoves.hasNoneSelected()) { + internal::EntityFilter moveFilter{simulation}; + if (moveFilter.hasNoneSelected()) { return; } - simulation.viewForSelectedMoves< - removeFaintedSecondaryEffectTarget, - Tags>(simulation.simulateTurnOptions); - simulation.viewForSelectedMoves< - removeFaintedSecondaryEffectTarget, - Tags>(simulation.simulateTurnOptions); + moveFilter.view, Tags>( + simulation.simulateTurnOptions); + moveFilter.view, Tags>( + simulation.simulateTurnOptions); } // TODO(aed3): When adding damage source, change this to accept the move's handle and CurrentActionSource to pass to @@ -161,7 +158,7 @@ void setMoveHitCount(Simulation& simulation) { } void applyDamage(Simulation& simulation) { - simulation.viewForSelectedMoves(); + simulation.view(); auto view = simulation.registry.view(entt::exclude); simulation.registry.insert(view.begin(), view.end()); @@ -206,11 +203,6 @@ void moveHitLoop(Simulation& simulation) { while (!simulation.registry.view().empty()) { POKESIM_REQUIRE(iterations <= MoveHitLimits::MAX, "More hits were ran more than possible."); - internal::SelectForCurrentActionMoveView selectedMoves{simulation}; - POKESIM_REQUIRE( - !selectedMoves.hasNoneSelected(), - "HitCount should only be present on active moves, meaning this loop should only be entered if there are moves to " - "select."); calc_damage::run(simulation); // 1. call to this.battle.getDamage runDamageEvent(simulation); diff --git a/src/Simulation/RunEvent.cpp b/src/Simulation/RunEvent.cpp index 119190c2..0886c33d 100644 --- a/src/Simulation/RunEvent.cpp +++ b/src/Simulation/RunEvent.cpp @@ -60,22 +60,22 @@ void runResidual(Simulation& simulation) { void runAccuracyEvent(Simulation&) {} void runModifyAccuracyEvent(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); dex::BrightPowder::onModifyAccuracy(simulation); - simulation.viewForSelectedMoves>(); + simulation.view>(); simulation.registry.clear(); } void runModifyCritBoostEvent(Simulation&) {} void runBasePowerEvent(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); dex::KnockOff::onBasePower(simulation); - simulation.viewForSelectedMoves(); + simulation.view(); simulation.registry.clear(); } From 6e24061b1f28d4871bfc73363373ae9fc336a5b7 Mon Sep 17 00:00:00 2001 From: aed3 <32887801+aed3@users.noreply.github.com> Date: Wed, 3 Jun 2026 18:45:52 -0500 Subject: [PATCH 6/9] Removing SelectForView for AnalyzeEffect Analyze effect is just an extension of CalcDamage, so removing SelectForView is both simple and had no speed implications. --- extras/PokeSim.cpp | 7 +- extras/RecentBenchmarkResults.md | 422 ++++++++++++++-------------- src/AnalyzeEffect/AnalyzeEffect.cpp | 9 +- src/CalcDamage/CalcDamage.cpp | 1 - src/Simulation/MoveHitSteps.cpp | 1 - tools/updateBenchmarkResultsFile.js | 44 ++- 6 files changed, 253 insertions(+), 231 deletions(-) diff --git a/extras/PokeSim.cpp b/extras/PokeSim.cpp index 2a08f289..b4f67652 100644 --- a/extras/PokeSim.cpp +++ b/extras/PokeSim.cpp @@ -7012,15 +7012,14 @@ void clearRunVariables(Simulation& simulation) { } void analyzeEffect(Simulation& simulation) { - pokesim::internal::SelectForPokemonView selectedPokemon(simulation); - pokesim::internal::SelectForBattleView selectedBattle(simulation); + pokesim::internal::EntityFilter battleFilter(simulation); - if (selectedPokemon.hasNoneSelected() || selectedBattle.hasNoneSelected()) { + if (battleFilter.hasNoneSelected()) { return; } simulation.view(simulation.pokedex()); - simulation.viewForSelectedBattles(); + battleFilter.view(); if (!simulation.analyzeEffectOptions.getReconsiderActiveEffects()) { ignoreBattlesWithEffectActive(simulation); diff --git a/extras/RecentBenchmarkResults.md b/extras/RecentBenchmarkResults.md index b2b848f0..214286ff 100644 --- a/extras/RecentBenchmarkResults.md +++ b/extras/RecentBenchmarkResults.md @@ -7,286 +7,286 @@ ## SV-SingleBattle-MonteCarlo-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 46.409700ms | 77.482730us | 16.715119us | 77.482730us | 75.289930us | 83.073330us | -| 2 | 100 | 1 | 46.795900ms | 87.124580us | 20.172168us | 43.562290us | 42.149360us | 46.635865us | -| 4 | 100 | 1 | 51.051600ms | 98.577260us | 14.934484us | 24.644315us | 24.100660us | 25.682182us | -| 8 | 100 | 1 | 52.923600ms | 122.311570us | 17.885996us | 15.288946us | 14.964412us | 15.927890us | -| 16 | 100 | 1 | 60.013900ms | 162.697460us | 20.349131us | 10.168591us | 9.994946us | 10.574209us | -| 32 | 100 | 1 | 66.644600ms | 228.033660us | 18.646168us | 7.126052us | 7.046548us | 7.307726us | -| 64 | 100 | 1 | 80.336000ms | 357.127410us | 17.147995us | 5.580116us | 5.540809us | 5.654680us | -| 128 | 100 | 1 | 106.623200ms | 591.948320us | 14.732299us | 4.624596us | 4.606258us | 4.653389us | -| 256 | 100 | 1 | 158.686300ms | 1.061508ms | 13.909766us | 4.146514us | 4.136363us | 4.157757us | -| 512 | 100 | 1 | 252.041400ms | 1.954950ms | 52.450159us | 3.818262us | 3.804745us | 3.852756us | -| 1024 | 100 | 1 | 465.562700ms | 3.747578ms | 57.544760us | 3.659744us | 3.649797us | 3.672070us | -| 2048 | 100 | 1 | 888.058200ms | 7.386271ms | 87.382538us | 3.606578us | 3.598796us | 3.615618us | -| 4096 | 100 | 1 | 1533.744700ms | 14.780307ms | 198.892460us | 3.608473us | 3.599238us | 3.618314us | -| 8192 | 100 | 1 | 3027.943700ms | 30.009494ms | 334.457038us | 3.663268us | 3.655868us | 3.671944us | -| 16384 | 100 | 1 | 6260.678700ms | 62.106796ms | 566.042424us | 3.790698us | 3.784315us | 3.797911us | -| 32768 | 100 | 1 | 13316.502100ms | 128.219746ms | 1.234067ms | 3.912956us | 3.906862us | 3.922229us | -| 65536 | 100 | 1 | 29680.540900ms | 275.145622ms | 10.952798ms | 4.198389us | 4.166312us | 4.231968us | +| 1 | 100 | 1 | 47.244100ms | 81.683710us | 16.550602us | 81.683710us | 79.467730us | 87.039240us | +| 2 | 100 | 1 | 48.531800ms | 87.193540us | 15.790573us | 43.596770us | 42.451815us | 45.832055us | +| 4 | 100 | 1 | 51.492900ms | 98.731590us | 13.389187us | 24.682897us | 24.197707us | 25.635917us | +| 8 | 100 | 1 | 52.727800ms | 120.466190us | 16.441539us | 15.058274us | 14.757129us | 15.634834us | +| 16 | 100 | 1 | 59.296000ms | 159.963650us | 12.588128us | 9.997728us | 9.883396us | 10.224736us | +| 32 | 100 | 1 | 66.106500ms | 226.959380us | 18.056099us | 7.092481us | 7.018873us | 7.284092us | +| 64 | 100 | 1 | 79.591400ms | 351.971990us | 15.191656us | 5.499562us | 5.465306us | 5.567361us | +| 128 | 100 | 1 | 82.216500ms | 585.431190us | 10.534730us | 4.573681us | 4.560835us | 4.595149us | +| 256 | 100 | 1 | 131.968700ms | 1.046403ms | 16.489757us | 4.087513us | 4.077732us | 4.104642us | +| 512 | 100 | 1 | 200.662700ms | 1.915838ms | 19.055097us | 3.741872us | 3.735169us | 3.749868us | +| 1024 | 100 | 1 | 385.851500ms | 3.701495ms | 40.905913us | 3.614741us | 3.607612us | 3.623406us | +| 2048 | 100 | 1 | 758.122600ms | 7.330520ms | 84.788208us | 3.579355us | 3.571853us | 3.588164us | +| 4096 | 100 | 1 | 1497.149600ms | 14.513692ms | 174.158286us | 3.543382us | 3.535665us | 3.552460us | +| 8192 | 100 | 1 | 3473.207300ms | 29.566074ms | 349.744455us | 3.609140us | 3.601463us | 3.618285us | +| 16384 | 100 | 1 | 7054.102800ms | 61.373736ms | 593.438650us | 3.745956us | 3.739262us | 3.753560us | +| 32768 | 100 | 1 | 12539.823800ms | 126.622566ms | 1.231682ms | 3.864214us | 3.857420us | 3.872291us | +| 65536 | 100 | 1 | 29440.988500ms | 269.932954ms | 9.485357ms | 4.118850us | 4.090099us | 4.146661us | ## SV-SingleBattle-Branching-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 65.349200ms | 220.990470us | 14.784610us | 220.990470us | 218.930680us | 225.482650us | -| 2 | 100 | 1 | 41.854000ms | 304.876770us | 19.742181us | 152.438385us | 151.144115us | 155.757220us | -| 4 | 100 | 1 | 54.756400ms | 451.439390us | 18.824078us | 112.859848us | 112.268107us | 114.585680us | -| 8 | 100 | 1 | 85.200800ms | 724.838440us | 15.735760us | 90.604805us | 90.352505us | 91.284676us | -| 16 | 100 | 1 | 140.056700ms | 1.248493ms | 20.304086us | 78.030817us | 77.810408us | 78.314320us | -| 32 | 100 | 1 | 246.834500ms | 2.242094ms | 43.948715us | 70.065437us | 69.879035us | 70.502066us | -| 64 | 100 | 1 | 461.690200ms | 4.217008ms | 57.411466us | 65.890748us | 65.737264us | 66.096010us | -| 128 | 100 | 1 | 864.494600ms | 8.074162ms | 82.001137us | 63.079388us | 62.958095us | 63.209519us | -| 256 | 100 | 1 | 1657.832300ms | 15.659157ms | 188.544847us | 61.168583us | 61.034404us | 61.322745us | -| 512 | 100 | 1 | 3056.081300ms | 29.851978ms | 381.935983us | 58.304645us | 58.167694us | 58.461763us | -| 1024 | 100 | 1 | 6036.290400ms | 59.429409ms | 1.029654ms | 58.036532us | 57.863409us | 58.264888us | -| 2048 | 100 | 1 | 12254.900200ms | 122.000381ms | 1.533615ms | 59.570499us | 59.436437us | 59.733568us | -| 4096 | 100 | 1 | 26889.376400ms | 272.343129ms | 3.948859ms | 66.490022us | 66.340270us | 66.742076us | -| 8192 | 100 | 1 | 59898.141400ms | 595.900352ms | 4.210691ms | 72.741742us | 72.646317us | 72.848000us | +| 1 | 100 | 1 | 66.654500ms | 222.087000us | 16.842759us | 222.087000us | 219.830010us | 227.624100us | +| 2 | 100 | 1 | 42.086500ms | 306.652880us | 15.900590us | 153.326440us | 152.204805us | 155.690940us | +| 4 | 100 | 1 | 55.536600ms | 453.138320us | 16.793492us | 113.284580us | 112.710760us | 114.594938us | +| 8 | 100 | 1 | 87.260900ms | 726.070100us | 22.281699us | 90.758763us | 90.369094us | 91.611812us | +| 16 | 100 | 1 | 141.667800ms | 1.239192ms | 16.697648us | 77.449489us | 77.298686us | 77.748124us | +| 32 | 100 | 1 | 250.327100ms | 2.279054ms | 30.736307us | 71.220448us | 71.038558us | 71.415589us | +| 64 | 100 | 1 | 464.975600ms | 4.265920ms | 44.663892us | 66.654998us | 66.521295us | 66.795429us | +| 128 | 100 | 1 | 885.323900ms | 8.267169ms | 111.762422us | 64.587256us | 64.441436us | 64.791801us | +| 256 | 100 | 1 | 1687.860100ms | 15.951473ms | 158.658393us | 62.310443us | 62.200486us | 62.445153us | +| 512 | 100 | 1 | 3135.488700ms | 30.698720ms | 433.707386us | 59.958438us | 59.829083us | 60.181488us | +| 1024 | 100 | 1 | 6197.513200ms | 60.801298ms | 760.964321us | 59.376268us | 59.247086us | 59.541919us | +| 2048 | 100 | 1 | 12693.546200ms | 125.997715ms | 1.687013ms | 61.522322us | 61.393886us | 61.737159us | +| 4096 | 100 | 1 | 27707.567500ms | 277.608933ms | 3.212745ms | 67.775618us | 67.635936us | 67.947017us | +| 8192 | 100 | 1 | 60562.334000ms | 607.983992ms | 6.485672ms | 74.216796us | 74.099656us | 74.437536us | ## SV-DoubleBattle-MonteCarlo-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 57.163900ms | 125.925180us | 20.794387us | 125.925180us | 122.813530us | 131.607590us | -| 2 | 100 | 1 | 61.039400ms | 142.486160us | 20.608210us | 71.243080us | 69.756035us | 74.209240us | -| 4 | 100 | 1 | 63.147600ms | 174.596750us | 21.234272us | 43.649187us | 42.812785us | 44.984780us | -| 8 | 100 | 1 | 69.734700ms | 216.087940us | 23.758200us | 27.010993us | 26.565232us | 27.822330us | -| 16 | 100 | 1 | 48.909700ms | 297.044250us | 14.286610us | 18.565266us | 18.438309us | 18.823473us | -| 32 | 100 | 1 | 64.335900ms | 416.699260us | 18.475095us | 13.021852us | 12.947141us | 13.218321us | -| 64 | 100 | 1 | 88.898400ms | 655.482730us | 15.952018us | 10.241918us | 10.206973us | 10.316269us | -| 128 | 100 | 1 | 122.123600ms | 1.120534ms | 24.531519us | 8.754173us | 8.720157us | 8.796155us | -| 256 | 100 | 1 | 211.299100ms | 1.980204ms | 21.567669us | 7.735171us | 7.719846us | 7.752920us | -| 512 | 100 | 1 | 392.913300ms | 3.736461ms | 45.461237us | 7.297776us | 7.281524us | 7.316334us | -| 1024 | 100 | 1 | 736.361700ms | 7.092699ms | 97.590630us | 6.926464us | 6.910721us | 6.949499us | -| 2048 | 100 | 1 | 1463.072300ms | 14.040165ms | 170.852830us | 6.855549us | 6.840336us | 6.873264us | -| 4096 | 100 | 1 | 2836.901100ms | 27.955121ms | 306.710899us | 6.824981us | 6.811394us | 6.840797us | +| 1 | 100 | 1 | 60.716900ms | 125.262590us | 16.270045us | 125.262590us | 123.082970us | 130.569730us | +| 2 | 100 | 1 | 63.121300ms | 146.693340us | 21.485803us | 73.346670us | 71.730620us | 76.284005us | +| 4 | 100 | 1 | 66.152700ms | 172.901880us | 21.766191us | 43.225470us | 42.416325us | 44.697445us | +| 8 | 100 | 1 | 71.590600ms | 215.191260us | 25.942308us | 26.898907us | 26.395535us | 27.734394us | +| 16 | 100 | 1 | 49.258700ms | 288.039270us | 17.805781us | 18.002454us | 17.842021us | 18.323533us | +| 32 | 100 | 1 | 64.625000ms | 411.873150us | 14.950849us | 12.871036us | 12.800664us | 12.997021us | +| 64 | 100 | 1 | 92.034900ms | 664.303350us | 27.190541us | 10.379740us | 10.318299us | 10.499749us | +| 128 | 100 | 1 | 127.700100ms | 1.106547ms | 20.322295us | 8.644902us | 8.617956us | 8.681554us | +| 256 | 100 | 1 | 212.629100ms | 1.982221ms | 24.411727us | 7.743049us | 7.725532us | 7.763033us | +| 512 | 100 | 1 | 396.764800ms | 3.730792ms | 58.354357us | 7.286704us | 7.268831us | 7.315774us | +| 1024 | 100 | 1 | 736.056300ms | 7.061930ms | 84.028954us | 6.896416us | 6.881624us | 6.914190us | +| 2048 | 100 | 1 | 1448.405000ms | 13.978387ms | 190.321950us | 6.825385us | 6.808840us | 6.845704us | +| 4096 | 100 | 1 | 2841.827300ms | 27.901947ms | 309.760198us | 6.811999us | 6.797868us | 6.827618us | ## SV-DoubleBattle-Branching-SimulateTurn-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 77.046300ms | 527.121100us | 16.335134us | 527.121100us | 525.037360us | 532.968330us | -| 2 | 100 | 1 | 94.097500ms | 789.393520us | 19.489047us | 394.696760us | 393.298975us | 397.520760us | -| 4 | 100 | 1 | 141.385800ms | 1.253467ms | 19.469214us | 313.366827us | 312.675875us | 314.810083us | -| 8 | 100 | 1 | 239.350500ms | 2.166349ms | 25.823461us | 270.793608us | 270.174405us | 271.446610us | -| 16 | 100 | 1 | 411.802400ms | 3.868569ms | 43.677791us | 241.785546us | 241.288239us | 242.363753us | -| 32 | 100 | 1 | 781.007800ms | 7.273876ms | 91.056132us | 227.308638us | 226.791734us | 227.903270us | -| 64 | 100 | 1 | 1450.211300ms | 13.841396ms | 140.205420us | 216.271810us | 215.879933us | 216.741283us | -| 128 | 100 | 1 | 2823.318200ms | 27.037273ms | 350.735685us | 211.228695us | 210.751143us | 211.843650us | -| 256 | 100 | 1 | 5501.305900ms | 54.453166ms | 974.942976us | 212.707679us | 212.028031us | 213.524335us | -| 512 | 100 | 1 | 11645.569200ms | 108.387979ms | 1.768433ms | 211.695272us | 211.130172us | 212.537286us | -| 1024 | 100 | 1 | 22494.231200ms | 224.384795ms | 2.245263ms | 219.125777us | 218.717894us | 219.575217us | -| 2048 | 100 | 1 | 46282.687200ms | 460.327251ms | 5.021578ms | 224.769165us | 224.379257us | 225.387975us | -| 4096 | 100 | 1 | 96501.423900ms | 974.320764ms | 4.777795ms | 237.871280us | 237.646156us | 238.104488us | +| 1 | 100 | 1 | 78.642300ms | 543.401650us | 16.741177us | 543.401650us | 540.637580us | 547.381930us | +| 2 | 100 | 1 | 93.224300ms | 793.962350us | 33.732774us | 396.981175us | 394.568165us | 401.880140us | +| 4 | 100 | 1 | 148.626100ms | 1.262650ms | 25.495281us | 315.662377us | 314.685203us | 317.341420us | +| 8 | 100 | 1 | 247.756100ms | 2.167248ms | 31.872467us | 270.905986us | 270.346849us | 272.110969us | +| 16 | 100 | 1 | 428.386900ms | 3.899954ms | 42.564196us | 243.747101us | 243.254313us | 244.297039us | +| 32 | 100 | 1 | 795.558500ms | 7.438270ms | 86.233280us | 232.445940us | 231.923995us | 232.984617us | +| 64 | 100 | 1 | 1480.773200ms | 14.122506ms | 176.981633us | 220.664149us | 220.160988us | 221.251178us | +| 128 | 100 | 1 | 2851.040500ms | 27.571739ms | 599.120168us | 215.404211us | 214.725501us | 216.710229us | +| 256 | 100 | 1 | 5627.539500ms | 55.268214ms | 892.271001us | 215.891461us | 215.240851us | 216.609476us | +| 512 | 100 | 1 | 11191.956800ms | 111.075200ms | 1.907132ms | 216.943749us | 216.311819us | 217.803011us | +| 1024 | 100 | 1 | 23204.594400ms | 230.535469ms | 2.467447ms | 225.132294us | 224.705402us | 225.663867us | +| 2048 | 100 | 1 | 46876.236300ms | 473.397428ms | 4.672468ms | 231.151088us | 230.776407us | 231.698942us | +| 4096 | 100 | 1 | 99376.221600ms | 997.679589ms | 4.622709ms | 243.574118us | 243.365574us | 243.809312us | ## SV-SingleBattle-CalcDamage-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 7.850100ms | 10.752300us | 4.674183us | 10.752300us | 10.109370us | 12.168020us | -| 2 | 100 | 1 | 8.012700ms | 11.823730us | 4.329482us | 5.911865us | 5.610930us | 6.563665us | -| 4 | 100 | 1 | 8.258000ms | 12.337970us | 4.111027us | 3.084492us | 2.940323us | 3.388560us | -| 8 | 100 | 1 | 8.533800ms | 13.308840us | 3.639800us | 1.663605us | 1.603266us | 1.828349us | -| 16 | 100 | 1 | 8.978500ms | 17.141620us | 3.437954us | 1.071351us | 1.042334us | 1.141066us | -| 32 | 100 | 1 | 9.834200ms | 23.777530us | 3.253777us | 743.047812ns | 728.820625ns | 773.391250ns | -| 64 | 100 | 1 | 11.220500ms | 35.637570us | 3.897802us | 556.837031ns | 548.311875ns | 575.469375ns | -| 128 | 100 | 1 | 13.823400ms | 59.169810us | 4.861503us | 462.264141ns | 456.860625ns | 473.458828ns | -| 256 | 100 | 1 | 19.573100ms | 102.758620us | 6.454364us | 401.400859ns | 397.740000ns | 408.611172ns | -| 512 | 100 | 1 | 35.879000ms | 193.344700us | 5.007023us | 377.626367ns | 376.220996ns | 380.442832ns | -| 1024 | 100 | 1 | 62.396800ms | 372.235560us | 6.241373us | 363.511289ns | 362.398154ns | 364.798877ns | -| 2048 | 100 | 1 | 116.663700ms | 727.784080us | 11.710387us | 355.363320ns | 354.364077ns | 356.630962ns | -| 4096 | 100 | 1 | 226.591100ms | 1.468590ms | 31.602499us | 358.542554ns | 357.132751ns | 360.159937ns | -| 8192 | 100 | 1 | 447.422600ms | 3.033021ms | 50.169392us | 370.241835ns | 369.063026ns | 371.477733ns | -| 16384 | 100 | 1 | 897.334400ms | 6.140258ms | 77.516255us | 374.771597ns | 373.926274ns | 375.798879ns | -| 32768 | 100 | 1 | 1794.495900ms | 12.533901ms | 194.663119us | 382.504294ns | 381.502333ns | 383.874395ns | -| 65536 | 100 | 1 | 3606.074100ms | 26.195382ms | 220.330699us | 399.709807ns | 399.088993ns | 400.406826ns | +| 1 | 100 | 1 | 7.997300ms | 11.432310us | 4.594180us | 11.432310us | 10.775390us | 12.776630us | +| 2 | 100 | 1 | 8.200900ms | 12.157400us | 4.294340us | 6.078700us | 5.767415us | 6.705580us | +| 4 | 100 | 1 | 8.420200ms | 13.010030us | 4.355427us | 3.252508us | 3.093525us | 3.556088us | +| 8 | 100 | 1 | 8.747800ms | 13.476190us | 3.266959us | 1.684524us | 1.630039us | 1.818329us | +| 16 | 100 | 1 | 9.217600ms | 16.571370us | 3.077807us | 1.035711us | 1.010678us | 1.104957us | +| 32 | 100 | 1 | 10.041400ms | 23.719200us | 3.084739us | 741.225000ns | 728.315625ns | 772.981562ns | +| 64 | 100 | 1 | 11.354000ms | 35.172090us | 3.421488us | 549.563906ns | 542.094375ns | 565.819219ns | +| 128 | 100 | 1 | 14.078200ms | 57.280460us | 3.112414us | 447.503594ns | 444.133594ns | 455.050391ns | +| 256 | 100 | 1 | 19.376700ms | 101.854870us | 3.584462us | 397.870586ns | 395.882500ns | 401.972656ns | +| 512 | 100 | 1 | 36.423000ms | 194.750610us | 5.354245us | 380.372285ns | 378.635879ns | 382.850020ns | +| 1024 | 100 | 1 | 62.530000ms | 370.068260us | 9.613047us | 361.394785ns | 360.028574ns | 364.055996ns | +| 2048 | 100 | 1 | 118.234400ms | 724.141810us | 11.332673us | 353.584868ns | 352.641997ns | 354.833594ns | +| 4096 | 100 | 1 | 230.870200ms | 1.445900ms | 34.286871us | 353.003047ns | 351.731123ns | 355.221660ns | +| 8192 | 100 | 1 | 471.589300ms | 3.003483ms | 60.675003us | 366.636069ns | 365.349772ns | 368.300125ns | +| 16384 | 100 | 1 | 914.318700ms | 6.093199ms | 84.365267us | 371.899377ns | 371.017664ns | 373.063528ns | +| 32768 | 100 | 1 | 1848.163000ms | 12.367586ms | 151.835474us | 377.428773ns | 376.601947ns | 378.438123ns | +| 65536 | 100 | 1 | 3709.940700ms | 25.844192ms | 321.541367us | 394.351067ns | 393.490383ns | 395.430417ns | ## SV-SingleBattle-AnalyzeEffect-VerticalSlice1 | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 24.474000ms | 58.555240us | 11.996965us | 58.555240us | 56.928190us | 62.329000us | -| 2 | 100 | 1 | 26.272700ms | 70.619310us | 11.547136us | 35.309655us | 34.565285us | 37.346450us | -| 4 | 100 | 1 | 32.165700ms | 91.564800us | 11.357525us | 22.891200us | 22.536423us | 23.927320us | -| 8 | 100 | 1 | 20.884200ms | 127.142210us | 9.495292us | 15.892776us | 15.755410us | 16.401896us | -| 16 | 100 | 1 | 26.323200ms | 201.356830us | 11.704184us | 12.584802us | 12.496835us | 12.875729us | -| 32 | 100 | 1 | 41.688000ms | 335.836750us | 12.341894us | 10.494898us | 10.442030us | 10.616107us | -| 64 | 100 | 1 | 73.047400ms | 601.399880us | 13.583558us | 9.396873us | 9.360062us | 9.444568us | -| 128 | 100 | 1 | 132.251500ms | 1.113533ms | 14.850447us | 8.699479us | 8.679062us | 8.724931us | -| 256 | 100 | 1 | 242.665300ms | 2.080519ms | 19.744797us | 8.127028us | 8.112994us | 8.143532us | -| 512 | 100 | 1 | 464.973600ms | 4.108628ms | 65.980314us | 8.024665us | 8.003110us | 8.055239us | -| 1024 | 100 | 1 | 906.636000ms | 8.187109ms | 160.062882us | 7.995224us | 7.971162us | 8.035848us | -| 2048 | 100 | 1 | 1815.363400ms | 16.137594ms | 191.713861us | 7.879685us | 7.862338us | 7.899305us | -| 4096 | 100 | 1 | 3633.650400ms | 32.633754ms | 649.965437us | 7.967225us | 7.941043us | 8.005272us | -| 8192 | 100 | 1 | 8576.133200ms | 78.869856ms | 2.478687ms | 9.627668us | 9.576243us | 9.696325us | +| 1 | 100 | 1 | 24.269700ms | 55.890590us | 8.001672us | 55.890590us | 54.725930us | 58.183940us | +| 2 | 100 | 1 | 24.945300ms | 66.669640us | 8.034057us | 33.334820us | 32.767010us | 34.524430us | +| 4 | 100 | 1 | 32.006100ms | 91.818010us | 11.643773us | 22.954503us | 22.584063us | 23.978943us | +| 8 | 100 | 1 | 21.199200ms | 126.749280us | 9.495277us | 15.843660us | 15.688997us | 16.253878us | +| 16 | 100 | 1 | 27.007600ms | 197.516920us | 21.473658us | 12.344807us | 12.172149us | 12.826855us | +| 32 | 100 | 1 | 42.797100ms | 323.896340us | 9.818724us | 10.121761us | 10.080147us | 10.218601us | +| 64 | 100 | 1 | 72.210400ms | 578.875020us | 9.010960us | 9.044922us | 9.022203us | 9.079790us | +| 128 | 100 | 1 | 131.851600ms | 1.100509ms | 21.808202us | 8.597724us | 8.566136us | 8.632918us | +| 256 | 100 | 1 | 237.609300ms | 2.045573ms | 33.010944us | 7.990520us | 7.969406us | 8.021639us | +| 512 | 100 | 1 | 457.361000ms | 3.991492ms | 39.543380us | 7.795883us | 7.781844us | 7.812410us | +| 1024 | 100 | 1 | 902.980100ms | 7.927709ms | 98.654518us | 7.741904us | 7.724813us | 7.762958us | +| 2048 | 100 | 1 | 1765.261700ms | 15.860071ms | 461.800123us | 7.744175us | 7.711347us | 7.807564us | +| 4096 | 100 | 1 | 3550.945100ms | 32.426515ms | 1.432092ms | 7.916630us | 7.869609us | 8.028544us | +| 8192 | 100 | 1 | 7788.658200ms | 73.572537ms | 2.250583ms | 8.981023us | 8.931302us | 9.039952us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 34.695200ms | 85.375870us | 17.267549us | 85.375870us | 82.612170us | 89.663440us | -| 2 | 100 | 1 | 35.994600ms | 94.185540us | 19.604963us | 47.092770us | 45.537990us | 49.550955us | -| 4 | 100 | 1 | 38.303100ms | 106.575190us | 19.548136us | 26.643798us | 25.845545us | 27.844150us | -| 8 | 100 | 1 | 41.518400ms | 128.332240us | 21.910440us | 16.041530us | 15.553647us | 16.636646us | -| 16 | 100 | 1 | 48.214100ms | 169.379870us | 26.293725us | 10.586242us | 10.288232us | 10.936866us | -| 32 | 100 | 1 | 56.351800ms | 235.911590us | 36.592838us | 7.372237us | 7.163853us | 7.612416us | -| 64 | 100 | 1 | 52.641600ms | 370.170230us | 64.454416us | 5.783910us | 5.600788us | 5.997179us | -| 128 | 100 | 1 | 98.075200ms | 626.446140us | 111.705095us | 4.894110us | 4.736825us | 5.080794us | -| 256 | 100 | 1 | 247.289100ms | 1.130022ms | 210.518417us | 4.414149us | 4.267302us | 4.591511us | -| 512 | 100 | 1 | 318.371800ms | 2.142589ms | 418.305390us | 4.184743us | 4.037322us | 4.360070us | -| 1024 | 100 | 1 | 582.124200ms | 4.737882ms | 814.897105us | 4.626838us | 4.483280us | 4.796987us | -| 2048 | 100 | 1 | 1364.841000ms | 9.956639ms | 1.665891ms | 4.861640us | 4.714146us | 5.035216us | -| 4096 | 100 | 1 | 3059.447700ms | 21.120835ms | 3.645981ms | 5.156454us | 4.996585us | 5.348470us | -| 8192 | 100 | 1 | 4675.450300ms | 46.701595ms | 7.773633ms | 5.700878us | 5.524852us | 5.897215us | +| 1 | 100 | 1 | 33.464900ms | 89.122910us | 21.604353us | 89.122910us | 85.762650us | 94.697020us | +| 2 | 100 | 1 | 35.050600ms | 96.954990us | 17.430031us | 48.477495us | 47.005555us | 50.482180us | +| 4 | 100 | 1 | 36.612900ms | 106.581510us | 19.250873us | 26.645377us | 25.820947us | 27.741220us | +| 8 | 100 | 1 | 39.719900ms | 128.369380us | 30.877107us | 16.046173us | 15.482176us | 17.138715us | +| 16 | 100 | 1 | 47.480100ms | 170.085080us | 27.736687us | 10.630317us | 10.320142us | 11.000494us | +| 32 | 100 | 1 | 55.829700ms | 239.250990us | 43.183990us | 7.476593us | 7.240395us | 7.779605us | +| 64 | 100 | 1 | 53.892200ms | 368.958800us | 63.070516us | 5.764981us | 5.583563us | 5.971300us | +| 128 | 100 | 1 | 97.505700ms | 625.238900us | 111.336229us | 4.884679us | 4.726633us | 5.069117us | +| 256 | 100 | 1 | 236.815700ms | 1.123234ms | 206.462248us | 4.387632us | 4.243351us | 4.559808us | +| 512 | 100 | 1 | 300.200500ms | 2.121433ms | 412.569787us | 4.143424us | 3.998909us | 4.317289us | +| 1024 | 100 | 1 | 542.661400ms | 4.684097ms | 882.963520us | 4.574313us | 4.418499us | 4.756133us | +| 2048 | 100 | 1 | 1373.844100ms | 9.824869ms | 1.712088ms | 4.797299us | 4.645506us | 4.973744us | +| 4096 | 100 | 1 | 2883.313200ms | 20.794424ms | 3.529121ms | 5.076764us | 4.918774us | 5.258567us | +| 8192 | 100 | 1 | 4378.424100ms | 45.678938ms | 7.477844ms | 5.576042us | 5.406131us | 5.764630us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 34.809900ms | 87.536850us | 17.924196us | 87.536850us | 84.566780us | 91.767030us | -| 2 | 100 | 1 | 37.812100ms | 98.412980us | 18.998222us | 49.206490us | 47.666350us | 51.503555us | -| 4 | 100 | 1 | 48.005600ms | 107.838950us | 18.674025us | 26.959737us | 26.172825us | 28.051313us | -| 8 | 100 | 1 | 50.689400ms | 126.722880us | 23.565195us | 15.840360us | 15.337939us | 16.503580us | -| 16 | 100 | 1 | 55.797900ms | 164.902100us | 25.875432us | 10.306381us | 10.011004us | 10.648586us | -| 32 | 100 | 1 | 62.259400ms | 226.375750us | 37.083054us | 7.074242us | 6.861190us | 7.316479us | -| 64 | 100 | 1 | 70.167600ms | 349.268560us | 63.085621us | 5.457321us | 5.275517us | 5.664418us | -| 128 | 100 | 1 | 83.455900ms | 562.132830us | 108.055687us | 4.391663us | 4.237967us | 4.570657us | -| 256 | 100 | 1 | 140.624600ms | 1.004176ms | 198.976707us | 3.922561us | 3.782422us | 4.089434us | -| 512 | 100 | 1 | 187.142100ms | 1.881124ms | 381.712030us | 3.674069us | 3.540346us | 3.835025us | -| 1024 | 100 | 1 | 363.585900ms | 3.632020ms | 746.555398us | 3.546894us | 3.416161us | 3.703873us | -| 2048 | 100 | 1 | 743.924300ms | 7.239117ms | 1.622727ms | 3.534725us | 3.395272us | 3.709036us | -| 4096 | 100 | 1 | 2008.898900ms | 14.560732ms | 2.974779ms | 3.554866us | 3.425164us | 3.712784us | -| 8192 | 100 | 1 | 2684.121400ms | 29.224074ms | 5.765311ms | 3.567392us | 3.441895us | 3.720486us | +| 1 | 100 | 1 | 33.397300ms | 87.083080us | 15.479067us | 87.083080us | 84.411440us | 90.569980us | +| 2 | 100 | 1 | 49.230500ms | 98.628190us | 18.832407us | 49.314095us | 47.688400us | 51.430700us | +| 4 | 100 | 1 | 51.093500ms | 110.339900us | 20.942293us | 27.584975us | 26.697397us | 28.779370us | +| 8 | 100 | 1 | 53.467500ms | 126.191210us | 21.613435us | 15.773901us | 15.294201us | 16.353891us | +| 16 | 100 | 1 | 58.969300ms | 163.707150us | 25.714579us | 10.231697us | 9.936542us | 10.568130us | +| 32 | 100 | 1 | 67.107700ms | 224.749870us | 35.350137us | 7.023433us | 6.819618us | 7.252198us | +| 64 | 100 | 1 | 64.518700ms | 344.428820us | 64.031935us | 5.381700us | 5.201702us | 5.595440us | +| 128 | 100 | 1 | 83.382800ms | 564.746700us | 117.156174us | 4.412084us | 4.250212us | 4.614302us | +| 256 | 100 | 1 | 139.854900ms | 995.224600us | 195.824971us | 3.887596us | 3.749453us | 4.052936us | +| 512 | 100 | 1 | 186.522300ms | 1.867673ms | 376.094907us | 3.647798us | 3.516677us | 3.807236us | +| 1024 | 100 | 1 | 358.365900ms | 3.606428ms | 738.448869us | 3.521903us | 3.393596us | 3.677266us | +| 2048 | 100 | 1 | 742.801000ms | 7.142043ms | 1.485404ms | 3.487325us | 3.356989us | 3.643597us | +| 4096 | 100 | 1 | 1962.306100ms | 14.345878ms | 2.860699ms | 3.502412us | 3.378205us | 3.653842us | +| 8192 | 100 | 1 | 2683.139200ms | 28.958083ms | 5.494803ms | 3.534922us | 3.415040us | 3.681001us | ## SV-SingleBattle-MonteCarlo-SimulateTurn-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 45.225300ms | 90.816830us | 25.862444us | 90.816830us | 87.052270us | 98.208560us | -| 2 | 100 | 1 | 59.073600ms | 109.038650us | 24.364619us | 54.519325us | 52.698875us | 57.816235us | -| 4 | 100 | 1 | 40.090900ms | 139.934700us | 19.358285us | 34.983675us | 34.197030us | 36.167490us | -| 8 | 100 | 1 | 53.796600ms | 180.707190us | 23.235144us | 22.588399us | 22.167967us | 23.414639us | -| 16 | 100 | 1 | 64.691600ms | 250.302750us | 25.401072us | 15.643922us | 15.412261us | 16.090911us | -| 32 | 100 | 1 | 78.032000ms | 352.438890us | 21.997478us | 11.013715us | 10.904546us | 11.187875us | -| 64 | 100 | 1 | 80.000600ms | 568.101710us | 26.083210us | 8.876589us | 8.816735us | 8.992329us | -| 128 | 100 | 1 | 194.149000ms | 946.673200us | 35.030002us | 7.395884us | 7.349902us | 7.458931us | -| 256 | 100 | 1 | 281.064800ms | 1.700278ms | 70.183183us | 6.641711us | 6.596284us | 6.706343us | -| 512 | 100 | 1 | 477.226700ms | 3.428246ms | 287.000872us | 6.695793us | 6.610554us | 6.846455us | -| 1024 | 100 | 1 | 886.970000ms | 7.953743ms | 406.694995us | 7.767328us | 7.691513us | 7.846493us | -| 2048 | 100 | 1 | 1776.386500ms | 16.983496ms | 422.462889us | 8.292723us | 8.254522us | 8.335611us | -| 4096 | 100 | 1 | 3797.644500ms | 37.128415ms | 853.668270us | 9.064554us | 9.025148us | 9.107102us | -| 8192 | 100 | 1 | 8591.049000ms | 85.192377ms | 1.450161ms | 10.399460us | 10.365998us | 10.435410us | +| 1 | 100 | 1 | 48.550700ms | 85.695810us | 16.991502us | 85.695810us | 82.885640us | 89.731880us | +| 2 | 100 | 1 | 61.761500ms | 111.033770us | 22.460159us | 55.516885us | 53.727070us | 58.300030us | +| 4 | 100 | 1 | 39.424100ms | 137.282750us | 19.113430us | 34.320687us | 33.570107us | 35.537530us | +| 8 | 100 | 1 | 53.330100ms | 177.627600us | 20.399308us | 22.203450us | 21.814669us | 22.874696us | +| 16 | 100 | 1 | 64.791500ms | 246.047720us | 20.687039us | 15.377982us | 15.176185us | 15.705254us | +| 32 | 100 | 1 | 80.230000ms | 353.435030us | 26.378208us | 11.044845us | 10.919320us | 11.262232us | +| 64 | 100 | 1 | 80.431100ms | 569.654740us | 41.751818us | 8.900855us | 8.806873us | 9.088920us | +| 128 | 100 | 1 | 194.487400ms | 931.588350us | 27.714483us | 7.278034us | 7.240805us | 7.327194us | +| 256 | 100 | 1 | 279.837700ms | 1.661173ms | 46.519553us | 6.488958us | 6.459734us | 6.533827us | +| 512 | 100 | 1 | 465.160300ms | 3.242636ms | 112.802046us | 6.333273us | 6.293670us | 6.380731us | +| 1024 | 100 | 1 | 861.692700ms | 7.763630ms | 322.287262us | 7.581670us | 7.529147us | 7.656304us | +| 2048 | 100 | 1 | 1765.800000ms | 16.773463ms | 372.110999us | 8.190167us | 8.158973us | 8.231078us | +| 4096 | 100 | 1 | 3767.660500ms | 36.644785ms | 879.932183us | 8.946481us | 8.912344us | 9.000224us | +| 8192 | 100 | 1 | 8429.281100ms | 84.164640ms | 1.821288ms | 10.274004us | 10.236143us | 10.325318us | ## SV-SingleBattle-CalcDamage-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 10.693700ms | 13.182920us | 5.506243us | 13.182920us | 12.355840us | 14.672990us | -| 2 | 100 | 1 | 11.665000ms | 14.783270us | 5.929433us | 7.391635us | 6.910800us | 8.117920us | -| 4 | 100 | 1 | 12.254100ms | 17.547610us | 8.814009us | 4.386902us | 4.060155us | 4.989380us | -| 8 | 100 | 1 | 13.229900ms | 21.821700us | 9.761407us | 2.727712us | 2.524870us | 3.017420us | -| 16 | 100 | 1 | 10.092600ms | 29.812520us | 12.318131us | 1.863282us | 1.719562us | 2.020986us | -| 32 | 100 | 1 | 10.874400ms | 43.893240us | 17.985407us | 1.371664us | 1.259389us | 1.479581us | -| 64 | 100 | 1 | 18.273100ms | 75.855480us | 34.642189us | 1.185242us | 1.078218us | 1.290615us | -| 128 | 100 | 1 | 48.516600ms | 135.045570us | 67.986057us | 1.055044us | 950.821250ns | 1.159811us | -| 256 | 100 | 1 | 84.326700ms | 253.459410us | 129.125292us | 990.075820ns | 890.776406ns | 1.089270us | -| 512 | 100 | 1 | 162.363500ms | 459.114440us | 266.199680us | 896.707891ns | 794.046465ns | 997.776387ns | -| 1024 | 100 | 1 | 320.754500ms | 1.093333ms | 624.162230us | 1.067708us | 945.987549ns | 1.184998us | -| 2048 | 100 | 1 | 621.675000ms | 2.190485ms | 1.223562ms | 1.069573us | 950.419155ns | 1.184678us | -| 4096 | 100 | 1 | 1253.136700ms | 4.632213ms | 2.581643ms | 1.130911us | 1.005617us | 1.252791us | -| 8192 | 100 | 1 | 1615.160900ms | 9.997183ms | 5.764058ms | 1.220359us | 1.080249us | 1.355587us | +| 1 | 100 | 1 | 10.573100ms | 13.526500us | 5.074374us | 13.526500us | 12.745790us | 14.839150us | +| 2 | 100 | 1 | 10.919800ms | 14.913960us | 5.733742us | 7.456980us | 7.000855us | 8.170855us | +| 4 | 100 | 1 | 11.523900ms | 17.430810us | 6.231006us | 4.357703us | 4.080050us | 4.697285us | +| 8 | 100 | 1 | 12.553000ms | 20.722940us | 7.675921us | 2.590367us | 2.415984us | 2.794833us | +| 16 | 100 | 1 | 9.943000ms | 28.897550us | 10.925682us | 1.806097us | 1.671881us | 1.941283us | +| 32 | 100 | 1 | 11.325700ms | 44.604750us | 18.112598us | 1.393898us | 1.281670us | 1.503301us | +| 64 | 100 | 1 | 19.113300ms | 79.550420us | 39.100959us | 1.242975us | 1.127022us | 1.367517us | +| 128 | 100 | 1 | 50.826300ms | 137.400020us | 66.229118us | 1.073438us | 970.940625ns | 1.173966us | +| 256 | 100 | 1 | 89.593200ms | 266.550790us | 134.586457us | 1.041214us | 938.597500ns | 1.144090us | +| 512 | 100 | 1 | 169.083800ms | 491.037300us | 282.975007us | 959.057227ns | 851.212344ns | 1.066659us | +| 1024 | 100 | 1 | 333.779200ms | 1.154847ms | 638.200029us | 1.127780us | 1.003459us | 1.247275us | +| 2048 | 100 | 1 | 663.135200ms | 2.380136ms | 1.269648ms | 1.162176us | 1.038148us | 1.281141us | +| 4096 | 100 | 1 | 1333.445600ms | 5.073001ms | 2.765055ms | 1.238526us | 1.104606us | 1.368369us | +| 8192 | 100 | 1 | 2723.746200ms | 11.375683ms | 6.286824ms | 1.388633us | 1.235885us | 1.536650us | ## SV-SingleBattle-CalcDamage-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 11.288200ms | 13.057090us | 5.439241us | 13.057090us | 12.248800us | 14.560680us | -| 2 | 100 | 1 | 10.296400ms | 15.222880us | 4.566283us | 7.611440us | 7.281720us | 8.270345us | -| 4 | 100 | 1 | 10.225900ms | 17.500350us | 4.747871us | 4.375087us | 4.213468us | 4.748875us | -| 8 | 100 | 1 | 11.613800ms | 21.333240us | 4.824477us | 2.666655us | 2.583117us | 2.852925us | -| 16 | 100 | 1 | 12.623700ms | 28.853410us | 5.284994us | 1.803338us | 1.754194us | 1.893300us | -| 32 | 100 | 1 | 12.876000ms | 45.275350us | 33.993172us | 1.414855us | 1.299240us | 1.868001us | -| 64 | 100 | 1 | 15.839300ms | 74.121750us | 35.610841us | 1.158152us | 1.096680us | 1.401245us | -| 128 | 100 | 1 | 13.093500ms | 116.470100us | 6.473620us | 909.922656ns | 900.600547ns | 920.565000ns | -| 256 | 100 | 1 | 23.714100ms | 221.367740us | 9.594152us | 864.717734ns | 857.528828ns | 872.259805ns | -| 512 | 100 | 1 | 39.670500ms | 425.004210us | 12.620918us | 830.086348ns | 825.434316ns | 835.084355ns | -| 1024 | 100 | 1 | 84.017500ms | 818.896910us | 19.702257us | 799.704014ns | 795.960000ns | 803.472695ns | -| 2048 | 100 | 1 | 166.129300ms | 1.596851ms | 37.232440us | 779.712446ns | 776.405933ns | 783.560757ns | -| 4096 | 100 | 1 | 332.244700ms | 3.181485ms | 65.814086us | 776.729724ns | 773.756147ns | 780.064033ns | -| 8192 | 100 | 1 | 645.062700ms | 6.318617ms | 116.451480us | 771.315491ns | 768.640239ns | 774.241304ns | +| 1 | 100 | 1 | 10.548400ms | 13.141850us | 5.223717us | 13.141850us | 12.370160us | 14.593690us | +| 2 | 100 | 1 | 11.338700ms | 15.746870us | 4.763701us | 7.873435us | 7.505680us | 8.495240us | +| 4 | 100 | 1 | 11.151700ms | 18.602790us | 4.819250us | 4.650698us | 4.465117us | 4.961475us | +| 8 | 100 | 1 | 12.465700ms | 23.117950us | 4.658346us | 2.889744us | 2.800906us | 3.044105us | +| 16 | 100 | 1 | 12.991800ms | 29.724210us | 5.851807us | 1.857763us | 1.803906us | 1.960296us | +| 32 | 100 | 1 | 14.840200ms | 47.705510us | 38.521104us | 1.490797us | 1.360370us | 2.071087us | +| 64 | 100 | 1 | 17.245100ms | 71.095740us | 5.213079us | 1.110871us | 1.096191us | 1.128106us | +| 128 | 100 | 1 | 24.494000ms | 121.387120us | 6.971603us | 948.336875ns | 938.654453ns | 960.250937ns | +| 256 | 100 | 1 | 36.160500ms | 224.494220us | 9.101903us | 876.930547ns | 870.336719ns | 884.280938ns | +| 512 | 100 | 1 | 41.473500ms | 435.211980us | 11.938419us | 850.023398ns | 845.516328ns | 854.693047ns | +| 1024 | 100 | 1 | 86.971400ms | 856.090500us | 23.856079us | 836.025879ns | 832.124727ns | 841.506953ns | +| 2048 | 100 | 1 | 175.367300ms | 1.670535ms | 32.441156us | 815.690845ns | 812.666943ns | 818.893228ns | +| 4096 | 100 | 1 | 340.543700ms | 3.332332ms | 65.429832us | 813.557544ns | 810.599084ns | 816.837131ns | +| 8192 | 100 | 1 | 677.747100ms | 6.616907ms | 112.218227us | 807.727913ns | 805.236455ns | 810.637827ns | ## SV-SingleBattle-CalcDamage-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 11.414200ms | 13.276100us | 5.601076us | 13.276100us | 12.422220us | 14.747580us | -| 2 | 100 | 1 | 8.308800ms | 15.902100us | 6.242244us | 7.951050us | 7.532865us | 8.975810us | -| 4 | 100 | 1 | 11.126300ms | 18.010590us | 3.784443us | 4.502648us | 4.375368us | 4.806132us | -| 8 | 100 | 1 | 11.819700ms | 23.843620us | 7.254938us | 2.980452us | 2.859656us | 3.279584us | -| 16 | 100 | 1 | 14.080800ms | 33.067530us | 7.192671us | 2.066721us | 2.003518us | 2.203933us | -| 32 | 100 | 1 | 16.976200ms | 50.940990us | 6.259665us | 1.591906us | 1.560955us | 1.641317us | -| 64 | 100 | 1 | 29.825600ms | 89.514280us | 11.413419us | 1.398661us | 1.371926us | 1.446989us | -| 128 | 100 | 1 | 49.993600ms | 163.182450us | 15.947358us | 1.274863us | 1.256795us | 1.310190us | -| 256 | 100 | 1 | 69.337500ms | 310.545460us | 18.818575us | 1.213068us | 1.202082us | 1.233298us | -| 512 | 100 | 1 | 106.232300ms | 613.151760us | 38.555528us | 1.197562us | 1.184011us | 1.213894us | -| 1024 | 100 | 1 | 206.819900ms | 1.619897ms | 113.747748us | 1.581930us | 1.562395us | 1.606568us | -| 2048 | 100 | 1 | 415.743100ms | 3.382844ms | 123.035604us | 1.651779us | 1.641265us | 1.665155us | -| 4096 | 100 | 1 | 870.633500ms | 7.669365ms | 108.031069us | 1.872403us | 1.867617us | 1.877980us | -| 8192 | 100 | 1 | 1773.492500ms | 17.368752ms | 353.700322us | 2.120209us | 2.112211us | 2.129182us | +| 1 | 100 | 1 | 10.541300ms | 13.028440us | 5.931177us | 13.028440us | 12.171270us | 14.747540us | +| 2 | 100 | 1 | 10.492500ms | 16.430180us | 5.719134us | 8.215090us | 7.814070us | 9.076025us | +| 4 | 100 | 1 | 11.566600ms | 18.796600us | 6.078491us | 4.699150us | 4.483505us | 5.146180us | +| 8 | 100 | 1 | 12.025300ms | 24.146470us | 5.459099us | 3.018309us | 2.913785us | 3.198025us | +| 16 | 100 | 1 | 14.182800ms | 33.894710us | 7.968415us | 2.118419us | 2.050483us | 2.274281us | +| 32 | 100 | 1 | 17.496700ms | 52.032230us | 5.692069us | 1.626007us | 1.597890us | 1.670771us | +| 64 | 100 | 1 | 30.648800ms | 95.893150us | 46.038834us | 1.498330us | 1.417959us | 1.827420us | +| 128 | 100 | 1 | 52.925700ms | 170.351640us | 17.588525us | 1.330872us | 1.309271us | 1.365187us | +| 256 | 100 | 1 | 92.420700ms | 324.261340us | 39.872938us | 1.266646us | 1.246078us | 1.319050us | +| 512 | 100 | 1 | 177.316500ms | 618.727530us | 49.564266us | 1.208452us | 1.193461us | 1.233429us | +| 1024 | 100 | 1 | 337.607400ms | 1.600569ms | 75.134291us | 1.563055us | 1.549703us | 1.578786us | +| 2048 | 100 | 1 | 698.756400ms | 3.459631ms | 83.390560us | 1.689273us | 1.681921us | 1.698029us | +| 4096 | 100 | 1 | 1358.317700ms | 7.993341ms | 215.236719us | 1.951499us | 1.944325us | 1.967949us | +| 8192 | 100 | 1 | 2775.612300ms | 17.910743ms | 570.322753us | 2.186370us | 2.176275us | 2.206139us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-OneRandomBattle-OneRandomInput | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 19.242200ms | 113.750670us | 39.257362us | 113.750670us | 104.957080us | 120.520780us | -| 2 | 100 | 1 | 23.342900ms | 163.660400us | 55.008293us | 81.830200us | 75.576850us | 86.524970us | -| 4 | 100 | 1 | 35.989200ms | 258.799750us | 86.733160us | 64.699938us | 59.633897us | 68.355985us | -| 8 | 100 | 1 | 60.036300ms | 441.128670us | 147.537211us | 55.141084us | 50.809276us | 58.202946us | -| 16 | 100 | 1 | 119.080900ms | 767.155250us | 270.519669us | 47.947203us | 43.989191us | 50.786746us | -| 32 | 100 | 1 | 183.825900ms | 1.427266ms | 505.020716us | 44.602051us | 40.917186us | 47.241072us | -| 64 | 100 | 1 | 378.083900ms | 2.758346ms | 979.472917us | 43.099159us | 39.530846us | 45.669090us | -| 128 | 100 | 1 | 768.736700ms | 5.320131ms | 1.892549ms | 41.563525us | 38.097039us | 44.036872us | -| 256 | 100 | 1 | 1506.985900ms | 10.670412ms | 3.824515ms | 41.681298us | 38.193117us | 44.196862us | -| 512 | 100 | 1 | 3213.256200ms | 22.529488ms | 8.093681ms | 44.002906us | 40.312809us | 46.632026us | -| 1024 | 100 | 1 | 8066.435900ms | 57.763368ms | 20.725942ms | 56.409539us | 51.702219us | 59.801341us | -| 2048 | 100 | 1 | 14085.102700ms | 132.137078ms | 47.088954ms | 64.520058us | 59.074837us | 68.334073us | -| 4096 | 100 | 1 | 29689.094700ms | 277.304770ms | 98.815939ms | 67.701360us | 62.045641us | 71.718581us | +| 1 | 100 | 1 | 43.827800ms | 112.719460us | 40.006067us | 112.719460us | 103.866890us | 119.735370us | +| 2 | 100 | 1 | 24.170900ms | 160.530620us | 53.917180us | 80.265310us | 74.071785us | 84.830580us | +| 4 | 100 | 1 | 37.308700ms | 252.503800us | 84.408844us | 63.125950us | 58.181250us | 66.657952us | +| 8 | 100 | 1 | 60.015100ms | 424.965240us | 142.620237us | 53.120655us | 48.872240us | 56.057021us | +| 16 | 100 | 1 | 117.682700ms | 755.747550us | 267.729725us | 47.234222us | 43.288974us | 50.018046us | +| 32 | 100 | 1 | 184.014700ms | 1.405710ms | 499.646419us | 43.928448us | 40.314393us | 46.555550us | +| 64 | 100 | 1 | 368.898700ms | 2.711209ms | 965.783344us | 42.362642us | 38.849028us | 44.889509us | +| 128 | 100 | 1 | 755.613700ms | 5.222448ms | 1.862974ms | 40.800375us | 37.411710us | 43.229391us | +| 256 | 100 | 1 | 1465.987700ms | 10.461787ms | 3.794401ms | 40.866357us | 37.436992us | 43.345524us | +| 512 | 100 | 1 | 3160.053200ms | 21.290674ms | 7.682748ms | 41.583348us | 38.123334us | 44.114401us | +| 1024 | 100 | 1 | 7463.083700ms | 54.427497ms | 19.520116ms | 53.151853us | 48.708483us | 56.351077us | +| 2048 | 100 | 1 | 14006.148400ms | 126.881441ms | 45.295888ms | 61.953829us | 56.803497us | 65.657293us | +| 4096 | 100 | 1 | 28753.475800ms | 270.455122ms | 96.724214ms | 66.029082us | 60.533915us | 69.992926us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-OneRandomBattle-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 36.544500ms | 112.292570us | 38.481782us | 112.292570us | 103.786710us | 119.089540us | -| 2 | 100 | 1 | 48.318600ms | 149.157030us | 27.359835us | 74.578515us | 71.295610us | 76.836620us | -| 4 | 100 | 1 | 49.264000ms | 201.802550us | 22.146888us | 50.450637us | 49.323352us | 51.497457us | -| 8 | 100 | 1 | 42.461800ms | 300.872270us | 27.015813us | 37.609034us | 36.889897us | 38.221668us | -| 16 | 100 | 1 | 61.316800ms | 491.930520us | 38.165062us | 30.745658us | 30.290282us | 31.225440us | -| 32 | 100 | 1 | 99.827500ms | 879.617250us | 51.332393us | 27.488039us | 27.176748us | 27.804264us | -| 64 | 100 | 1 | 181.603300ms | 1.711900ms | 92.886515us | 26.748445us | 26.464875us | 27.031945us | -| 128 | 100 | 1 | 567.009300ms | 5.102210ms | 146.599056us | 39.861016us | 39.641013us | 40.088013us | -| 256 | 100 | 1 | 1147.618500ms | 11.136857ms | 322.467143us | 43.503348us | 43.255864us | 43.750040us | -| 512 | 100 | 1 | 2827.583400ms | 28.372058ms | 679.705000us | 55.414177us | 55.153048us | 55.673880us | -| 1024 | 100 | 1 | 6942.700200ms | 70.199774ms | 2.038705ms | 68.554467us | 68.182769us | 68.961704us | -| 2048 | 100 | 1 | 15959.723700ms | 167.418312ms | 3.292425ms | 81.747223us | 81.431201us | 82.061785us | -| 4096 | 100 | 1 | 42363.027100ms | 393.018996ms | 8.533078ms | 95.951903us | 95.568123us | 96.389717us | +| 1 | 100 | 1 | 43.922700ms | 111.652830us | 40.571981us | 111.652830us | 102.838980us | 118.845550us | +| 2 | 100 | 1 | 23.382200ms | 145.713910us | 26.207562us | 72.856955us | 69.647720us | 74.978255us | +| 4 | 100 | 1 | 23.373400ms | 199.905190us | 21.837091us | 49.976298us | 48.847640us | 50.979790us | +| 8 | 100 | 1 | 42.234600ms | 295.477800us | 26.142330us | 36.934725us | 36.245585us | 37.531289us | +| 16 | 100 | 1 | 61.742100ms | 501.147390us | 44.525426us | 31.321712us | 30.802489us | 31.900344us | +| 32 | 100 | 1 | 100.114300ms | 856.389770us | 50.267584us | 26.762180us | 26.456681us | 27.075145us | +| 64 | 100 | 1 | 178.414200ms | 1.665300ms | 89.828955us | 26.020314us | 25.746976us | 26.296171us | +| 128 | 100 | 1 | 553.699900ms | 4.987189ms | 146.122032us | 38.962417us | 38.742493us | 39.189815us | +| 256 | 100 | 1 | 1126.706000ms | 10.883946ms | 324.816765us | 42.515413us | 42.269293us | 42.766302us | +| 512 | 100 | 1 | 2835.951000ms | 27.679104ms | 802.001036us | 54.060749us | 53.763608us | 54.375828us | +| 1024 | 100 | 1 | 6731.301700ms | 68.865287ms | 2.134091ms | 67.251257us | 66.854499us | 67.670156us | +| 2048 | 100 | 1 | 16206.289500ms | 164.233232ms | 2.906670ms | 80.192008us | 79.914973us | 80.471241us | +| 4096 | 100 | 1 | 37643.809700ms | 383.116512ms | 5.285517ms | 93.534305us | 93.287975us | 93.793621us | ## SV-SingleBattle-AnalyzeEffect-RandomInputs-ManyRandomBattles-ManyRandomInputs | Inputs | Samples | Iterations / Sample | Estimated Completion Time | Mean of Samples | Standard Deviation | Mean / Input Count | Mean Lower Bound / Input Count | Mean Upper Bound / Input Count | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | 100 | 1 | 32.653500ms | 113.680170us | 38.403727us | 113.680170us | 105.403460us | 120.568680us | -| 2 | 100 | 1 | 53.621500ms | 180.854960us | 32.791123us | 90.427480us | 86.742940us | 93.283315us | -| 4 | 100 | 1 | 44.415400ms | 298.041510us | 33.945505us | 74.510378us | 72.752850us | 76.082777us | -| 8 | 100 | 1 | 66.847000ms | 518.581030us | 46.856512us | 64.822629us | 63.601356us | 65.892157us | -| 16 | 100 | 1 | 123.580700ms | 940.561590us | 66.591066us | 58.785099us | 57.946878us | 59.577976us | -| 32 | 100 | 1 | 222.007600ms | 1.775251ms | 92.689523us | 55.476579us | 54.899408us | 56.031337us | -| 64 | 100 | 1 | 439.581700ms | 3.410159ms | 141.671874us | 53.283730us | 52.836187us | 53.705146us | -| 128 | 100 | 1 | 815.239000ms | 6.420998ms | 199.428102us | 50.164045us | 49.855009us | 50.463313us | -| 256 | 100 | 1 | 1737.627300ms | 12.920832ms | 560.552604us | 50.472000us | 50.063322us | 50.926228us | -| 512 | 100 | 1 | 3540.421200ms | 28.468145ms | 1.403576ms | 55.601846us | 55.085855us | 56.158071us | -| 1024 | 100 | 1 | 7860.392700ms | 74.505971ms | 2.072923ms | 72.759738us | 72.377871us | 73.173092us | -| 2048 | 100 | 1 | 16590.917500ms | 166.923047ms | 2.150061ms | 81.505394us | 81.308571us | 81.721565us | -| 4096 | 100 | 1 | 34875.037300ms | 350.612518ms | 3.360694ms | 85.598759us | 85.444323us | 85.765742us | +| 1 | 100 | 1 | 43.503800ms | 109.761820us | 39.599605us | 109.761820us | 101.050780us | 116.725570us | +| 2 | 100 | 1 | 29.046100ms | 175.478060us | 31.766608us | 87.739030us | 84.205905us | 90.525090us | +| 4 | 100 | 1 | 44.466200ms | 289.574130us | 33.055137us | 72.393533us | 70.690740us | 73.939113us | +| 8 | 100 | 1 | 64.942500ms | 504.566800us | 45.397458us | 63.070850us | 61.874214us | 64.119214us | +| 16 | 100 | 1 | 122.231300ms | 936.558500us | 65.025979us | 58.534906us | 57.717967us | 59.307098us | +| 32 | 100 | 1 | 218.511000ms | 1.730419ms | 84.485550us | 54.075606us | 53.544692us | 54.578967us | +| 64 | 100 | 1 | 437.480700ms | 3.325123ms | 140.270084us | 51.955044us | 51.507558us | 52.368336us | +| 128 | 100 | 1 | 821.374800ms | 6.281662ms | 186.730843us | 49.075488us | 48.787795us | 49.357607us | +| 256 | 100 | 1 | 1710.415000ms | 12.646619ms | 940.399163us | 49.400856us | 48.921907us | 50.654378us | +| 512 | 100 | 1 | 3329.876900ms | 26.944854ms | 1.274852ms | 52.626668us | 52.219672us | 53.224433us | +| 1024 | 100 | 1 | 7546.190300ms | 72.334094ms | 2.357586ms | 70.638764us | 70.225276us | 71.132707us | +| 2048 | 100 | 1 | 16289.993700ms | 163.612416ms | 3.522034ms | 79.888875us | 79.592387us | 80.275833us | +| 4096 | 100 | 1 | 33610.974500ms | 342.932178ms | 3.591187ms | 83.723676us | 83.557821us | 83.901937us | diff --git a/src/AnalyzeEffect/AnalyzeEffect.cpp b/src/AnalyzeEffect/AnalyzeEffect.cpp index 36c6d882..a01124e0 100644 --- a/src/AnalyzeEffect/AnalyzeEffect.cpp +++ b/src/AnalyzeEffect/AnalyzeEffect.cpp @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include #include #include @@ -569,15 +569,14 @@ void clearRunVariables(Simulation& simulation) { } void analyzeEffect(Simulation& simulation) { - pokesim::internal::SelectForPokemonView selectedPokemon(simulation); - pokesim::internal::SelectForBattleView selectedBattle(simulation); + pokesim::internal::EntityFilter battleFilter(simulation); - if (selectedPokemon.hasNoneSelected() || selectedBattle.hasNoneSelected()) { + if (battleFilter.hasNoneSelected()) { return; } simulation.view(simulation.pokedex()); - simulation.viewForSelectedBattles(); + battleFilter.view(); if (!simulation.analyzeEffectOptions.getReconsiderActiveEffects()) { ignoreBattlesWithEffectActive(simulation); diff --git a/src/CalcDamage/CalcDamage.cpp b/src/CalcDamage/CalcDamage.cpp index b6c7ab94..33e52eb2 100644 --- a/src/CalcDamage/CalcDamage.cpp +++ b/src/CalcDamage/CalcDamage.cpp @@ -42,7 +42,6 @@ #include #include #include -#include #include #include #include diff --git a/src/Simulation/MoveHitSteps.cpp b/src/Simulation/MoveHitSteps.cpp index 5ee33e0e..0cead7b0 100644 --- a/src/Simulation/MoveHitSteps.cpp +++ b/src/Simulation/MoveHitSteps.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include "RunEvent.hpp" diff --git a/tools/updateBenchmarkResultsFile.js b/tools/updateBenchmarkResultsFile.js index 0995baba..56d4413a 100644 --- a/tools/updateBenchmarkResultsFile.js +++ b/tools/updateBenchmarkResultsFile.js @@ -1,8 +1,10 @@ const fs = require('fs'); const os = require('os'); +const util = require('util'); const {execSync, exec} = require('child_process'); const {getFullPath} = require('./utils.js'); +console.time('Total Time'); const currentOsType = os.type(); const currentCpus = os.cpus(); const currentMemory = Math.floor(os.totalmem() / 1e6); @@ -86,8 +88,10 @@ const parseExistingBenchmarkFile = () => { }; const buildBenchmarks = () => { + console.time('Build Time'); execSync('cmake --preset benchmark-release', {cwd: getFullPath(), stdio: 'inherit'}); execSync('cmake --build --preset benchmark-release', {cwd: getFullPath(), stdio: 'inherit'}); + console.timeEnd('Build Time'); }; const previousTest = parseExistingBenchmarkFile(); @@ -100,10 +104,13 @@ let newFile = `# Benchmarks # Results `; +console.time('Benchmark Time'); const benchmarkProcess = exec('./build/bin/release/PokeSimBenchmarks', {cwd: getFullPath()}, (error) => { + console.timeEnd('Benchmark Time'); if (!error) { fs.writeFileSync(benchmarkFilePath, newFile); } + console.timeEnd('Total Time'); }); const current = { @@ -129,23 +136,42 @@ benchmarkProcess.stdout.on('data', (chunk) => { const newInfo = newInfoPerLine[i]; const previousInfo = previousTest?.[newInfo?.test]?.[newInfo?.Inputs]; if (newInfo?.['Mean / Input Count'] && previousInfo?.['Mean / Input Count']) { - let diff = newInfo?.['Mean / Input Count'] - previousInfo?.['Mean / Input Count']; + const diff = newInfo['Mean / Input Count'] - previousInfo['Mean / Input Count']; + const percentDiff = Math.abs(diff / previousInfo['Mean / Input Count']); + let valueDiff = diff; + let unit = 'ns'; - if (diff >= 1e6) { - diff /= 1e6; + if (Math.abs(valueDiff) >= 1e6) { + valueDiff /= 1e6; unit = 'ms'; } - else if (diff >= 1e3) { - diff /= 1e3; + else if (Math.abs(valueDiff) >= 1e3) { + valueDiff /= 1e3; unit = 'us'; } - diff = diff.toFixed(6); - if (diff > 0) { - diff = '+' + diff; + valueDiff = valueDiff.toFixed(3); + let timesDiff = ''; + let color = ''; + let suffix = ''; + if (valueDiff > 0) { + valueDiff = '+' + valueDiff; + timesDiff = (1 / percentDiff).toFixed(3); + suffix = '% slower'; + color = 'red'; + } + else { + timesDiff = (1 / (1 - percentDiff)).toFixed(3); + suffix = '% faster'; + color = 'green'; + } + + if (percentDiff <= 0.05) { + color = 'reset'; } - process.stdout.write(' ' + diff + unit); + process.stdout.write( + util.styleText(color, (100 * percentDiff).toFixed(3).padStart(10) + suffix + ', ' + valueDiff + unit)); } process.stdout.write('\n'); } From 1ed1dc524995b2b93af5aaeb166419141037edff Mon Sep 17 00:00:00 2001 From: aed3 <32887801+aed3@users.noreply.github.com> Date: Fri, 5 Jun 2026 21:51:31 -0500 Subject: [PATCH 7/9] Removing the rest of SelectForView This removes all remaining uses of SelectForView and the files that defined/tested it. The big change in Analyze Effect speeds for larger one battle many inputs benchmarks is from changing SkippedInputCount to the correct, larger type. The previous type was too small to hold the correct value, so way more clones were being made than were needed. --- CMakeLists.txt | 1 - CMakePresets.json | 7 +- extras/PokeSim.cpp | 198 ++++---- extras/PokeSim.hpp | 456 +++--------------- extras/RecentBenchmarkResults.md | 422 ++++++++-------- src/AnalyzeEffect/AnalyzeEffect.cpp | 1 + .../AnalyzeEffectDebugChecks.hpp | 2 +- src/Battle/ManageBattleState.cpp | 2 +- src/Battle/Pokemon/ManagePokemonState.cpp | 25 +- src/CalcDamage/CalcDamage.cpp | 1 + src/CalcDamage/CalcDamageDebugChecks.hpp | 10 +- .../AnalyzeEffect/AnalyzeEffectInputs.hpp | 3 +- src/Components/Tags/RunEventTags.hpp | 6 + src/Components/Tags/Selection.hpp | 7 - src/Components/Tags/headers.hpp | 1 + src/Components/headers.hpp | 1 + src/Pokedex/Events/AbilityEvents.cpp | 5 +- src/Pokedex/Events/EffectEvents.cpp | 23 +- src/Pokedex/Events/ItemEvents.cpp | 14 +- src/Pokedex/Events/MoveEvents.cpp | 3 +- src/SimulateTurn/CalcDamageSpecifics.cpp | 6 +- src/SimulateTurn/ManageActionQueue.cpp | 1 + src/SimulateTurn/SimulateTurn.cpp | 102 ++-- src/SimulateTurn/SimulateTurnDebugChecks.hpp | 3 +- src/Simulation/RegistryContainer.hpp | 342 ------------- src/Simulation/RunEvent.cpp | 12 +- src/Simulation/Simulation.cpp | 24 +- src/Simulation/Simulation.hpp | 43 +- src/Simulation/headers.hpp | 1 - src/Utilities/SelectForView.hpp | 61 --- src/Utilities/headers.hpp | 1 - tests/RegistryContainerTests.cpp | 98 ---- tests/VerticalSlices.cpp | 4 +- 33 files changed, 536 insertions(+), 1350 deletions(-) create mode 100644 src/Components/Tags/RunEventTags.hpp delete mode 100644 src/Simulation/RegistryContainer.hpp delete mode 100644 src/Utilities/SelectForView.hpp delete mode 100644 tests/RegistryContainerTests.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index e89b8f28..bddf2075 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -238,7 +238,6 @@ if(ENABLE_TESTING) tests/Moves/FuryAttack.cpp tests/Moves/KnockOff.cpp tests/PokedexTest.cpp - tests/RegistryContainerTests.cpp tests/SimulateTurnsTest.cpp tests/SimulationSetupTest.cpp tests/Tests.cpp diff --git a/CMakePresets.json b/CMakePresets.json index f014b3ff..168e51c5 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -80,9 +80,12 @@ { "name": "benchmark-release-with-checks", "inherits": [ - "test", "benchmark-release" - ] + ], + "cacheVariables": { + "CMAKE_BUILD_TYPE": "RelWithDebInfo", + "ENABLE_TESTING": "ON" + } }, { "name": "profile", diff --git a/extras/PokeSim.cpp b/extras/PokeSim.cpp index b4f67652..32581aef 100644 --- a/extras/PokeSim.cpp +++ b/extras/PokeSim.cpp @@ -1901,32 +1901,17 @@ void Simulation::run() { analyzeEffect(); } -types::entityVector Simulation::selectedBattleEntities() const { - if (hasActiveSelection()) { - auto view = registry.view(); - return {view.begin(), view.end()}; - } - +types::entityVector Simulation::battleEntities() const { auto view = registry.view(); return {view.begin(), view.end()}; } -types::entityVector Simulation::selectedMoveEntities() const { - if (hasActiveSelection()) { - auto view = registry.view(); - return {view.begin(), view.end()}; - } - +types::entityVector Simulation::moveEntities() const { auto view = registry.view(); return {view.begin(), view.end()}; } -types::entityVector Simulation::selectedPokemonEntities() const { - if (hasActiveSelection()) { - auto view = registry.view(); - return {view.begin(), view.end()}; - } - +types::entityVector Simulation::pokemonEntities() const { auto view = registry.view(); return {view.begin(), view.end()}; } @@ -1957,10 +1942,6 @@ void runBeforeMove(Simulation& simulation) { } void runResidual(Simulation& simulation) { - pokesim::internal::SelectForPokemonView selectedPokemon{simulation}; - if (selectedPokemon.hasNoneSelected()) { - return; - } dex::Burn::onResidual(simulation); } @@ -2042,10 +2023,6 @@ template void runAfterEachBoostEvent(Simulation&); void runAfterBoostEvent(Simulation&) {} void runModifyMove(Simulation& simulation) { - // internal::SelectForPokemonView<> selectedPokemon{ - // simulation, - // getMoveEventPokemonSelector()}; - dex::ChoiceScarf::onSourceModifyMove(simulation); dex::ChoiceSpecs::onSourceModifyMove(simulation); } @@ -2326,6 +2303,10 @@ void runMoveHitChecks(Simulation& simulation) { namespace pokesim::simulate_turn { namespace { +auto getBattleFilter(Simulation& simulation) { + return pokesim::internal::EntityFilter{simulation}; +} + void addTargetAllyToTargets(types::registry& registry, const Battle& battle) { const Sides& sides = registry.get(battle.val); const TargetSlotName& targetSlotName = registry.get(registry.get(battle.val).val); @@ -2403,7 +2384,7 @@ void removeActionBySource(types::handle sourceHandle, Battle battle) { } void runMoveAction(Simulation& simulation) { - simulation.viewForSelectedBattles>(); + getBattleFilter(simulation).view>(); simulation.view< removeActionBySource, @@ -2413,11 +2394,13 @@ void runMoveAction(Simulation& simulation) { Tags, entt::exclude_t>(); - pokesim::internal::SelectForBattleView selectedBattle{simulation}; - if (selectedBattle.hasNoneSelected()) return; + pokesim::internal::EntityFilter battleFilter{simulation}; + if (battleFilter.hasNoneSelected()) { + return; + } - simulation.viewForSelectedBattles(simulation); - simulation.viewForSelectedBattles(simulation.pokedex()); + battleFilter.view(simulation); + battleFilter.view(simulation.pokedex()); runBeforeMove(simulation); @@ -2428,10 +2411,12 @@ void runMoveAction(Simulation& simulation) { } void runResidualAction(Simulation& simulation) { - pokesim::internal::SelectForBattleView selectedBattle{simulation}; - if (selectedBattle.hasNoneSelected()) return; + pokesim::internal::EntityFilter battleFilter{simulation}; + if (battleFilter.hasNoneSelected()) { + return; + } - simulation.viewForSelectedBattles>(); + battleFilter.view>(); simulation.registry.clear(); runResidual(simulation); @@ -2467,6 +2452,11 @@ void checkWin(types::handle battleHandle, const Sides& sides) { } void faintPokemon(Simulation& simulation) { + auto battleFilter = getBattleFilter(simulation); + if (battleFilter.hasNoneSelected()) { + return; + } + using LoopLimits = Constants::ActivePokemon; types::activePokemonIndex iterations = LoopLimits::MIN; while (!simulation.registry.view().empty()) { @@ -2474,27 +2464,31 @@ void faintPokemon(Simulation& simulation) { iterations <= LoopLimits::MAX, "More Pokemon were queued to faint in at least one battle than possible."); - simulation.viewForSelectedBattles(); + battleFilter.view(); - pokesim::internal::SelectForPokemonView selectedPokemon{simulation}; + pokesim::internal::EntityFilter pokemonFilter{simulation}; POKESIM_REQUIRE( - !selectedPokemon.hasNoneSelected(), + !pokemonFilter.hasNoneSelected(), "This loop should only be run if setFainting had Pokemon to set as fainting."); runFaintEvent(simulation); runEndAbilityEvent(simulation); + + pokemonFilter.addToSelected(); runEndItemEvent(simulation); - simulation.viewForSelectedPokemon(); + simulation.registry.clear(); + + pokemonFilter.view(); simulation.addToEntities(); simulation.removeFromEntities(); simulation.removeFromEntities(); - simulation.viewForSelectedBattles(); + battleFilter.view(); iterations++; } - simulation.viewForSelectedBattles, entt::exclude_t>(); + battleFilter.view, entt::exclude_t>(); runAfterFaintEvent(simulation); } @@ -2510,7 +2504,7 @@ void runCurrentAction(Simulation& simulation) { // Switch requests updateAllStats(simulation); - simulation.viewForSelectedBattles>(); + getBattleFilter(simulation).view>(); simulation.registry.clear(); } @@ -2523,13 +2517,14 @@ void updateActivePokemonPostTurn(types::registry& registry, const pokesim::MoveS } void nextTurn(Simulation& simulation) { - simulation.viewForSelectedBattles(); + getBattleFilter(simulation).view(); - pokesim::internal::SelectForPokemonView selectedPokemon{ - simulation}; - if (!selectedPokemon.hasNoneSelected()) { - simulation.viewForSelectedPokemon(); + pokesim::internal::EntityFilter pokemonFilter{simulation}; + if (!pokemonFilter.hasNoneSelected()) { + pokemonFilter.view(); + pokemonFilter.addToSelected(); runDisableMove(simulation); + simulation.registry.clear(); } } @@ -2544,35 +2539,33 @@ void simulateTurn(Simulation& simulation) { "Rebuild PokeSim with the flag POKESIM_ALL_DAMAGE_ALL_BRANCHES to enable this option combination."); #endif + auto battleFilter = getBattleFilter(simulation); + if (battleFilter.hasNoneSelected()) { + return; + } + if (!options.getApplyChangesToInputBattle()) { - simulation.addToEntities(); + simulation.addToEntities(); const auto entityMap = clone(simulation.registry, 1U); for (const auto& inputBattleMapping : entityMap) { simulation.registry.emplace(inputBattleMapping.first); + simulation.registry.remove(inputBattleMapping.first); } } - pokesim::internal::SelectForBattleView selectedBattles{ - simulation, - entt::exclude}; - pokesim::internal::SelectForSideView selectedSides{ - simulation, - entt::exclude}; - if (selectedBattles.hasNoneSelected() || selectedSides.hasNoneSelected()) return; - - simulation.viewForSelectedBattles(); + battleFilter.view(); updateAllStats(simulation); - simulation.viewForSelectedSides(); - simulation.removeFromEntities(); + simulation.view>(); + simulation.removeFromEntities(); - // simulation.viewForSelectedBattles, entt::exclude_t>(); - simulation.viewForSelectedBattles(); - simulation.viewForSelectedBattles, entt::exclude_t>(); + // battleFilter.view, entt::exclude_t>(); + battleFilter.view(); + battleFilter.view, entt::exclude_t>(); - simulation.addToEntities(); + simulation.addToEntities(); - simulation.viewForSelectedBattles(); + battleFilter.view(); using ActionsLimit = Constants::ActionQueueLength; types::actionQueueIndex actionsTaken = ActionsLimit::MIN; while (!simulation.registry.view().empty()) { @@ -2581,14 +2574,17 @@ void simulateTurn(Simulation& simulation) { "More actions in a turn were queued to be taken than in at least one battle than are possible."); runCurrentAction(simulation); - simulation.viewForSelectedBattles, entt::exclude_t>(); + battleFilter.view, entt::exclude_t>(); actionsTaken++; } nextTurn(simulation); - simulation.removeFromEntities(); - simulation.viewForSelectedBattles(); + simulation + .removeFromEntities(); + battleFilter.view(); + + simulation.addToEntities(); simulation.registry.clear(); } } // namespace @@ -3228,6 +3224,7 @@ void resolveTeamDecision(types::registry& registry, const types::teamOrder& team battleActionQueue.val.push_back(actionHandle.entity()); } } // namespace + void resolveDecision(types::handle sideHandle, const SideDecision& sideDecision) { POKESIM_REQUIRE(sideDecision.sideId != PlayerSideId::NONE, "Decisions must be assigned to a player."); POKESIM_REQUIRE(!sideDecision.decisions.valueless_by_exception(), "Decisions must be non-empty."); @@ -3455,11 +3452,11 @@ types::eventPossibilities countUniqueDamageRolls(types::handle moveHandle) { } void updateAllDamageRollProbabilities(Simulation& simulation) { - simulation.viewForSelectedMoves(); + simulation.view(); } void updatePartialProbabilities(Simulation& simulation) { - simulation.viewForSelectedMoves(); + simulation.view(); } } // namespace @@ -3470,7 +3467,7 @@ void cloneFromDamageRolls(Simulation& simulation, DamageRollKind damageRollKind) bool forAllDamageRolls = damageRollKind & DamageRollKind::ALL_DAMAGE_ROLLS; bool forRequiredDamageRolls = simulation.simulateTurnOptions.getMakeBranchesOnRandomEvents() || forAllDamageRolls; - auto applyChoices = [](Simulation& sim) { sim.viewForSelectedMoves(); }; + auto applyChoices = [](Simulation& sim) { sim.view(); }; auto updateProbabilities = forAllDamageRolls ? updateAllDamageRollProbabilities : updatePartialProbabilities; runRandomEventCount( @@ -4229,7 +4226,7 @@ void KnockOff::onBasePower(Simulation& simulation) { } void KnockOff::onAfterHit(Simulation& simulation) { - simulation.viewForSelectedMoves>(); + simulation.view>(); tryRemoveItem(simulation); simulation.registry.clear(); } @@ -4275,8 +4272,7 @@ void sourceModifyDamage( template struct FocusSashOnAfterModifyDamage { static void run(Simulation& simulation, types::damage hpToKeep) { - simulation.viewForSelectedPokemon>( - hpToKeep); + simulation.view>(hpToKeep); } static void modifyDamage( @@ -4331,7 +4327,7 @@ void AssaultVest::onModifySpd(Simulation& simulation) { } void AssaultVest::onEnd(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); } void BrightPowder::onModifyAccuracy(Simulation& simulation) { @@ -4351,7 +4347,7 @@ void ChoiceScarf::onSourceModifyMove(Simulation& simulation) { } void ChoiceScarf::onEnd(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); } void ChoiceSpecs::onModifySpa(Simulation& simulation) { @@ -4365,7 +4361,7 @@ void ChoiceSpecs::onSourceModifyMove(Simulation& simulation) { } void ChoiceSpecs::onEnd(Simulation& simulation) { - simulation.addToEntities(); + simulation.addToEntities(); } void FocusSash::onAfterModifyDamage(Simulation& simulation) { @@ -4391,7 +4387,7 @@ void LifeOrb::onModifyDamage(Simulation& simulation) { void LifeOrb::onAfterMoveUsed(Simulation& simulation) { const auto divisor = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon>(divisor); + simulation.view>(divisor); } } // namespace pokesim::dex @@ -4455,7 +4451,7 @@ void Burn::onSetDamageRollModifiers(Simulation& simulation) { void Burn::onResidual(Simulation& simulation) { const auto divisor = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon>(divisor); + simulation.view>(divisor); } void Paralysis::onModifySpe(Simulation& simulation) { @@ -4477,23 +4473,26 @@ void Paralysis::onBeforeMove(Simulation& simulation) { pokesim::internal::randomBinaryChance( simulation, - [](Simulation& sim) { - sim.viewForSelectedPokemon>(); - }, + [](Simulation& sim) { sim.view>(); }, std::nullopt); simulation.view>(); simulation.registry.clear(); } void ChoiceLock::onBeforeMove(Simulation& simulation) { - simulation.viewForSelectedPokemon, entt::exclude_t>(); - simulation.viewForSelectedPokemon(simulation.pokedex()); + simulation.view, entt::exclude_t>(); + simulation.view(simulation.pokedex()); } void ChoiceLock::onDisableMove(Simulation& simulation) { - simulation.viewForSelectedPokemon, entt::exclude_t>(); - simulation.viewForSelectedPokemon(simulation.pokedex()); - simulation.viewForSelectedPokemon(); + internal::EntityFilter filter{simulation}; + if (filter.hasNoneSelected()) { + return; + } + + filter.view, entt::exclude_t>(); + filter.view(simulation.pokedex()); + filter.view(); } } // namespace pokesim::dex @@ -4541,13 +4540,13 @@ void Plus::onModifySpA(Simulation& simulation) { if (simulation.isBattleFormat(BattleFormat::SINGLES)) { return; } - simulation.viewForSelectedPokemon>(); + simulation.view>(); } void Static::onDamagingHit(Simulation& simulation) { const auto chanceOfStatic = simulation.pokedex().getStaticValue(); - simulation.viewForSelectedPokemon>(chanceOfStatic, simulation); + simulation.view>(chanceOfStatic, simulation); // TODO(aed3): This is now inefficient since the random chance will happen for move sources that cannot have their // status changed. @@ -5432,7 +5431,7 @@ void removeItemTags(types::handle handle, ItemName item) { template void removeItemComponents(Simulation& simulation) { - simulation.viewForSelectedPokemon(); + simulation.view>(); simulation.removeFromEntities(); simulation.registry.clear(); } @@ -5544,11 +5543,6 @@ void checkIfCanUseItem(Simulation& simulation) { } void useItem(Simulation& simulation) { - pokesim::internal::SelectForPokemonView selectedPokemon{simulation}; - if (selectedPokemon.hasNoneSelected()) { - return; - } - runAfterUseItemEvent(simulation); removeItemComponents(simulation); } @@ -5564,12 +5558,10 @@ void checkIfCanRemoveItem(Simulation& simulation) { } void removeItem(Simulation& simulation) { - pokesim::internal::SelectForPokemonView selectedPokemon{simulation}; - if (selectedPokemon.hasNoneSelected()) { - return; - } - + simulation.addToEntities(); runEndItemEvent(simulation); + simulation.registry.clear(); + removeItemComponents(simulation); } @@ -5743,7 +5735,7 @@ void updateSpa(Simulation& simulation, bool ignoreBoosts) { } runModifySpa(simulation); - simulation.registry.clear(); + filter.clearSelectionTags(); } void updateSpd(Simulation& simulation, bool ignoreBoosts) { @@ -5757,7 +5749,7 @@ void updateSpd(Simulation& simulation, bool ignoreBoosts) { } runModifySpd(simulation); - simulation.registry.clear(); + filter.clearSelectionTags(); } void updateSpe(Simulation& simulation, bool ignoreBoosts) { @@ -5772,8 +5764,8 @@ void updateSpe(Simulation& simulation, bool ignoreBoosts) { runModifySpe(simulation); // trick room - simulation.viewForSelectedPokemon>(); - simulation.registry.clear(); + filter.view>(); + filter.clearSelectionTags(); } } // namespace pokesim @@ -5935,7 +5927,7 @@ void clearCurrentAction(Simulation& simulation) { registry.destroy(failedActionMoves.begin(), failedActionMoves.end()); registry.destroy(currentActions.begin(), currentActions.end()); - auto battles = simulation.selectedBattleEntities(); + auto battles = simulation.battleEntities(); registry.remove< action::tags::Item, ItemName, diff --git a/extras/PokeSim.hpp b/extras/PokeSim.hpp index 2779f462..70f12cba 100644 --- a/extras/PokeSim.hpp +++ b/extras/PokeSim.hpp @@ -166,6 +166,7 @@ * src/Components/Tags/MoveTags.hpp * src/Components/Tags/NatureTags.hpp * src/Components/Tags/PokemonTags.hpp + * src/Components/Tags/RunEventTags.hpp * src/Components/Tags/Selection.hpp * src/Components/Tags/SimulationTags.hpp * src/Components/Tags/StatusTags.hpp @@ -197,7 +198,6 @@ * src/Simulation/Formulas.hpp * src/Utilities/Tags.hpp * src/Utilities/RegistryLoop.hpp - * src/Simulation/RegistryContainer.hpp * src/Simulation/Simulation.hpp * src/Utilities/DebugChecks.hpp * src/Simulation/SimulationSetupDebugChecks.hpp @@ -236,7 +236,6 @@ * src/Pokedex/Moves/Thunderbolt.hpp * src/Pokedex/Moves/WillOWisp.hpp * src/Simulation/RunEvent.hpp - * src/Utilities/SelectForView.hpp * src/Battle/ManageBattleState.hpp * src/SimulateTurn/RandomChance.hpp * src/Simulation/MoveHitSteps.hpp @@ -18443,7 +18442,7 @@ struct MovePair { }; struct SkippedInputCount { - types::eventPossibilities val = 0U; + types::entityIndex val = 0U; }; namespace tags { @@ -19840,15 +19839,17 @@ struct CanSetStatus {}; ////////////////// END OF src/Components/Tags/PokemonTags.hpp ////////////////// -////////////////// START OF src/Components/Tags/Selection.hpp ////////////////// +//////////////// START OF src/Components/Tags/RunEventTags.hpp ///////////////// namespace pokesim::tags { -struct SelectedForViewBattle {}; -struct SelectedForViewSide {}; -struct SelectedForViewPokemon {}; -struct SelectedForViewMove {}; +struct DisableMove {}; +struct EndItem {}; } // namespace pokesim::tags +///////////////// END OF src/Components/Tags/RunEventTags.hpp ////////////////// + +////////////////// START OF src/Components/Tags/Selection.hpp ////////////////// + namespace pokesim::internal::tags { struct CloneFromDamageRolls {}; struct ApplySideDamageRollOptions {}; @@ -22416,336 +22417,6 @@ struct RegistryLoop< //////////////////// END OF src/Utilities/RegistryLoop.hpp ///////////////////// -//////////////// START OF src/Simulation/RegistryContainer.hpp ///////////////// - -namespace pokesim::internal { -class RegistryContainer { - public: - using SelectionFunction = entt::delegate; - - private: - template - friend struct SelectForView; - - using SelectionFunctionList = internal::maxSizedVector; - SelectionFunctionList battleSelection{}; - SelectionFunctionList sideSelection{}; - SelectionFunctionList pokemonSelection{}; - SelectionFunctionList moveSelection{}; - - template - SelectionFunctionList& selectedFunctions() { - if constexpr (std::is_same_v) { - return battleSelection; - } - else if constexpr (std::is_same_v) { - return sideSelection; - } - else if constexpr (std::is_same_v) { - return pokemonSelection; - } - else { - return moveSelection; - } - } - - template - const SelectionFunctionList& selectedFunctions() const { - if constexpr (std::is_same_v) { - return battleSelection; - } - else if constexpr (std::is_same_v) { - return sideSelection; - } - else if constexpr (std::is_same_v) { - return pokemonSelection; - } - else { - return moveSelection; - } - } - - template - std::size_t select( - GetNewSelection getNewSelection, GetUnmatchedSelection getUnmatchedSelection, SelectionFunction selectionFunction, - bool isEmptySelection = false) { - auto list = getNewSelection(registry); - if (list.empty()) { - return 0U; - } - - bool narrowSelection = hasActiveSelection(); - std::size_t finalSelectionSize = 0U; - - if (narrowSelection && isEmptySelection) { - selectedFunctions().push_back(selectionFunction); - return registry.view().size(); - } - if (narrowSelection) { - auto unmatchedSelections = getUnmatchedSelection(registry); - std::size_t totalSelected = registry.view().size(); - std::size_t unmatchedSelectionSize = unmatchedSelections.size(); - if (unmatchedSelectionSize == totalSelected) { - return 0U; - } - - registry.remove(unmatchedSelections.begin(), unmatchedSelections.end()); - - POKESIM_REQUIRE( - unmatchedSelectionSize < totalSelected, - "The number of elements removed from the active selection must be less than the number of elements selected."); - finalSelectionSize = totalSelected - unmatchedSelectionSize; - } - else { - registry.clear(); - registry.insert(list.begin(), list.end()); - finalSelectionSize = list.size(); - } - - selectedFunctions().push_back(selectionFunction); - - return finalSelectionSize; - } - - template - std::size_t select(entt::exclude_t exclude) { - auto getNewSelection = [&exclude](types::registry& reg) { - auto view = reg.view(exclude); - return types::entityVector{view.begin(), view.end()}; - }; - auto getUnmatchedSelection = [](types::registry& reg) { - auto view = reg.view(entt::exclude); - return types::entityVector{view.begin(), view.end()}; - }; - SelectionFunction selectionFunction{[](const void*, const types::registry& reg) { - auto view = reg.view(entt::exclude); - return types::entityVector{view.begin(), view.end()}; - }}; - - return select( - getNewSelection, - getUnmatchedSelection, - selectionFunction, - sizeof...(ComponentsToSelect) == 0U); - } - - template - std::size_t select(SelectionFunction selectionFunction) { - auto getUnmatchedSelections = [&selectionFunction](const types::registry& reg) -> types::entityVector { - auto upcomingSelection = selectionFunction(reg); - auto currentSelection = reg.view(); - auto end = - std::remove_if(upcomingSelection.begin(), upcomingSelection.end(), [¤tSelection](types::entity entity) { - return !currentSelection.contains(entity); - }); - return {upcomingSelection.begin(), end}; - }; - - return select(selectionFunction, getUnmatchedSelections, selectionFunction); - } - - template - void deselect() { - POKESIM_REQUIRE(hasActiveSelection(), "Selections must be present to deselect."); - - registry.clear(); - SelectionFunctionList& functions = selectedFunctions(); - functions.pop_back(); - - if (functions.empty()) { - return; - } - - types::entityVector filteredEntityList = functions[0](registry); - auto end = filteredEntityList.end(); - for (std::size_t i = 1U; i < functions.size(); i++) { - types::entityVector previouslySelected = functions[i](registry); - end = std::remove_if(filteredEntityList.begin(), end, [&previouslySelected](types::entity entity) { - return std::find(previouslySelected.begin(), previouslySelected.end(), entity) == previouslySelected.end(); - }); - } - - registry.insert(filteredEntityList.begin(), end); - } - - protected: - template - bool hasActiveSelection() const { - return !selectedFunctions().empty(); - } - - private: - template - struct ForSelected; - - template < - typename Selected, typename Required, auto Function, typename ExcludeContainer, typename IncludeContainer, - typename... ExtraTags> - struct ForSelected, ExcludeContainer, IncludeContainer> { - template - static void view(RegistryContainer* container, const PassedInArgs&... passedInArgs) { - if (container->hasActiveSelection()) { - container->view, ExcludeContainer, IncludeContainer>( - passedInArgs...); - } - else { - container->view, ExcludeContainer, IncludeContainer>(passedInArgs...); - } - } - - template - static void group(RegistryContainer* container, const PassedInArgs&... passedInArgs) { - if (container->hasActiveSelection()) { - container->view, ExcludeContainer, IncludeContainer>(passedInArgs...); - } - else { - container->group, ExcludeContainer, IncludeContainer>(passedInArgs...); - } - } - }; - - public: - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - void viewForSelectedBattles(const PassedInArgs&... passedInArgs) { - ForSelected< - pokesim::tags::SelectedForViewBattle, - pokesim::tags::Battle, - Function, - TagContainer, - ExcludeContainer, - IncludeContainer>::view(this, passedInArgs...); - } - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - void groupForSelectedBattles(const PassedInArgs&... passedInArgs) { - ForSelected< - pokesim::tags::SelectedForViewBattle, - pokesim::tags::Battle, - Function, - TagContainer, - ExcludeContainer, - IncludeContainer>::group(this, passedInArgs...); - } - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - void viewForSelectedSides(const PassedInArgs&... passedInArgs) { - ForSelected< - pokesim::tags::SelectedForViewSide, - pokesim::tags::Side, - Function, - TagContainer, - ExcludeContainer, - IncludeContainer>::view(this, passedInArgs...); - } - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - void groupForSelectedSides(const PassedInArgs&... passedInArgs) { - ForSelected< - pokesim::tags::SelectedForViewSide, - pokesim::tags::Side, - Function, - TagContainer, - ExcludeContainer, - IncludeContainer>::group(this, passedInArgs...); - } - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - void viewForSelectedPokemon(const PassedInArgs&... passedInArgs) { - ForSelected< - pokesim::tags::SelectedForViewPokemon, - pokesim::tags::Pokemon, - Function, - TagContainer, - ExcludeContainer, - IncludeContainer>::view(this, passedInArgs...); - } - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - void groupForSelectedPokemon(const PassedInArgs&... passedInArgs) { - ForSelected< - pokesim::tags::SelectedForViewPokemon, - pokesim::tags::Pokemon, - Function, - TagContainer, - ExcludeContainer, - IncludeContainer>::group(this, passedInArgs...); - } - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - void viewForSelectedMoves(const PassedInArgs&... passedInArgs) { - ForSelected< - pokesim::tags::SelectedForViewMove, - pokesim::tags::CurrentActionMove, - Function, - TagContainer, - ExcludeContainer, - IncludeContainer>::view(this, passedInArgs...); - } - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - void groupForSelectedMoves(const PassedInArgs&... passedInArgs) { - ForSelected< - pokesim::tags::SelectedForViewMove, - pokesim::tags::CurrentActionMove, - Function, - TagContainer, - ExcludeContainer, - IncludeContainer>::group(this, passedInArgs...); - } - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - auto view(const PassedInArgs&... passedInArgs) { - return internal::RegistryLoop::view( - registry, - passedInArgs...); - } - - template < - auto Function, typename TagContainer = Tags<>, typename ExcludeContainer = entt::exclude_t<>, - typename IncludeContainer = entt::get_t<>, typename... PassedInArgs> - auto group(const PassedInArgs&... passedInArgs) { - return internal::RegistryLoop::group( - registry, - passedInArgs...); - } - - public: - types::registry registry{}; - - template - void addToEntities(const Args&... args) { - auto view = registry.view(); - registry.insert(view.begin(), view.end(), args...); - } - - template - void removeFromEntities(entt::exclude_t exclude = entt::exclude_t{}) { - auto view = registry.view(exclude); - registry.remove(view.begin(), view.end()); - } -}; -} // namespace pokesim::internal - -///////////////// END OF src/Simulation/RegistryContainer.hpp ////////////////// - //////////////////// START OF src/Simulation/Simulation.hpp //////////////////// namespace pokesim { @@ -22773,7 +22444,7 @@ struct SimulationSetupChecks; * @details Each `Simulation` instance will only simulate for either single or double battles. This class is optimized * for running multiple simulations of the same battle, where each battle state has completed the same number of turns. */ -class Simulation : public internal::RegistryContainer { +class Simulation { private: types::entityVector createInitialMoves(const std::vector& moveInfoList); PokemonStateSetup createInitialPokemon(const PokemonCreationInfo& pokemonInfo); @@ -22844,9 +22515,9 @@ class Simulation : public internal::RegistryContainer { void clearCalculateDamageResults(); void clearAnalyzeEffectResults(); - types::entityVector selectedBattleEntities() const; - types::entityVector selectedMoveEntities() const; - types::entityVector selectedPokemonEntities() const; + types::entityVector battleEntities() const; + types::entityVector moveEntities() const; + types::entityVector pokemonEntities() const; template