lib_b_inlined.hpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #ifndef BOOST_CONTRACT_TEST_LIB_B_INLINED_HPP_
  2. #define BOOST_CONTRACT_TEST_LIB_B_INLINED_HPP_
  3. // Copyright (C) 2008-2018 Lorenzo Caminiti
  4. // Distributed under the Boost Software License, Version 1.0 (see accompanying
  5. // file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt).
  6. // See: http://www.boost.org/doc/libs/release/libs/contract/doc/html/index.html
  7. #include "lib_b.hpp"
  8. #include "lib_a.hpp"
  9. #include "../detail/oteststream.hpp"
  10. #include <boost/contract.hpp> // All headers to test ODR for entire lib.
  11. bool call_f() {
  12. a aa;
  13. a::x_type x; x.value = -123;
  14. return aa.f(x) == -123;
  15. }
  16. void b::static_invariant() {
  17. using boost::contract::test::detail::out;
  18. out("b::static_inv\n");
  19. }
  20. void b::invariant() const {
  21. using boost::contract::test::detail::out;
  22. out("b::inv\n");
  23. }
  24. void b::g() {
  25. using boost::contract::test::detail::out;
  26. boost::contract::check c = boost::contract::public_function(this)
  27. .precondition([&] {
  28. out("b::g::pre\n");
  29. BOOST_CONTRACT_ASSERT(call_f());
  30. })
  31. .old([&] { out("b::g::old\n"); })
  32. .postcondition([&] {
  33. out("b::g::post\n");
  34. BOOST_CONTRACT_ASSERT(call_f());
  35. })
  36. ;
  37. out("b::g::body\n");
  38. }
  39. bool b::test_disable_pre_failure() {
  40. using boost::contract::test::detail::out;
  41. a::disable_pre_failure();
  42. out("");
  43. boost::contract::precondition_failure(boost::contract::from());
  44. return boost::contract::test::detail::oteststream::eq(out(),
  45. "a::pre_failure\n");
  46. }
  47. bool b::test_disable_post_failure() {
  48. using boost::contract::test::detail::out;
  49. a::disable_post_failure();
  50. out("");
  51. boost::contract::postcondition_failure(boost::contract::from());
  52. return boost::contract::test::detail::oteststream::eq(out(),
  53. "a::post_failure\n");
  54. }
  55. bool b::test_disable_entry_inv_failure() {
  56. using boost::contract::test::detail::out;
  57. a::disable_entry_inv_failure();
  58. out("");
  59. boost::contract::entry_invariant_failure(boost::contract::from());
  60. return boost::contract::test::detail::oteststream::eq(out(),
  61. "a::entry_inv_failure\n");
  62. }
  63. bool b::test_disable_exit_inv_failure() {
  64. using boost::contract::test::detail::out;
  65. a::disable_exit_inv_failure();
  66. out("");
  67. boost::contract::exit_invariant_failure(boost::contract::from());
  68. return boost::contract::test::detail::oteststream::eq(out(),
  69. "a::exit_inv_failure\n");
  70. }
  71. bool b::test_disable_inv_failure() {
  72. using boost::contract::test::detail::out;
  73. a::disable_inv_failure();
  74. out("");
  75. boost::contract::entry_invariant_failure(boost::contract::from());
  76. bool entry_inv = boost::contract::test::detail::oteststream::eq(out(),
  77. "a::inv_failure\n");
  78. out("");
  79. boost::contract::exit_invariant_failure(boost::contract::from());
  80. bool exit_inv = boost::contract::test::detail::oteststream::eq(out(),
  81. "a::inv_failure\n");
  82. return entry_inv && exit_inv;
  83. }
  84. bool b::test_disable_failure() {
  85. using boost::contract::test::detail::out;
  86. a::disable_failure();
  87. out("");
  88. boost::contract::precondition_failure(boost::contract::from());
  89. bool pre = boost::contract::test::detail::oteststream::eq(out(),
  90. "a::failure\n");
  91. out("");
  92. boost::contract::postcondition_failure(boost::contract::from());
  93. bool post = boost::contract::test::detail::oteststream::eq(out(),
  94. "a::failure\n");
  95. out("");
  96. boost::contract::entry_invariant_failure(boost::contract::from());
  97. bool entry_inv = boost::contract::test::detail::oteststream::eq(out(),
  98. "a::failure\n");
  99. out("");
  100. boost::contract::exit_invariant_failure(boost::contract::from());
  101. bool exit_inv = boost::contract::test::detail::oteststream::eq(out(),
  102. "a::failure\n");
  103. return pre && post && entry_inv && exit_inv;
  104. }
  105. #endif // #include guard