// #include // #include // #include // namespace tp = sp::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, ...) sp_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}, sp::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}, sp::FpFloat{-69}}, // }})); // DeclareAllCommand() // return SP_TEST_SUCCESSFUL; // } // int main() { // return TestAllCommands(); // } int main() { return 0; }