1 | // |
---|---|
2 | // verify_test.cpp - a test for BOOST_VERIFY |
3 | // |
4 | // Copyright (c) 2002 Peter Dimov and Multi Media Ltd. |
5 | // Copyright (c) 2007 Peter Dimov |
6 | // |
7 | // Distributed under the Boost Software License, Version 1.0. (See |
8 | // accompanying file LICENSE_1_0.txt or copy at |
9 | // http://www.boost.org/LICENSE_1_0.txt) |
10 | // |
11 | |
12 | #include <boost/core/lightweight_test.hpp> |
13 | |
14 | #if defined(__GNUC__) |
15 | # pragma GCC diagnostic ignored "-Waddress" |
16 | #endif |
17 | |
18 | #include <boost/assert.hpp> |
19 | |
20 | int f( int & x ) |
21 | { |
22 | return ++x; |
23 | } |
24 | |
25 | void test_default() |
26 | { |
27 | int x = 1; |
28 | |
29 | BOOST_VERIFY( 1 ); |
30 | BOOST_VERIFY( x == 1 ); |
31 | BOOST_VERIFY( ++x ); |
32 | BOOST_VERIFY( f(x) ); |
33 | BOOST_VERIFY( &x ); |
34 | |
35 | BOOST_TEST( x == 3 ); |
36 | } |
37 | |
38 | #define BOOST_DISABLE_ASSERTS |
39 | #include <boost/assert.hpp> |
40 | |
41 | void test_disabled() |
42 | { |
43 | int x = 1; |
44 | |
45 | BOOST_VERIFY( 1 ); |
46 | BOOST_VERIFY( x == 1 ); |
47 | BOOST_VERIFY( ++x ); |
48 | BOOST_VERIFY( f(x) ); |
49 | BOOST_VERIFY( &x ); |
50 | |
51 | BOOST_TEST( x == 3 ); |
52 | |
53 | BOOST_VERIFY( 0 ); |
54 | BOOST_VERIFY( !x ); |
55 | BOOST_VERIFY( x == 0 ); |
56 | BOOST_VERIFY( !++x ); |
57 | BOOST_VERIFY( !f(x) ); |
58 | |
59 | BOOST_TEST( x == 5 ); |
60 | |
61 | void * p = 0; |
62 | BOOST_VERIFY( p ); |
63 | } |
64 | |
65 | #undef BOOST_DISABLE_ASSERTS |
66 | |
67 | #define BOOST_ENABLE_ASSERT_HANDLER |
68 | #include <boost/assert.hpp> |
69 | #include <boost/config.hpp> |
70 | #include <cstdio> |
71 | |
72 | int handler_invoked = 0; |
73 | |
74 | void boost::assertion_failed(char const * expr, char const * function, char const * file, long line) |
75 | { |
76 | #if !defined(BOOST_NO_STDC_NAMESPACE) |
77 | using std::printf; |
78 | #endif |
79 | |
80 | printf(format: "Expression: %s\nFunction: %s\nFile: %s\nLine: %ld\n\n", expr, function, file, line); |
81 | ++handler_invoked; |
82 | } |
83 | |
84 | struct X |
85 | { |
86 | static bool f() |
87 | { |
88 | BOOST_VERIFY( 0 ); |
89 | return false; |
90 | } |
91 | }; |
92 | |
93 | void test_handler() |
94 | { |
95 | int x = 1; |
96 | |
97 | BOOST_VERIFY( 1 ); |
98 | BOOST_VERIFY( x == 1 ); |
99 | BOOST_VERIFY( ++x ); |
100 | BOOST_VERIFY( f(x) ); |
101 | BOOST_VERIFY( &x ); |
102 | |
103 | BOOST_TEST( x == 3 ); |
104 | |
105 | BOOST_VERIFY( 0 ); |
106 | BOOST_VERIFY( !x ); |
107 | BOOST_VERIFY( x == 0 ); |
108 | BOOST_VERIFY( !++x ); |
109 | BOOST_VERIFY( !f(x) ); |
110 | |
111 | BOOST_TEST( x == 5 ); |
112 | |
113 | void * p = 0; |
114 | BOOST_VERIFY( p ); |
115 | |
116 | BOOST_VERIFY( X::f() ); |
117 | |
118 | BOOST_TEST( handler_invoked == 8 ); |
119 | } |
120 | |
121 | #undef BOOST_ENABLE_ASSERT_HANDLER |
122 | |
123 | int main() |
124 | { |
125 | test_default(); |
126 | test_disabled(); |
127 | test_handler(); |
128 | |
129 | return boost::report_errors(); |
130 | } |
131 |