diff --git a/test/test.hpp b/test/test.hpp index 5009499d..f1356645 100644 --- a/test/test.hpp +++ b/test/test.hpp @@ -114,6 +114,39 @@ void check_eq(std::string msg, T actual, U expected) } } +template +bool tuple_to_ostream_impl(OS && ostream, T && value) +{ + ostream << value << " "; + return true; +} + +template +void tuple_to_ostream(OS && ostream, const std::tuple &tuple, std::index_sequence &&) +{ + (void) std::initializer_list{tuple_to_ostream_impl(ostream, std::get(tuple))...}; +} + +template +void check_eq(std::string msg, const std::tuple& actual, const std::tuple& expected) +{ + if (actual != expected) + { + std::stringstream ss; + ss << msg << " "; + auto print = [&ss](const char * name, const std::tuple& tuple){ + constexpr size_t N = sizeof ... (Ts); + ss << name << ": {"; + tuple_to_ostream(ss, tuple, std::make_integer_sequence{}); + ss << "} "; + }; + print("actual", actual); + print("expected", expected); + check(ss.str(), false); + } +} + + template void check_ex(std::string msg, F&& f) {