test/unittest.hpp in rice-4.0.4 vs test/unittest.hpp in rice-4.1.0
- old
+ new
@@ -212,10 +212,16 @@
return !is_equal(t, u);
}
extern size_t assertions;
+template<typename S, typename T, typename = void>
+struct is_streamable: std::false_type {};
+
+template<typename S, typename T>
+struct is_streamable<S, T, std::void_t<decltype(std::declval<S&>()<<std::declval<T>())>>: std::true_type {};
+
template<typename T, typename U>
void assert_equal(
T const & t,
U const & u,
std::string const & s_t,
@@ -224,13 +230,16 @@
size_t line)
{
if(!is_equal(t, u))
{
std::stringstream strm;
- strm << "Assertion failed: "
- << s_t << " != " << s_u
- << " (" << t << " != " << u << ")"
- << " at " << file << ":" << line;
+ strm << "Assertion failed: ";
+
+ if constexpr (is_streamable<std::stringstream, T>::value && is_streamable<std::stringstream, U>::value)
+ {
+ strm << s_t << " != " << s_u;
+ }
+ strm << " at " << file << ":" << line;
throw Assertion_Failed(strm.str());
}
}
template<typename T, typename U>