mirror of
https://github.com/libretro/easyrpg-libretro.git
synced 2026-11-11 10:51:29 -10:00
62 lines
2.2 KiB
C++
62 lines
2.2 KiB
C++
#include "test_mock_actor.h"
|
|
#include "autobattle.h"
|
|
#include "rand.h"
|
|
#include "doctest.h"
|
|
|
|
static Game_Enemy MakeEnemy(int id, int hp, int sp, int atk, int def, int spi, int agi) {
|
|
MakeDBEnemy(id, hp, sp, atk, def, spi, agi);
|
|
auto& tp = lcf::Data::troops[0];
|
|
tp.members.resize(8);
|
|
tp.members[id - 1].enemy_id = id;
|
|
Main_Data::game_enemyparty->ResetBattle(1);
|
|
auto& enemy = (*Main_Data::game_enemyparty)[id - 1];
|
|
return enemy;
|
|
}
|
|
|
|
decltype(auto) MakeActor(int id, int hp, int sp, int atk, int def, int spi, int agi) {
|
|
auto actor = Game_Actor(id);
|
|
actor.SetBaseMaxHp(hp);
|
|
actor.SetHp(actor.GetMaxHp());
|
|
actor.SetBaseMaxSp(sp);
|
|
actor.SetSp(actor.GetMaxSp());
|
|
actor.SetBaseAtk(atk);
|
|
actor.SetBaseDef(def);
|
|
actor.SetBaseSpi(spi);
|
|
actor.SetBaseAgi(agi);
|
|
return actor;
|
|
}
|
|
|
|
TEST_SUITE_BEGIN("Autobattle");
|
|
|
|
static void testNormalAttack(const Game_Actor& source, const Game_Battler& target, double v0, double v1, double v2, double v3) {
|
|
REQUIRE(doctest::Approx(v0) == AutoBattle::CalcNormalAttackAutoBattleTargetRank(source, target, Game_Battler::WeaponAll, lcf::rpg::System::BattleCondition_none, false, true));
|
|
REQUIRE(doctest::Approx(v1) == AutoBattle::CalcNormalAttackAutoBattleTargetRank(source, target, Game_Battler::WeaponAll, lcf::rpg::System::BattleCondition_none, false, false));
|
|
REQUIRE(doctest::Approx(v2) == AutoBattle::CalcNormalAttackAutoBattleTargetRank(source, target, Game_Battler::WeaponAll, lcf::rpg::System::BattleCondition_none, true, true));
|
|
REQUIRE(doctest::Approx(v3) == AutoBattle::CalcNormalAttackAutoBattleTargetRank(source, target, Game_Battler::WeaponAll, lcf::rpg::System::BattleCondition_none, true, false));
|
|
}
|
|
|
|
TEST_CASE("NormalAttackTargetRank") {
|
|
const MockActor m;
|
|
|
|
SUBCASE("actor 120/0 -> enemy 0/90") {
|
|
auto source = MakeActor(1, 500, 500, 120, 0, 0, 0);
|
|
auto target = MakeEnemy(2, 500, 500, 0, 90, 0, 0);
|
|
|
|
REQUIRE_EQ(source.GetAtk(), 120);
|
|
REQUIRE_EQ(target.GetDef(), 90);
|
|
|
|
SUBCASE("max") {
|
|
Rand::LockGuard lk(INT32_MAX);
|
|
testNormalAttack(source, target, 1.131, 1.131, 1.158, 1.158);
|
|
}
|
|
SUBCASE("min") {
|
|
Rand::LockGuard lk(INT32_MIN);
|
|
testNormalAttack(source, target, 0.141, 0.141, 0.114, 0.114);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST_SUITE_END();
|