// Copyright 2018-2024 Emil Dotchevski and Reverge Studios, Inc. // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include #if !BOOST_LEAF_CFG_DIAGNOSTICS || !BOOST_LEAF_CFG_STD_STRING #include int main() { std::cout << "Unit test not applicable." << std::endl; return 0; } #else #ifdef BOOST_LEAF_TEST_SINGLE_HEADER # include "leaf.hpp" #else # include #endif #include #include #include "lightweight_test.hpp" namespace leaf = boost::leaf; struct c0 { friend std::ostream & operator<<( std::ostream & os, c0 const & ) { return os << "info"; } }; struct c1 { int value; friend std::ostream & operator<<( std::ostream & os, c1 const & x ) { return os << "value " << x.value; } }; struct c2 { int value; }; std::ostream & operator<<( std::ostream & os, c2 const & x ) { return os << "value " << x.value; } struct c3 { int value; }; struct c4 { struct unprintable { }; unprintable value;; }; template std::string print(T const & x, char const * prefix, char const * delimiter) { std::ostringstream s; leaf::detail::diagnostics_writer w(s); w.set_prefix(prefix); w.set_delimiter(delimiter); w.write(x); w.write(x); std::string q = s.str(); std::cout << "[LINE " << Line << "] " << q << '\n'; return q; } struct my_exception: std::exception { char const * what() const noexcept override { return "my_exception what"; } }; int main() { { std::string out = print<__LINE__>(c0{}, "Title " , ", "); BOOST_TEST_EQ(out, "Title c0: info, c0: info"); } { std::string out = print<__LINE__>(c1{42}, "Title ", ", "); BOOST_TEST_EQ(out, "Title c1: value 42, c1: value 42"); } { std::string out = print<__LINE__>(c2{42}, "Title ", ", "); BOOST_TEST_EQ(out, "Title c2: value 42, c2: value 42"); } { std::string out = print<__LINE__>(c3{42}, "Title ", ", "); BOOST_TEST_EQ(out, "Title c3: 42, c3: 42"); } { std::string out = print<__LINE__>(c4{}, "Title ", ", "); BOOST_TEST_EQ(out, "Title c4, c4"); } { std::string out = print<__LINE__>(my_exception{}, "Title ", ", "); BOOST_TEST_EQ(out, "Title my_exception: \"my_exception what\", my_exception: \"my_exception what\""); } return boost::report_errors(); } #endif