#include
#include |
#include |
namespace tp = td::protocol;
class Comparator {
public:
bool operator()(const tp::cdata::End& left, const tp::cdata::End& right) {
return true;
}
bool operator()(const tp::cdata::PlaceTower& left, const tp::cdata::PlaceTower& right) {
return left.m_Placer == right.m_Placer && left.m_Position.x == right.m_Position.x && left.m_Position.y == right.m_Position.y &&
left.m_Type == right.m_Type;
}
bool operator()(const tp::cdata::PlayerJoin& left, const tp::cdata::PlayerJoin& right) {
return left.m_ID == right.m_ID && left.m_Name == right.m_Name;
}
bool operator()(const tp::cdata::SpawnTroop& left, const tp::cdata::SpawnTroop& right) {
return left.m_Level == right.m_Level && left.m_Position.x == right.m_Position.x && left.m_Position.y == right.m_Position.y &&
left.m_Sender == right.m_Sender && left.m_Type == right.m_Type;
}
bool operator()(const tp::cdata::TeamChange& left, const tp::cdata::TeamChange& right) {
return left.m_NewTeam == right.m_NewTeam && left.m_Player == right.m_Player;
}
bool operator()(const tp::cdata::UpgradeTower& left, const tp::cdata::UpgradeTower& right) {
return left.m_Tower == right.m_Tower && left.m_Upgrade == right.m_Upgrade;
}
bool operator()(const tp::cdata::UseItem& left, const tp::cdata::UseItem& right) {
return left.m_Item == right.m_Item && left.m_Position.x == right.m_Position.x && left.m_Position.y == right.m_Position.y &&
left.m_User == right.m_User;
}
};
template
static int TestCommand(const Command_T& command) {
td::DataBuffer buffer = tp::CommandSerializer::Serialize(command);
auto abstractCommand = tp::CommandSerializer::Deserialize(buffer);
td_test_assert(abstractCommand);
Command_T* command2 = dynamic_cast(abstractCommand.get());
td_test_assert(command2);
td_test_assert(command.GetType() == command2->GetType());
return Comparator{}(command.m_Data, command2->m_Data);
}
#define DeclareCommand(Command, ...) td_test_assert(TestCommand({}));
static int TestAllCommands() {
td_test_assert(TestCommand({}));
td_test_assert(TestCommand({tp::cdata::PlaceTower{
td::TowerType::Necromancer,
8,
td::TowerCoords{-50, 69},
}}));
td_test_assert(TestCommand({tp::cdata::PlayerJoin{
4,
"Persson",
}}));
td_test_assert(TestCommand({tp::cdata::SpawnTroop{
td::EntityType::Blaze,
4,
td::EntityCoords{td::FpFloat{54}, td::FpFloat{58}},
2,
}}));
td_test_assert(TestCommand({tp::cdata::TeamChange{
7,
td::Team::Red,
}}));
td_test_assert(TestCommand({tp::cdata::UpgradeTower{
69,
3,
}}));
td_test_assert(TestCommand({tp::cdata::UseItem{
td::ShopItem::Freeze,
5,
td::EntityCoords{td::FpFloat{24}, td::FpFloat{-69}},
}}));
DeclareAllCommand()
return TD_TEST_SUCCESSFUL;
}
int main() {
return TestAllCommands();
} |