PkmnLib/tests/BattleTests/DamageTests.cpp

47 lines
2.1 KiB
C++

#ifdef TESTS_BUILD
#include <doctest.h>
#include "../../src/Battling/Library/DamageLibrary.hpp"
#include "../../src/Battling/Pokemon/CreatePokemon.hpp"
#include "../TestLibrary/TestLibrary.hpp"
using namespace PkmnLib::Battling;
TEST_CASE("Correct rounding for damage.") {
auto lib = TestLibrary::GetLibrary();
auto mon1 = ArbUt::ScopedPtr(CreatePokemon(lib, "testCharizard"_cnc, 100)
.WithIndividualValues(31, 31, 31, 31, 31, 31)
.WithEffortValues(0, 0, 0, 0, 0, 0)
.WithNature("neutralNature"_cnc)
.WithGender(CreatureLib::Library::Gender::Male)
.IsAllowedExperienceGain(false)
.Build());
auto mon2 = ArbUt::ScopedPtr(CreatePokemon(lib, "testVenusaur"_cnc, 100)
.WithIndividualValues(31, 31, 31, 31, 31, 31)
.WithEffortValues(0, 0, 0, 0, 0, 0)
.WithNature("neutralNature"_cnc)
.WithGender(CreatureLib::Library::Gender::Male)
.IsAllowedExperienceGain(false)
.Build());
auto move = PkmnLib::Library::MoveData("test", 0, PkmnLib::Library::MoveCategory::Physical, 55, 100, 10,
CreatureLib::Library::AttackTarget::All, 0, nullptr, {});
auto attack = PkmnLib::Battling::LearnedMove(&move, CreatureLib::Battling::AttackLearnMethod::Unknown);
auto executingAttack =
CreatureLib::Battling::ExecutingAttack({mon2.GetValue()}, 1, mon1.GetValue(), &attack, &move, nullptr);
auto hit = executingAttack.GetHitData(mon2.GetValue(), 0);
hit.SetBasePower(55);
hit.SetEffectiveness(2.0f);
hit.SetCritical(0);
auto damage = lib->GetDamageLibrary()->GetDamage(&executingAttack, mon2, 0, hit);
REQUIRE_EQ(144, damage);
hit.SetBasePower(110);
damage = lib->GetDamageLibrary()->GetDamage(&executingAttack, mon2, 0, hit);
REQUIRE_EQ(284, damage);
}
#endif