Gen7Tests/src/LibraryTests/TypeTests.cpp

404 lines
16 KiB
C++

#include "../../extern/catch.hpp"
#include "../Library.hpp"
#define CHECK_EFFECTIVENESS(attack, defense, expected) \
CHECK(typeLib->GetSingleEffectiveness(typeLib->GetTypeId(ArbUt::StringView(#attack)), \
typeLib->GetTypeId(ArbUt::StringView(#defense))) == expected);
TEST_CASE("Type Effectiveness - Normal Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Normal, Normal, 1);
CHECK_EFFECTIVENESS(Normal, Fighting, 1);
CHECK_EFFECTIVENESS(Normal, Flying, 1);
CHECK_EFFECTIVENESS(Normal, Poison, 1);
CHECK_EFFECTIVENESS(Normal, Ground, 1);
CHECK_EFFECTIVENESS(Normal, Rock, 0.5);
CHECK_EFFECTIVENESS(Normal, Bug, 1);
CHECK_EFFECTIVENESS(Normal, Ghost, 0);
CHECK_EFFECTIVENESS(Normal, Steel, 0.5)
CHECK_EFFECTIVENESS(Normal, Fire, 1);
CHECK_EFFECTIVENESS(Normal, Water, 1);
CHECK_EFFECTIVENESS(Normal, Grass, 1);
CHECK_EFFECTIVENESS(Normal, Electric, 1);
CHECK_EFFECTIVENESS(Normal, Psychic, 1);
CHECK_EFFECTIVENESS(Normal, Ice, 1);
CHECK_EFFECTIVENESS(Normal, Dragon, 1);
CHECK_EFFECTIVENESS(Normal, Dark, 1);
CHECK_EFFECTIVENESS(Normal, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Fighting Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Fighting, Normal, 2);
CHECK_EFFECTIVENESS(Fighting, Fighting, 1);
CHECK_EFFECTIVENESS(Fighting, Flying, 0.5);
CHECK_EFFECTIVENESS(Fighting, Poison, 0.5);
CHECK_EFFECTIVENESS(Fighting, Ground, 1);
CHECK_EFFECTIVENESS(Fighting, Rock, 2);
CHECK_EFFECTIVENESS(Fighting, Bug, 0.5);
CHECK_EFFECTIVENESS(Fighting, Ghost, 0);
CHECK_EFFECTIVENESS(Fighting, Steel, 2);
CHECK_EFFECTIVENESS(Fighting, Fire, 1);
CHECK_EFFECTIVENESS(Fighting, Water, 1);
CHECK_EFFECTIVENESS(Fighting, Grass, 1);
CHECK_EFFECTIVENESS(Fighting, Electric, 1);
CHECK_EFFECTIVENESS(Fighting, Psychic, 0.5);
CHECK_EFFECTIVENESS(Fighting, Ice, 2);
CHECK_EFFECTIVENESS(Fighting, Dragon, 1);
CHECK_EFFECTIVENESS(Fighting, Dark, 2);
CHECK_EFFECTIVENESS(Fighting, Fairy, 0.5);
}
TEST_CASE("Type Effectiveness - Flying Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Flying, Normal, 1);
CHECK_EFFECTIVENESS(Flying, Fighting, 2);
CHECK_EFFECTIVENESS(Flying, Flying, 1);
CHECK_EFFECTIVENESS(Flying, Poison, 1);
CHECK_EFFECTIVENESS(Flying, Ground, 1);
CHECK_EFFECTIVENESS(Flying, Rock, 0.5);
CHECK_EFFECTIVENESS(Flying, Bug, 2);
CHECK_EFFECTIVENESS(Flying, Ghost, 1);
CHECK_EFFECTIVENESS(Flying, Steel, 0.5);
CHECK_EFFECTIVENESS(Flying, Fire, 1);
CHECK_EFFECTIVENESS(Flying, Water, 1);
CHECK_EFFECTIVENESS(Flying, Grass, 2);
CHECK_EFFECTIVENESS(Flying, Electric, 0.5);
CHECK_EFFECTIVENESS(Flying, Psychic, 1);
CHECK_EFFECTIVENESS(Flying, Ice, 1);
CHECK_EFFECTIVENESS(Flying, Dragon, 1);
CHECK_EFFECTIVENESS(Flying, Dark, 1);
CHECK_EFFECTIVENESS(Flying, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Poison Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Poison, Normal, 1);
CHECK_EFFECTIVENESS(Poison, Fighting, 1);
CHECK_EFFECTIVENESS(Poison, Flying, 1);
CHECK_EFFECTIVENESS(Poison, Poison, 0.5);
CHECK_EFFECTIVENESS(Poison, Ground, 0.5);
CHECK_EFFECTIVENESS(Poison, Rock, 0.5);
CHECK_EFFECTIVENESS(Poison, Bug, 1);
CHECK_EFFECTIVENESS(Poison, Ghost, 0.5);
CHECK_EFFECTIVENESS(Poison, Steel, 0);
CHECK_EFFECTIVENESS(Poison, Fire, 1);
CHECK_EFFECTIVENESS(Poison, Water, 1);
CHECK_EFFECTIVENESS(Poison, Grass, 2);
CHECK_EFFECTIVENESS(Poison, Electric, 1);
CHECK_EFFECTIVENESS(Poison, Psychic, 1);
CHECK_EFFECTIVENESS(Poison, Ice, 1);
CHECK_EFFECTIVENESS(Poison, Dragon, 1);
CHECK_EFFECTIVENESS(Poison, Dark, 1);
CHECK_EFFECTIVENESS(Poison, Fairy, 2);
}
TEST_CASE("Type Effectiveness - Ground Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Ground, Normal, 1);
CHECK_EFFECTIVENESS(Ground, Fighting, 1);
CHECK_EFFECTIVENESS(Ground, Flying, 0);
CHECK_EFFECTIVENESS(Ground, Poison, 2);
CHECK_EFFECTIVENESS(Ground, Ground, 1);
CHECK_EFFECTIVENESS(Ground, Rock, 2);
CHECK_EFFECTIVENESS(Ground, Bug, 0.5);
CHECK_EFFECTIVENESS(Ground, Ghost, 1);
CHECK_EFFECTIVENESS(Ground, Steel, 2);
CHECK_EFFECTIVENESS(Ground, Fire, 2);
CHECK_EFFECTIVENESS(Ground, Water, 1);
CHECK_EFFECTIVENESS(Ground, Grass, 0.5);
CHECK_EFFECTIVENESS(Ground, Electric, 2);
CHECK_EFFECTIVENESS(Ground, Psychic, 1);
CHECK_EFFECTIVENESS(Ground, Ice, 1);
CHECK_EFFECTIVENESS(Ground, Dragon, 1);
CHECK_EFFECTIVENESS(Ground, Dark, 1);
CHECK_EFFECTIVENESS(Ground, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Rock Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Rock, Normal, 1);
CHECK_EFFECTIVENESS(Rock, Fighting, 0.5);
CHECK_EFFECTIVENESS(Rock, Flying, 2);
CHECK_EFFECTIVENESS(Rock, Poison, 1);
CHECK_EFFECTIVENESS(Rock, Ground, 0.5);
CHECK_EFFECTIVENESS(Rock, Rock, 1);
CHECK_EFFECTIVENESS(Rock, Bug, 2);
CHECK_EFFECTIVENESS(Rock, Ghost, 1);
CHECK_EFFECTIVENESS(Rock, Steel, 0.5);
CHECK_EFFECTIVENESS(Rock, Fire, 2);
CHECK_EFFECTIVENESS(Rock, Water, 1);
CHECK_EFFECTIVENESS(Rock, Grass, 1);
CHECK_EFFECTIVENESS(Rock, Electric, 1);
CHECK_EFFECTIVENESS(Rock, Psychic, 1);
CHECK_EFFECTIVENESS(Rock, Ice, 2);
CHECK_EFFECTIVENESS(Rock, Dragon, 1);
CHECK_EFFECTIVENESS(Rock, Dark, 1);
CHECK_EFFECTIVENESS(Rock, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Bug Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Bug, Normal, 1);
CHECK_EFFECTIVENESS(Bug, Fighting, 0.5);
CHECK_EFFECTIVENESS(Bug, Flying, 0.5);
CHECK_EFFECTIVENESS(Bug, Poison, 0.5);
CHECK_EFFECTIVENESS(Bug, Ground, 1);
CHECK_EFFECTIVENESS(Bug, Rock, 1);
CHECK_EFFECTIVENESS(Bug, Bug, 1);
CHECK_EFFECTIVENESS(Bug, Ghost, 0.5);
CHECK_EFFECTIVENESS(Bug, Steel, 0.5);
CHECK_EFFECTIVENESS(Bug, Fire, 0.5);
CHECK_EFFECTIVENESS(Bug, Water, 1);
CHECK_EFFECTIVENESS(Bug, Grass, 2);
CHECK_EFFECTIVENESS(Bug, Electric, 1);
CHECK_EFFECTIVENESS(Bug, Psychic, 2);
CHECK_EFFECTIVENESS(Bug, Ice, 1);
CHECK_EFFECTIVENESS(Bug, Dragon, 1);
CHECK_EFFECTIVENESS(Bug, Dark, 2);
CHECK_EFFECTIVENESS(Bug, Fairy, 0.5);
}
TEST_CASE("Type Effectiveness - Ghost Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Ghost, Normal, 0);
CHECK_EFFECTIVENESS(Ghost, Fighting, 1);
CHECK_EFFECTIVENESS(Ghost, Flying, 1);
CHECK_EFFECTIVENESS(Ghost, Poison, 1);
CHECK_EFFECTIVENESS(Ghost, Ground, 1);
CHECK_EFFECTIVENESS(Ghost, Rock, 1);
CHECK_EFFECTIVENESS(Ghost, Bug, 1);
CHECK_EFFECTIVENESS(Ghost, Ghost, 2);
CHECK_EFFECTIVENESS(Ghost, Steel, 1);
CHECK_EFFECTIVENESS(Ghost, Fire, 1);
CHECK_EFFECTIVENESS(Ghost, Water, 1);
CHECK_EFFECTIVENESS(Ghost, Grass, 1);
CHECK_EFFECTIVENESS(Ghost, Electric, 1);
CHECK_EFFECTIVENESS(Ghost, Psychic, 2);
CHECK_EFFECTIVENESS(Ghost, Ice, 1);
CHECK_EFFECTIVENESS(Ghost, Dragon, 1);
CHECK_EFFECTIVENESS(Ghost, Dark, 0.5);
CHECK_EFFECTIVENESS(Ghost, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Steel Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Steel, Normal, 1);
CHECK_EFFECTIVENESS(Steel, Fighting, 1);
CHECK_EFFECTIVENESS(Steel, Flying, 1);
CHECK_EFFECTIVENESS(Steel, Poison, 1);
CHECK_EFFECTIVENESS(Steel, Ground, 1);
CHECK_EFFECTIVENESS(Steel, Rock, 2);
CHECK_EFFECTIVENESS(Steel, Bug, 1);
CHECK_EFFECTIVENESS(Steel, Ghost, 1);
CHECK_EFFECTIVENESS(Steel, Steel, 0.5);
CHECK_EFFECTIVENESS(Steel, Fire, 0.5);
CHECK_EFFECTIVENESS(Steel, Water, 0.5);
CHECK_EFFECTIVENESS(Steel, Grass, 1);
CHECK_EFFECTIVENESS(Steel, Electric, 0.5);
CHECK_EFFECTIVENESS(Steel, Psychic, 1);
CHECK_EFFECTIVENESS(Steel, Ice, 2);
CHECK_EFFECTIVENESS(Steel, Dragon, 1);
CHECK_EFFECTIVENESS(Steel, Dark, 1);
CHECK_EFFECTIVENESS(Steel, Fairy, 2);
}
TEST_CASE("Type Effectiveness - Fire Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Fire, Normal, 1);
CHECK_EFFECTIVENESS(Fire, Fighting, 1);
CHECK_EFFECTIVENESS(Fire, Flying, 1);
CHECK_EFFECTIVENESS(Fire, Poison, 1);
CHECK_EFFECTIVENESS(Fire, Ground, 1);
CHECK_EFFECTIVENESS(Fire, Rock, 0.5);
CHECK_EFFECTIVENESS(Fire, Bug, 2);
CHECK_EFFECTIVENESS(Fire, Ghost, 1);
CHECK_EFFECTIVENESS(Fire, Steel, 2);
CHECK_EFFECTIVENESS(Fire, Fire, 0.5);
CHECK_EFFECTIVENESS(Fire, Water, 0.5);
CHECK_EFFECTIVENESS(Fire, Grass, 2);
CHECK_EFFECTIVENESS(Fire, Electric, 1);
CHECK_EFFECTIVENESS(Fire, Psychic, 1);
CHECK_EFFECTIVENESS(Fire, Ice, 2);
CHECK_EFFECTIVENESS(Fire, Dragon, 0.5);
CHECK_EFFECTIVENESS(Fire, Dark, 1);
CHECK_EFFECTIVENESS(Fire, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Water Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Water, Normal, 1);
CHECK_EFFECTIVENESS(Water, Fighting, 1);
CHECK_EFFECTIVENESS(Water, Flying, 1);
CHECK_EFFECTIVENESS(Water, Poison, 1);
CHECK_EFFECTIVENESS(Water, Ground, 2);
CHECK_EFFECTIVENESS(Water, Rock, 2);
CHECK_EFFECTIVENESS(Water, Bug, 1);
CHECK_EFFECTIVENESS(Water, Ghost, 1);
CHECK_EFFECTIVENESS(Water, Steel, 1);
CHECK_EFFECTIVENESS(Water, Fire, 2);
CHECK_EFFECTIVENESS(Water, Water, 0.5);
CHECK_EFFECTIVENESS(Water, Grass, 0.5);
CHECK_EFFECTIVENESS(Water, Electric, 1);
CHECK_EFFECTIVENESS(Water, Psychic, 1);
CHECK_EFFECTIVENESS(Water, Ice, 1);
CHECK_EFFECTIVENESS(Water, Dragon, 0.5);
CHECK_EFFECTIVENESS(Water, Dark, 1);
CHECK_EFFECTIVENESS(Water, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Grass Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Grass, Normal, 1);
CHECK_EFFECTIVENESS(Grass, Fighting, 1);
CHECK_EFFECTIVENESS(Grass, Flying, 0.5);
CHECK_EFFECTIVENESS(Grass, Poison, 0.5);
CHECK_EFFECTIVENESS(Grass, Ground, 2);
CHECK_EFFECTIVENESS(Grass, Rock, 2);
CHECK_EFFECTIVENESS(Grass, Bug, 0.5);
CHECK_EFFECTIVENESS(Grass, Ghost, 1);
CHECK_EFFECTIVENESS(Grass, Steel, 0.5);
CHECK_EFFECTIVENESS(Grass, Fire, 0.5);
CHECK_EFFECTIVENESS(Grass, Water, 2);
CHECK_EFFECTIVENESS(Grass, Grass, 0.5);
CHECK_EFFECTIVENESS(Grass, Electric, 1);
CHECK_EFFECTIVENESS(Grass, Psychic, 1);
CHECK_EFFECTIVENESS(Grass, Ice, 1);
CHECK_EFFECTIVENESS(Grass, Dragon, 0.5);
CHECK_EFFECTIVENESS(Grass, Dark, 1);
CHECK_EFFECTIVENESS(Grass, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Electric Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Electric, Normal, 1);
CHECK_EFFECTIVENESS(Electric, Fighting, 1);
CHECK_EFFECTIVENESS(Electric, Flying, 2);
CHECK_EFFECTIVENESS(Electric, Poison, 1);
CHECK_EFFECTIVENESS(Electric, Ground, 0);
CHECK_EFFECTIVENESS(Electric, Rock, 1);
CHECK_EFFECTIVENESS(Electric, Bug, 1);
CHECK_EFFECTIVENESS(Electric, Ghost, 1);
CHECK_EFFECTIVENESS(Electric, Steel, 1);
CHECK_EFFECTIVENESS(Electric, Fire, 1);
CHECK_EFFECTIVENESS(Electric, Water, 2);
CHECK_EFFECTIVENESS(Electric, Grass, 0.5);
CHECK_EFFECTIVENESS(Electric, Electric, 0.5);
CHECK_EFFECTIVENESS(Electric, Psychic, 1);
CHECK_EFFECTIVENESS(Electric, Ice, 1);
CHECK_EFFECTIVENESS(Electric, Dragon, 0.5);
CHECK_EFFECTIVENESS(Electric, Dark, 1);
CHECK_EFFECTIVENESS(Electric, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Psychic Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Psychic, Normal, 1);
CHECK_EFFECTIVENESS(Psychic, Fighting, 2);
CHECK_EFFECTIVENESS(Psychic, Flying, 1);
CHECK_EFFECTIVENESS(Psychic, Poison, 2);
CHECK_EFFECTIVENESS(Psychic, Ground, 1);
CHECK_EFFECTIVENESS(Psychic, Rock, 1);
CHECK_EFFECTIVENESS(Psychic, Bug, 1);
CHECK_EFFECTIVENESS(Psychic, Ghost, 1);
CHECK_EFFECTIVENESS(Psychic, Steel, 0.5);
CHECK_EFFECTIVENESS(Psychic, Fire, 1);
CHECK_EFFECTIVENESS(Psychic, Water, 1);
CHECK_EFFECTIVENESS(Psychic, Grass, 1);
CHECK_EFFECTIVENESS(Psychic, Electric, 1);
CHECK_EFFECTIVENESS(Psychic, Psychic, 0.5);
CHECK_EFFECTIVENESS(Psychic, Ice, 1);
CHECK_EFFECTIVENESS(Psychic, Dragon, 1);
CHECK_EFFECTIVENESS(Psychic, Dark, 0);
CHECK_EFFECTIVENESS(Psychic, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Ice Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Ice, Normal, 1);
CHECK_EFFECTIVENESS(Ice, Fighting, 1);
CHECK_EFFECTIVENESS(Ice, Flying, 2);
CHECK_EFFECTIVENESS(Ice, Poison, 1);
CHECK_EFFECTIVENESS(Ice, Ground, 2);
CHECK_EFFECTIVENESS(Ice, Rock, 1);
CHECK_EFFECTIVENESS(Ice, Bug, 1);
CHECK_EFFECTIVENESS(Ice, Ghost, 1);
CHECK_EFFECTIVENESS(Ice, Steel, 0.5);
CHECK_EFFECTIVENESS(Ice, Fire, 0.5);
CHECK_EFFECTIVENESS(Ice, Water, 0.5);
CHECK_EFFECTIVENESS(Ice, Grass, 2);
CHECK_EFFECTIVENESS(Ice, Electric, 1);
CHECK_EFFECTIVENESS(Ice, Psychic, 1);
CHECK_EFFECTIVENESS(Ice, Ice, 0.5);
CHECK_EFFECTIVENESS(Ice, Dragon, 2);
CHECK_EFFECTIVENESS(Ice, Dark, 1);
CHECK_EFFECTIVENESS(Ice, Fairy, 1);
}
TEST_CASE("Type Effectiveness - Dragon Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Dragon, Normal, 1);
CHECK_EFFECTIVENESS(Dragon, Fighting, 1);
CHECK_EFFECTIVENESS(Dragon, Flying, 1);
CHECK_EFFECTIVENESS(Dragon, Poison, 1);
CHECK_EFFECTIVENESS(Dragon, Ground, 1);
CHECK_EFFECTIVENESS(Dragon, Rock, 1);
CHECK_EFFECTIVENESS(Dragon, Bug, 1);
CHECK_EFFECTIVENESS(Dragon, Ghost, 1);
CHECK_EFFECTIVENESS(Dragon, Steel, 0.5);
CHECK_EFFECTIVENESS(Dragon, Fire, 1);
CHECK_EFFECTIVENESS(Dragon, Water, 1);
CHECK_EFFECTIVENESS(Dragon, Grass, 1);
CHECK_EFFECTIVENESS(Dragon, Electric, 1);
CHECK_EFFECTIVENESS(Dragon, Psychic, 1);
CHECK_EFFECTIVENESS(Dragon, Ice, 1);
CHECK_EFFECTIVENESS(Dragon, Dragon, 2);
CHECK_EFFECTIVENESS(Dragon, Dark, 1);
CHECK_EFFECTIVENESS(Dragon, Fairy, 0);
}
TEST_CASE("Type Effectiveness - Dark Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Dark, Normal, 1);
CHECK_EFFECTIVENESS(Dark, Fighting, 0.5);
CHECK_EFFECTIVENESS(Dark, Flying, 1);
CHECK_EFFECTIVENESS(Dark, Poison, 1);
CHECK_EFFECTIVENESS(Dark, Ground, 1);
CHECK_EFFECTIVENESS(Dark, Rock, 1);
CHECK_EFFECTIVENESS(Dark, Bug, 1);
CHECK_EFFECTIVENESS(Dark, Ghost, 2);
CHECK_EFFECTIVENESS(Dark, Steel, 1);
CHECK_EFFECTIVENESS(Dark, Fire, 1);
CHECK_EFFECTIVENESS(Dark, Water, 1);
CHECK_EFFECTIVENESS(Dark, Grass, 1);
CHECK_EFFECTIVENESS(Dark, Electric, 1);
CHECK_EFFECTIVENESS(Dark, Psychic, 2);
CHECK_EFFECTIVENESS(Dark, Ice, 1);
CHECK_EFFECTIVENESS(Dark, Dragon, 1);
CHECK_EFFECTIVENESS(Dark, Dark, 0.5);
CHECK_EFFECTIVENESS(Dark, Fairy, 0.5);
}
TEST_CASE("Type Effectiveness - Fairy Attacking", "[type]") {
auto& typeLib = Library::GetStaticLib()->GetTypeLibrary();
CHECK_EFFECTIVENESS(Fairy, Normal, 1);
CHECK_EFFECTIVENESS(Fairy, Fighting, 2);
CHECK_EFFECTIVENESS(Fairy, Flying, 1);
CHECK_EFFECTIVENESS(Fairy, Poison, 0.5);
CHECK_EFFECTIVENESS(Fairy, Ground, 1);
CHECK_EFFECTIVENESS(Fairy, Rock, 1);
CHECK_EFFECTIVENESS(Fairy, Bug, 1);
CHECK_EFFECTIVENESS(Fairy, Ghost, 1);
CHECK_EFFECTIVENESS(Fairy, Steel, 0.5);
CHECK_EFFECTIVENESS(Fairy, Fire, 0.5);
CHECK_EFFECTIVENESS(Fairy, Water, 1);
CHECK_EFFECTIVENESS(Fairy, Grass, 1);
CHECK_EFFECTIVENESS(Fairy, Electric, 1);
CHECK_EFFECTIVENESS(Fairy, Psychic, 1);
CHECK_EFFECTIVENESS(Fairy, Ice, 1);
CHECK_EFFECTIVENESS(Fairy, Dragon, 2);
CHECK_EFFECTIVENESS(Fairy, Dark, 2);
CHECK_EFFECTIVENESS(Fairy, Fairy, 1);
}
#undef CHECK_EFFECTIVENESS