verify_test.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. #include <boost/detail/lightweight_test.hpp>
  12. #include <boost/assert.hpp>
  13. int f( int & x )
  14. {
  15. return ++x;
  16. }
  17. void test_default()
  18. {
  19. int x = 1;
  20. BOOST_VERIFY( 1 );
  21. BOOST_VERIFY( x == 1 );
  22. BOOST_VERIFY( ++x );
  23. BOOST_VERIFY( f(x) );
  24. BOOST_VERIFY( &x );
  25. BOOST_TEST( x == 3 );
  26. }
  27. #define BOOST_DISABLE_ASSERTS
  28. #include <boost/assert.hpp>
  29. void test_disabled()
  30. {
  31. int x = 1;
  32. BOOST_VERIFY( 1 );
  33. BOOST_VERIFY( x == 1 );
  34. BOOST_VERIFY( ++x );
  35. BOOST_VERIFY( f(x) );
  36. BOOST_VERIFY( &x );
  37. BOOST_TEST( x == 3 );
  38. BOOST_VERIFY( 0 );
  39. BOOST_VERIFY( !x );
  40. BOOST_VERIFY( x == 0 );
  41. BOOST_VERIFY( !++x );
  42. BOOST_VERIFY( !f(x) );
  43. BOOST_TEST( x == 5 );
  44. void * p = 0;
  45. BOOST_VERIFY( p );
  46. }
  47. #undef BOOST_DISABLE_ASSERTS
  48. #define BOOST_ENABLE_ASSERT_HANDLER
  49. #include <boost/assert.hpp>
  50. #include <boost/config.hpp>
  51. #include <cstdio>
  52. int handler_invoked = 0;
  53. void boost::assertion_failed(char const * expr, char const * function, char const * file, long line)
  54. {
  55. #if !defined(BOOST_NO_STDC_NAMESPACE)
  56. using std::printf;
  57. #endif
  58. printf("Expression: %s\nFunction: %s\nFile: %s\nLine: %ld\n\n", expr, function, file, line);
  59. ++handler_invoked;
  60. }
  61. struct X
  62. {
  63. static bool f()
  64. {
  65. BOOST_VERIFY( 0 );
  66. return false;
  67. }
  68. };
  69. void test_handler()
  70. {
  71. int x = 1;
  72. BOOST_VERIFY( 1 );
  73. BOOST_VERIFY( x == 1 );
  74. BOOST_VERIFY( ++x );
  75. BOOST_VERIFY( f(x) );
  76. BOOST_VERIFY( &x );
  77. BOOST_TEST( x == 3 );
  78. BOOST_VERIFY( 0 );
  79. BOOST_VERIFY( !x );
  80. BOOST_VERIFY( x == 0 );
  81. BOOST_VERIFY( !++x );
  82. BOOST_VERIFY( !f(x) );
  83. BOOST_TEST( x == 5 );
  84. void * p = 0;
  85. BOOST_VERIFY( p );
  86. BOOST_VERIFY( X::f() );
  87. BOOST_TEST( handler_invoked == 8 );
  88. }
  89. #undef BOOST_ENABLE_ASSERT_HANDLER
  90. int main()
  91. {
  92. test_default();
  93. test_disabled();
  94. test_handler();
  95. return boost::report_errors();
  96. }