1 //
2 // verify_msg_exp_test.cpp - tests BOOST_VERIFY_MSG expansion
3 //
4 // Copyright (c) 2014 Peter Dimov
5 //
6 // Distributed under the Boost Software License, Version 1.0.
7 // See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt
9 //
10
11 #include <boost/config.hpp>
12 #include <boost/current_function.hpp>
13 #include <boost/detail/lightweight_test.hpp>
14 #include <string>
15
16 // default case, !NDEBUG
17 // BOOST_VERIFY_MSG(x,"m") -> BOOST_ASSERT_MSG(x,"m")
18
19 #undef NDEBUG
20 #include <boost/assert.hpp>
21 #undef BOOST_ASSERT_MSG
22
test_default()23 void test_default()
24 {
25 std::string v1 = BOOST_STRINGIZE(BOOST_VERIFY_MSG(x1, m1));
26 BOOST_TEST_EQ( v1, "BOOST_ASSERT_MSG(x1,m1)" );
27 }
28
29 // default case, NDEBUG
30 // BOOST_VERIFY_MSG(x,"m") -> ((void)(x))
31
32 #define NDEBUG
33 #include <boost/assert.hpp>
34
test_default_ndebug()35 void test_default_ndebug()
36 {
37 std::string v2 = BOOST_STRINGIZE(BOOST_VERIFY_MSG(x2, m2));
38 BOOST_TEST_EQ( v2, "((void)(x2))" );
39 }
40
41 // BOOST_DISABLE_ASSERTS, !NDEBUG
42 // BOOST_VERIFY_MSG(x,"m") -> ((void)(x))
43
44 #define BOOST_DISABLE_ASSERTS
45
46 #undef NDEBUG
47 #include <boost/assert.hpp>
48
test_disabled()49 void test_disabled()
50 {
51 std::string v3 = BOOST_STRINGIZE(BOOST_VERIFY_MSG(x3, "m3"));
52 BOOST_TEST_EQ( v3, "((void)(x3))" );
53 }
54
55 // BOOST_DISABLE_ASSERTS, NDEBUG
56 // BOOST_VERIFY_MSG(x,"m") -> ((void)(x))
57
58 #define NDEBUG
59 #include <boost/assert.hpp>
60
test_disabled_ndebug()61 void test_disabled_ndebug()
62 {
63 std::string v4 = BOOST_STRINGIZE(BOOST_VERIFY_MSG(x4, "m4"));
64 BOOST_TEST_EQ( v4, "((void)(x4))" );
65 }
66
67 #undef BOOST_DISABLE_ASSERTS
68
69 // BOOST_ENABLE_ASSERT_HANDLER, !NDEBUG
70 // BOOST_VERIFY_MSG(x,m) -> BOOST_ASSERT_MSG(x,m)
71
72 #define BOOST_ENABLE_ASSERT_HANDLER
73
74 #undef NDEBUG
75 #include <boost/assert.hpp>
76 #undef BOOST_ASSERT_MSG
77
test_handler()78 void test_handler()
79 {
80 std::string v5 = BOOST_STRINGIZE(BOOST_VERIFY_MSG(x5, m5));
81 BOOST_TEST_EQ( v5, "BOOST_ASSERT_MSG(x5,m5)" );
82 }
83
84 // BOOST_ENABLE_ASSERT_HANDLER, NDEBUG
85 // BOOST_VERIFY_MSG(x,n) -> BOOST_ASSERT_MSG(x,m)
86
87 #define NDEBUG
88 #include <boost/assert.hpp>
89 #undef BOOST_ASSERT_MSG
90
test_handler_ndebug()91 void test_handler_ndebug()
92 {
93 std::string v6 = BOOST_STRINGIZE(BOOST_VERIFY_MSG(x6, m6));
94 BOOST_TEST_EQ( v6, "BOOST_ASSERT_MSG(x6,m6)" );
95 }
96
97 #undef BOOST_ENABLE_ASSERT_HANDLER
98
99 // BOOST_ENABLE_ASSERT_DEBUG_HANDLER, !NDEBUG
100 // BOOST_VERIFY_MSG(x,n) -> BOOST_ASSERT_MSG(x,m)
101
102 #define BOOST_ENABLE_ASSERT_DEBUG_HANDLER
103
104 #undef NDEBUG
105 #include <boost/assert.hpp>
106 #undef BOOST_ASSERT_MSG
107
test_debug_handler()108 void test_debug_handler()
109 {
110 std::string v7 = BOOST_STRINGIZE(BOOST_VERIFY_MSG(x7, m7));
111 BOOST_TEST_EQ( v7, "BOOST_ASSERT_MSG(x7,m7)" );
112 }
113
114 // BOOST_ENABLE_ASSERT_DEBUG_HANDLER, NDEBUG
115 // BOOST_VERIFY_MSG(x,"m") -> ((void)(x))
116
117 #define NDEBUG
118 #include <boost/assert.hpp>
119
test_debug_handler_ndebug()120 void test_debug_handler_ndebug()
121 {
122 std::string v8 = BOOST_STRINGIZE(BOOST_VERIFY_MSG(x8, "m8"));
123 BOOST_TEST_EQ( v8, "((void)(x8))" );
124 }
125
126 #undef BOOST_ENABLE_ASSERT_DEBUG_HANDLER
127
main()128 int main()
129 {
130 test_default();
131 test_default_ndebug();
132 test_disabled();
133 test_disabled_ndebug();
134 test_handler();
135 test_handler_ndebug();
136 test_debug_handler();
137 test_debug_handler_ndebug();
138
139 return boost::report_errors();
140 }
141