assert_test.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. //
  2. // assert_test.cpp - a test for boost/assert.hpp
  3. //
  4. // Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
  5. // Copyright (2) Beman Dawes 2011
  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. void test_default()
  14. {
  15. int x = 1;
  16. BOOST_ASSERT(1);
  17. BOOST_ASSERT(x);
  18. BOOST_ASSERT(x == 1);
  19. BOOST_ASSERT(&x);
  20. BOOST_ASSERT_MSG(1, "msg");
  21. BOOST_ASSERT_MSG(x, "msg");
  22. BOOST_ASSERT_MSG(x == 1, "msg");
  23. BOOST_ASSERT_MSG(&x, "msg");
  24. }
  25. #define BOOST_DISABLE_ASSERTS
  26. #include <boost/assert.hpp>
  27. void test_disabled()
  28. {
  29. int x = 1;
  30. BOOST_ASSERT(1);
  31. BOOST_ASSERT(x);
  32. BOOST_ASSERT(x == 1);
  33. BOOST_ASSERT(&x);
  34. BOOST_ASSERT_MSG(1, "msg");
  35. BOOST_ASSERT_MSG(x, "msg");
  36. BOOST_ASSERT_MSG(x == 1, "msg");
  37. BOOST_ASSERT_MSG(&x, "msg");
  38. BOOST_ASSERT(0);
  39. BOOST_ASSERT(!x);
  40. BOOST_ASSERT(x == 0);
  41. BOOST_ASSERT_MSG(0, "msg");
  42. BOOST_ASSERT_MSG(!x, "msg");
  43. BOOST_ASSERT_MSG(x == 0, "msg");
  44. void * p = 0;
  45. BOOST_ASSERT(p);
  46. BOOST_ASSERT_MSG(p, "msg");
  47. // suppress warnings
  48. p = &x;
  49. p = &p;
  50. }
  51. #undef BOOST_DISABLE_ASSERTS
  52. #define BOOST_ENABLE_ASSERT_HANDLER
  53. #include <boost/assert.hpp>
  54. #include <boost/config.hpp>
  55. #include <cstdio>
  56. int handler_invoked = 0;
  57. int msg_handler_invoked = 0;
  58. void boost::assertion_failed(char const * expr, char const * function, char const * file, long line)
  59. {
  60. #if !defined(BOOST_NO_STDC_NAMESPACE)
  61. using std::printf;
  62. #endif
  63. printf("Expression: %s\nFunction: %s\nFile: %s\nLine: %ld\n\n", expr, function, file, line);
  64. ++handler_invoked;
  65. }
  66. void boost::assertion_failed_msg(char const * expr, char const * msg, char const * function,
  67. char const * file, long line)
  68. {
  69. #if !defined(BOOST_NO_STDC_NAMESPACE)
  70. using std::printf;
  71. #endif
  72. printf("Expression: %s Message: %s\nFunction: %s\nFile: %s\nLine: %ld\n\n",
  73. expr, msg, function, file, line);
  74. ++msg_handler_invoked;
  75. }
  76. struct X
  77. {
  78. static void f()
  79. {
  80. BOOST_ASSERT(0);
  81. BOOST_ASSERT_MSG(0, "msg f()");
  82. }
  83. };
  84. void test_handler()
  85. {
  86. int x = 1;
  87. BOOST_ASSERT(1);
  88. BOOST_ASSERT(x);
  89. BOOST_ASSERT(x == 1);
  90. BOOST_ASSERT(&x);
  91. BOOST_ASSERT_MSG(1, "msg2");
  92. BOOST_ASSERT_MSG(x, "msg3");
  93. BOOST_ASSERT_MSG(x == 1, "msg4");
  94. BOOST_ASSERT_MSG(&x, "msg5");
  95. BOOST_ASSERT(0);
  96. BOOST_ASSERT(!x);
  97. BOOST_ASSERT(x == 0);
  98. BOOST_ASSERT_MSG(0,"msg 0");
  99. BOOST_ASSERT_MSG(!x, "msg !x");
  100. BOOST_ASSERT_MSG(x == 0, "msg x == 0");
  101. void * p = 0;
  102. BOOST_ASSERT(p);
  103. BOOST_ASSERT_MSG(p, "msg p");
  104. X::f();
  105. BOOST_ASSERT(handler_invoked == 5);
  106. BOOST_TEST(handler_invoked == 5);
  107. BOOST_ASSERT_MSG(msg_handler_invoked == 5, "msg_handler_invoked count is wrong");
  108. BOOST_TEST(msg_handler_invoked == 5);
  109. }
  110. #undef BOOST_ENABLE_ASSERT_HANDLER
  111. #undef BOOST_ENABLE_ASSERT_MSG_HANDLER
  112. int main()
  113. {
  114. test_default();
  115. test_disabled();
  116. test_handler();
  117. return boost::report_errors();
  118. }