// Header for SFML unit tests. // // For a new system module test case, include this header. // This ensures that string conversions are visible and can be used by doctest for debug output. #ifndef SFML_TESTUTILITIES_SYSTEM_HPP #define SFML_TESTUTILITIES_SYSTEM_HPP #include #include #include #include #include // String conversions for doctest framework namespace sf { class Angle; class String; class Time; std::ostream& operator <<(std::ostream& os, const sf::Angle& angle); std::ostream& operator <<(std::ostream& os, const sf::String& string); std::ostream& operator <<(std::ostream& os, sf::Time time); template std::ostream& operator <<(std::ostream& os, const sf::Vector2& vector) { os << std::fixed << std::setprecision(std::numeric_limits::max_digits10); os << "(" << vector.x << ", " << vector.y << ")"; return os; } template std::ostream& operator <<(std::ostream& os, const sf::Vector3& vector) { os << "(" << vector.x << ", " << vector.y << ", " << vector.z << ")"; return os; } } //////////////////////////////////////////////////////////// /// Class template for creating custom approximate comparisons. /// To register a new type, simply implement a custom operator== /// overload for that type. //////////////////////////////////////////////////////////// template struct Approx { explicit Approx(const T& t) : value(t) {} const T& value; }; bool operator==(const float& lhs, const Approx& rhs); bool operator==(const sf::Vector2f& lhs, const Approx& rhs); bool operator==(const sf::Vector3f& lhs, const Approx& rhs); bool operator==(const sf::Angle& lhs, const Approx& rhs); template std::ostream& operator <<(std::ostream& os, const Approx& approx) { return os << approx.value; } #endif // SFML_TESTUTILITIES_SYSTEM_HPP