1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-19 23:23:52 +00:00

Print not matched values with full precision

This commit is contained in:
elsid 2018-11-25 14:03:28 +03:00
parent 14d0ca4cd3
commit ef5a5ef43f
No known key found for this signature in database
GPG key ID: B845CB9FEE18AB40

View file

@ -20,22 +20,62 @@ namespace DetourNavigator
} }
} }
namespace
{
template <class T>
struct Wrapper {
const T& mValue;
};
template <class Range>
inline testing::Message& writeRange(testing::Message& message, const Range& range)
{
message << "{\n";
for (const auto& v : range)
message << Wrapper<typename std::decay<decltype(v)>::type> {v} << ",\n";
return message << "}";
}
}
namespace testing namespace testing
{ {
template <>
inline testing::Message& Message::operator <<(const osg::Vec3f& value)
{
return (*this) << "osg::Vec3f(" << std::setprecision(std::numeric_limits<float>::max_exponent10) << value.x()
<< ", " << std::setprecision(std::numeric_limits<float>::max_exponent10) << value.y()
<< ", " << std::setprecision(std::numeric_limits<float>::max_exponent10) << value.z()
<< ')';
}
template <>
inline testing::Message& Message::operator <<(const Wrapper<osg::Vec3f>& value)
{
return (*this) << value.mValue;
}
template <>
inline testing::Message& Message::operator <<(const Wrapper<float>& value)
{
return (*this) << std::setprecision(std::numeric_limits<float>::max_exponent10) << value.mValue;
}
template <> template <>
inline testing::Message& Message::operator <<(const std::deque<osg::Vec3f>& value) inline testing::Message& Message::operator <<(const std::deque<osg::Vec3f>& value)
{ {
(*this) << "{\n"; return writeRange(*this, value);
for (const auto& v : value)
{
std::ostringstream stream;
stream << "osg::Vec3f("
<< std::setprecision(std::numeric_limits<float>::max_exponent10) << v.x() << ", "
<< std::setprecision(std::numeric_limits<float>::max_exponent10) << v.y() << ", "
<< std::setprecision(std::numeric_limits<float>::max_exponent10) << v.z() << ")";
(*this) << stream.str() << ",\n";
} }
return (*this) << "}";
template <>
inline testing::Message& Message::operator <<(const std::vector<osg::Vec3f>& value)
{
return writeRange(*this, value);
}
template <>
inline testing::Message& Message::operator <<(const std::vector<float>& value)
{
return writeRange(*this, value);
} }
} }