1 //
2 // verify_exp_test.cpp - tests BOOST_ASSERT 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(x) -> BOOST_ASSERT(x)
18
19 #undef NDEBUG
20 #include <boost/assert.hpp>
21 #undef BOOST_ASSERT
22
test_default()23 void test_default()
24 {
25 std::string v1 = BOOST_STRINGIZE(BOOST_VERIFY(x1));
26 BOOST_TEST_EQ( v1, "BOOST_ASSERT(x1)" );
27 }
28
29 // default case, NDEBUG
30 // BOOST_VERIFY(x) -> ((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(x2));
38 BOOST_TEST_EQ( v2, "((void)(x2))" );
39 }
40
41 // BOOST_DISABLE_ASSERTS, !NDEBUG
42 // BOOST_VERIFY(x) -> ((void)(x))
43
44 #define BOOST_DISABLE_ASSERTS
45 #undef NDEBUG
46 #include <boost/assert.hpp>
47
test_disabled()48 void test_disabled()
49 {
50 std::string v3 = BOOST_STRINGIZE(BOOST_VERIFY(x3));
51 BOOST_TEST_EQ( v3, "((void)(x3))" );
52 }
53
54 // BOOST_DISABLE_ASSERTS, NDEBUG
55 // BOOST_VERIFY(x) -> ((void)(x))
56
57 #undef NDEBUG
58 #include <boost/assert.hpp>
59
test_disabled_ndebug()60 void test_disabled_ndebug()
61 {
62 std::string v4 = BOOST_STRINGIZE(BOOST_VERIFY(x4));
63 BOOST_TEST_EQ( v4, "((void)(x4))" );
64 }
65
66 #undef BOOST_DISABLE_ASSERTS
67
68 // BOOST_ENABLE_ASSERT_HANDLER, !NDEBUG
69 // BOOST_VERIFY(x) -> BOOST_ASSERT(x)
70
71 #define BOOST_ENABLE_ASSERT_HANDLER
72
73 #undef NDEBUG
74 #include <boost/assert.hpp>
75 #undef BOOST_ASSERT
76
test_handler()77 void test_handler()
78 {
79 std::string v5 = BOOST_STRINGIZE(BOOST_VERIFY(x5));
80 BOOST_TEST_EQ( v5, "BOOST_ASSERT(x5)" );
81 }
82
83 #define NDEBUG
84 #include <boost/assert.hpp>
85 #undef BOOST_ASSERT
86
test_handler_ndebug()87 void test_handler_ndebug()
88 {
89 std::string v6 = BOOST_STRINGIZE(BOOST_VERIFY(x6));
90 BOOST_TEST_EQ( v6, "BOOST_ASSERT(x6)" );
91 }
92
93 #undef BOOST_ENABLE_ASSERT_HANDLER
94
95 // BOOST_ENABLE_ASSERT_DEBUG_HANDLER, !NDEBUG
96 // BOOST_VERIFY(x) -> BOOST_ASSERT(x)
97
98 #define BOOST_ENABLE_ASSERT_DEBUG_HANDLER
99
100 #undef NDEBUG
101 #include <boost/assert.hpp>
102 #undef BOOST_ASSERT
103
test_debug_handler()104 void test_debug_handler()
105 {
106 std::string v7 = BOOST_STRINGIZE(BOOST_VERIFY(x7));
107 BOOST_TEST_EQ( v7, "BOOST_ASSERT(x7)" );
108 }
109
110 // BOOST_ENABLE_ASSERT_DEBUG_HANDLER, NDEBUG
111 // BOOST_VERIFY(x) -> ((void)(x))
112
113 #define NDEBUG
114 #include <boost/assert.hpp>
115
test_debug_handler_ndebug()116 void test_debug_handler_ndebug()
117 {
118 std::string v8 = BOOST_STRINGIZE(BOOST_VERIFY(x8));
119 BOOST_TEST_EQ( v8, "((void)(x8))" );
120 }
121
122 #undef BOOST_ENABLE_ASSERT_DEBUG_HANDLER
123
main()124 int main()
125 {
126 test_default();
127 test_default_ndebug();
128 test_disabled();
129 test_disabled_ndebug();
130 test_handler();
131 test_handler_ndebug();
132 test_debug_handler();
133 test_debug_handler_ndebug();
134
135 return boost::report_errors();
136 }
137