diff --git a/src/karts/combined_characteristic.cpp b/src/karts/combined_characteristic.cpp index ea6ff77a8..d9ee89de5 100644 --- a/src/karts/combined_characteristic.cpp +++ b/src/karts/combined_characteristic.cpp @@ -18,10 +18,13 @@ #include "karts/combined_characteristic.hpp" +#include "io/file_manager.hpp" +#include "karts/xml_characteristic.hpp" + void CombinedCharacteristic::addCharacteristic( const AbstractCharacteristic *characteristic) { - m_childs.push_back(characteristic); + m_children.push_back(characteristic); } // addCharacteristic // ---------------------------------------------------------------------------- @@ -29,7 +32,59 @@ void CombinedCharacteristic::addCharacteristic( void CombinedCharacteristic::process(CharacteristicType type, Value value, bool *is_set) const { - for (const AbstractCharacteristic *characteristic : m_childs) + for (const AbstractCharacteristic *characteristic : m_children) characteristic->process(type, value, is_set); } // process +// ============================================================================ + +void CombinedCharacteristic::unitTesting() +{ + // We need to use really existing xml attributes, all characteristics + // were designed to work with those names. + std::string s1= + "" + " " + " " + " " + " " + ""; + + XMLNode *xml1= file_manager->createXMLTreeFromString(s1); + XmlCharacteristic *c1 = new XmlCharacteristic(xml1); + delete xml1; + + CombinedCharacteristic *cc = new CombinedCharacteristic(); + cc->addCharacteristic(c1); + + assert( cc->getSuspensionStiffness() == 4.5f ); + assert( cc->getSuspensionRest() == -0.3f ); + assert( cc->getSuspensionTravel() == 3.0f ); + // Note: no operator precedence supported, so 1+2*3 = 9 + assert( cc->getStabilityRollInfluence() == 9.0f ); + assert( cc->getStabilityChassisLinearDamping() == 7.0f ); + + std::string s2= + "" + " " + " " + " " + " " + ""; + + XMLNode *xml2= file_manager->createXMLTreeFromString(s2); + XmlCharacteristic *c2 = new XmlCharacteristic(xml2); + delete xml2; + + cc->addCharacteristic(c2); + + assert( cc->getSuspensionStiffness() == 5.5f ); + assert( cc->getSuspensionRest() == -1.3f ); + assert( cc->getSuspensionTravel() == 6.0f ); + // Note: no operator precedence supported, so (1+2*3) / 3 = 3 + assert( cc->getStabilityRollInfluence() == 3.0f ); + assert( cc->getStabilityChassisLinearDamping() == 7.0f ); + +} // unitTesting \ No newline at end of file diff --git a/src/karts/combined_characteristic.hpp b/src/karts/combined_characteristic.hpp index 72f89c33b..4d8a77d5b 100644 --- a/src/karts/combined_characteristic.hpp +++ b/src/karts/combined_characteristic.hpp @@ -24,9 +24,11 @@ class CombinedCharacteristic : public AbstractCharacteristic { private: - std::vector m_childs; + std::vector m_children; public: + static void unitTesting(); + void addCharacteristic(const AbstractCharacteristic *characteristic); virtual void process(CharacteristicType type, Value value, bool *is_set) const; diff --git a/src/main.cpp b/src/main.cpp index 03b10a884..4e81ea629 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -168,6 +168,7 @@ #include "items/attachment_manager.hpp" #include "items/item_manager.hpp" #include "items/projectile_manager.hpp" +#include "karts/combined_characteristic.hpp" #include "karts/controller/ai_base_lap_controller.hpp" #include "karts/kart_properties.hpp" #include "karts/kart_properties_manager.hpp" @@ -1857,6 +1858,11 @@ void runUnitTests() assert( isEasterMode(22, 3, 2016, 5)); assert(!isEasterMode(21, 3, 2016, 5)); UserConfigParams::m_easter_ear_mode = saved_easter_mode; + + + Log::info("UnitTest", " - Kart characteristics"); + CombinedCharacteristic::unitTesting(); + Log::info("UnitTest", "====================="); Log::info("UnitTest", "Testing successful "); Log::info("UnitTest", "=====================");