1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
// Copyright 2018-2022 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 <boost/leaf/config.hpp>
#if !BOOST_LEAF_CFG_DIAGNOSTICS
#include <iostream>
int main()
{
std::cout << "Unit test not applicable." << std::endl;
return 0;
}
#else
#ifdef BOOST_LEAF_TEST_SINGLE_HEADER
# include "leaf.hpp"
#else
# include <boost/leaf/detail/print.hpp>
#endif
#include "lightweight_test.hpp"
#include <sstream>
namespace leaf = boost::leaf;
struct c0
{
friend std::ostream & operator<<( std::ostream & os, c0 const & )
{
return os << "c0";
}
};
struct c1
{
int value;
friend std::ostream & operator<<( std::ostream & os, c1 const & )
{
return os << "c1";
}
};
struct c2
{
int value;
};
std::ostream & operator<<( std::ostream & os, c2 const & )
{
return os << "c2";
}
struct c3
{
int value;
};
struct c4
{
struct unprintable { };
unprintable value;;
};
template <class T>
bool check( T const & x, char const * sub )
{
using namespace leaf::leaf_detail;
std::ostringstream s;
diagnostic<T>::print(s,x);
std::string q = s.str();
return q.find(sub)!=q.npos;
}
struct my_exception: std::exception
{
char const * what() const noexcept override { return "my_exception_what"; }
};
int main()
{
BOOST_TEST(check(c0{ },"c0"));
BOOST_TEST(check(c1{42},"c1"));
{
c1 x;
c1 & y = x;
BOOST_TEST(check(x,"c1"));
BOOST_TEST(check(y,"c1"));
}
BOOST_TEST(check(c2{42},"c2"));
{
c2 x = {42};
c2 & y = x;
BOOST_TEST(check(x,"c2"));
BOOST_TEST(check(y,"c2"));
}
BOOST_TEST(check(c3{42},"c3"));
BOOST_TEST(check(c3{42},"42"));
{
c3 x = {42};
c3 & y = x;
BOOST_TEST(check(x,"c3"));
BOOST_TEST(check(x,"42"));
BOOST_TEST(check(y,"c3"));
BOOST_TEST(check(y,"42"));
}
BOOST_TEST(check(c4(),"c4"));
BOOST_TEST(check(c4(),"{Non-Printable}"));
{
c4 x;
c4 & y = x;
BOOST_TEST(check(x,"c4"));
BOOST_TEST(check(x,"{Non-Printable}"));
BOOST_TEST(check(y,"c4"));
BOOST_TEST(check(y,"{Non-Printable}"));
}
BOOST_TEST(check(my_exception{}, "std::exception::what(): my_exception_what"));
return boost::report_errors();
}
#endif
|