boost_test_universal_macro.html 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>BOOST_TEST: universal and general purpose assertions</title>
  5. <link rel="stylesheet" href="../../boostbook.css" type="text/css">
  6. <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
  7. <link rel="home" href="../../index.html" title="Boost.Test">
  8. <link rel="up" href="../testing_tools.html" title="Writing unit tests">
  9. <link rel="prev" href="tools_assertion_severity_level.html" title="Assertion severity level">
  10. <link rel="next" href="reports.html" title="Reported information">
  11. </head>
  12. <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
  13. <table cellpadding="2" width="100%"><tr>
  14. <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
  15. <td align="center"><a href="../../../../../../index.html">Home</a></td>
  16. <td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
  17. <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
  18. <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
  19. <td align="center"><a href="../../../../../../more/index.htm">More</a></td>
  20. </tr></table>
  21. <hr>
  22. <div class="spirit-nav">
  23. <a accesskey="p" href="tools_assertion_severity_level.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../testing_tools.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reports.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
  24. </div>
  25. <div class="section">
  26. <div class="titlepage"><div><div><h3 class="title">
  27. <a name="boost_test.testing_tools.boost_test_universal_macro"></a><a class="link" href="boost_test_universal_macro.html" title="BOOST_TEST: universal and general purpose assertions">BOOST_TEST:
  28. universal and general purpose assertions</a>
  29. </h3></div></div></div>
  30. <p>
  31. The <span class="emphasis"><em>Unit Test Framework</em></span> provides an almost unique interface
  32. to a great range of test-case scenarios, through the <a class="link" href="../utf_reference/testing_tool_ref/assertion_boost_test_universal_macro.html" title="BOOST_TEST"><code class="computeroutput"><span class="identifier">BOOST_TEST</span></code></a> macro. The general form
  33. of <code class="computeroutput"><span class="identifier">BOOST_TEST</span></code> is the following:
  34. </p>
  35. <pre class="programlisting"><span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">statement</span><span class="special">);</span>
  36. <span class="identifier">BOOST_TEST_</span><span class="special">&lt;</span><span class="identifier">level</span><span class="special">&gt;(</span><span class="identifier">statement</span><span class="special">,</span> <span class="identifier">optional_modifiers</span><span class="special">)</span>
  37. </pre>
  38. <p>
  39. An example of use might be the following:
  40. </p>
  41. <h6>
  42. <a name="boost_test.testing_tools.boost_test_universal_macro.h0"></a>
  43. <span class="phrase"><a name="boost_test.testing_tools.boost_test_universal_macro.example_descr"></a></span><a class="link" href="boost_test_universal_macro.html#boost_test.testing_tools.boost_test_universal_macro.example_descr">Example:
  44. BOOST_TEST overview</a>
  45. </h6>
  46. <div class="informaltable"><table class="table">
  47. <colgroup><col></colgroup>
  48. <thead><tr><th>
  49. <p>
  50. Code
  51. </p>
  52. </th></tr></thead>
  53. <tbody><tr><td>
  54. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">boost_test_macro_overview</span>
  55. <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
  56. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_macro_overview</span> <span class="special">)</span>
  57. <span class="special">{</span>
  58. <span class="keyword">namespace</span> <span class="identifier">tt</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">;</span>
  59. <span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
  60. <span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
  61. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">!=</span> <span class="identifier">b</span> <span class="special">-</span> <span class="number">1</span><span class="special">);</span>
  62. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">+</span> <span class="number">1</span> <span class="special">&lt;</span> <span class="identifier">b</span><span class="special">);</span>
  63. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">b</span> <span class="special">-</span><span class="number">1</span> <span class="special">&gt;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">a</span> <span class="special">&lt;&lt;</span> <span class="string">" &lt; "</span> <span class="special">&lt;&lt;</span> <span class="identifier">b</span> <span class="special">-</span> <span class="number">1</span> <span class="special">&lt;&lt;</span> <span class="string">" does not hold"</span><span class="special">);</span>
  64. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">==</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">tt</span><span class="special">::</span><span class="identifier">bitwise</span><span class="special">());</span>
  65. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">+</span> <span class="number">0.1</span> <span class="special">==</span> <span class="identifier">b</span> <span class="special">-</span> <span class="number">0.8</span><span class="special">,</span> <span class="identifier">tt</span><span class="special">::</span><span class="identifier">tolerance</span><span class="special">(</span><span class="number">0.01</span><span class="special">));</span>
  66. <span class="special">}</span>
  67. </pre>
  68. </td></tr></tbody>
  69. </table></div>
  70. <div class="informaltable"><table class="table">
  71. <colgroup><col></colgroup>
  72. <thead><tr><th>
  73. <p>
  74. Output
  75. </p>
  76. </th></tr></thead>
  77. <tbody><tr><td>
  78. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="special">./</span><span class="identifier">boost_test_macro_overview</span> <span class="special">--</span><span class="identifier">log_level</span><span class="special">=</span><span class="identifier">all</span>
  79. <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
  80. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro_overview"</span>
  81. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">12</span><span class="special">:</span> <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_macro_overview"</span>
  82. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">17</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_macro_overview"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">!=</span> <span class="identifier">b</span> <span class="special">-</span> <span class="number">1</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">1</span> <span class="special">==</span> <span class="number">1</span><span class="special">]</span>
  83. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">18</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_macro_overview"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">+</span> <span class="number">1</span> <span class="special">&lt;</span> <span class="identifier">b</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">1</span> <span class="special">+</span> <span class="number">1</span> <span class="special">&gt;=</span> <span class="number">2</span><span class="special">]</span>
  84. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">19</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_macro_overview"</span><span class="special">:</span> <span class="number">1</span> <span class="special">&lt;</span> <span class="number">1</span> <span class="identifier">does</span> <span class="keyword">not</span> <span class="identifier">hold</span>
  85. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">20</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_macro_overview"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">==</span> <span class="identifier">b</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">1</span> <span class="special">!=</span> <span class="number">2</span><span class="special">].</span> <span class="identifier">Bitwise</span> <span class="identifier">comparison</span> <span class="identifier">failed</span>
  86. <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">0</span>
  87. <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">1</span>
  88. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">21</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_macro_overview"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">+</span> <span class="number">0.1</span> <span class="special">==</span> <span class="identifier">b</span> <span class="special">-</span> <span class="number">0.8</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">1</span> <span class="special">+</span> <span class="number">0.10000000000000001</span> <span class="special">!=</span> <span class="number">1.2</span><span class="special">].</span> <span class="identifier">Relative</span> <span class="identifier">difference</span> <span class="identifier">exceeds</span> <span class="identifier">tolerance</span> <span class="special">[</span><span class="number">0.0909091</span> <span class="special">&gt;</span> <span class="number">0.01</span><span class="special">]</span>
  89. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">12</span><span class="special">:</span> <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_macro_overview"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">380u</span><span class="identifier">s</span>
  90. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro_overview"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">459u</span><span class="identifier">s</span>
  91. <span class="special">***</span> <span class="number">5</span> <span class="identifier">failures</span> <span class="identifier">are</span> <span class="identifier">detected</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro_overview"</span>
  92. </pre>
  93. </td></tr></tbody>
  94. </table></div>
  95. <p>
  96. The major features of this tool are:
  97. </p>
  98. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  99. <li class="listitem">
  100. a great flexibility for <code class="computeroutput"><span class="identifier">statement</span></code>
  101. which may be almost anything: full expression composed by several operations
  102. are supported and handled,
  103. </li>
  104. <li class="listitem">
  105. an extended reporting capability in case of failure: not only <code class="computeroutput"><span class="identifier">BOOST_TEST</span></code> reports the location of
  106. the failure and a copy of <code class="computeroutput"><span class="identifier">statement</span></code>
  107. itself, but also the values of the operands that permits a rapid identification
  108. of the issues related to the failed assertion,
  109. </li>
  110. <li class="listitem">
  111. the possibility to control better the behavior or the reports of the
  112. checks, in particular:
  113. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
  114. <li class="listitem">
  115. floating point comparison: the tolerance may be provided, either
  116. using the <code class="computeroutput"><span class="identifier">BOOST_TEST</span></code>
  117. directly with <code class="computeroutput"><span class="identifier">optional_modifiers</span></code>,
  118. or with <span class="emphasis"><em>decorators</em></span> (see <a class="link" href="extended_comparison/floating_point.html" title="Floating point comparison">here</a>
  119. for more details),
  120. </li>
  121. <li class="listitem">
  122. container/collection comparisons: different operations for comparison
  123. are provided out of the box for comparing collection of elements
  124. (default, per-element, lexicographic), with extended diagnostic
  125. on failures (covered in <a class="link" href="extended_comparison/collections.html" title="Collections comparison">this</a>
  126. section),
  127. </li>
  128. <li class="listitem">
  129. string comparison: C-strings operands are automatically detected
  130. and the comparisons are performed as if <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>
  131. objects were used,
  132. </li>
  133. <li class="listitem">
  134. optional failure message,
  135. </li>
  136. <li class="listitem">
  137. bitwise comparison, providing extended diagnostic in case of failure
  138. </li>
  139. </ul></div>
  140. </li>
  141. </ul></div>
  142. <div class="warning"><table border="0" summary="Warning">
  143. <tr>
  144. <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../doc/src/images/warning.png"></td>
  145. <th align="left">Warning</th>
  146. </tr>
  147. <tr><td align="left" valign="top"><p>
  148. To get all the functionalities of <code class="computeroutput"><span class="identifier">BOOST_TEST</span></code>
  149. family of assertions, a C++11 capable compiler is required, especially
  150. supporting the <code class="computeroutput"><span class="keyword">auto</span></code> and <code class="computeroutput"><span class="keyword">decltype</span></code> keywords and the variadic macros.
  151. The documentation focuses on these set of compilers. For compilers not
  152. supporting all the features of <code class="computeroutput"><span class="identifier">BOOST_TEST</span></code>,
  153. the macro <code class="computeroutput"><span class="identifier">BOOST_TEST_MACRO_LIMITED_SUPPORT</span></code>.
  154. </p></td></tr>
  155. </table></div>
  156. <a name="boost_test_statement_overloads"></a><h4>
  157. <a name="boost_test.testing_tools.boost_test_universal_macro.h1"></a>
  158. <span class="phrase"><a name="boost_test.testing_tools.boost_test_universal_macro.complex_statements"></a></span><a class="link" href="boost_test_universal_macro.html#boost_test.testing_tools.boost_test_universal_macro.complex_statements">Complex
  159. statements</a>
  160. </h4>
  161. <p>
  162. <code class="computeroutput"><span class="identifier">BOOST_TEST</span></code> provides an enhanced
  163. reporting capability: additional details of the failing operands and operations
  164. are provided in the log, as shown on the example below:
  165. </p>
  166. <h6>
  167. <a name="boost_test.testing_tools.boost_test_universal_macro.h2"></a>
  168. <span class="phrase"><a name="boost_test.testing_tools.boost_test_universal_macro.example_descr0"></a></span><a class="link" href="boost_test_universal_macro.html#boost_test.testing_tools.boost_test_universal_macro.example_descr0">Example:
  169. BOOST_TEST enhanced reporting</a>
  170. </h6>
  171. <div class="informaltable"><table class="table">
  172. <colgroup><col></colgroup>
  173. <thead><tr><th>
  174. <p>
  175. Code
  176. </p>
  177. </th></tr></thead>
  178. <tbody><tr><td>
  179. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">boost_test_macro3</span>
  180. <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
  181. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_op_reportings</span> <span class="special">)</span>
  182. <span class="special">{</span>
  183. <span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">13</span><span class="special">,</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">12</span><span class="special">;</span>
  184. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">==</span> <span class="identifier">b</span><span class="special">);</span>
  185. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">&lt;</span> <span class="identifier">b</span><span class="special">);</span>
  186. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">-</span> <span class="number">1</span> <span class="special">&lt;</span> <span class="identifier">b</span><span class="special">);</span>
  187. <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">b</span> <span class="special">&gt;</span> <span class="identifier">a</span> <span class="special">-</span> <span class="number">1</span><span class="special">);</span>
  188. <span class="special">}</span>
  189. </pre>
  190. </td></tr></tbody>
  191. </table></div>
  192. <div class="informaltable"><table class="table">
  193. <colgroup><col></colgroup>
  194. <thead><tr><th>
  195. <p>
  196. Output
  197. </p>
  198. </th></tr></thead>
  199. <tbody><tr><td>
  200. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="special">./</span><span class="identifier">boost_test_macro3</span> <span class="special">--</span><span class="identifier">log_level</span><span class="special">=</span><span class="identifier">all</span>
  201. <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
  202. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro3"</span>
  203. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">12</span><span class="special">):</span> <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_op_reportings"</span>
  204. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">15</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_op_reportings"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">==</span> <span class="identifier">b</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">13</span> <span class="special">!=</span> <span class="number">12</span><span class="special">]</span>
  205. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">16</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_op_reportings"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">&lt;</span> <span class="identifier">b</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">13</span> <span class="special">&gt;=</span> <span class="number">12</span><span class="special">]</span>
  206. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">17</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_op_reportings"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">-</span> <span class="number">1</span> <span class="special">&lt;</span> <span class="identifier">b</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">13</span> <span class="special">-</span> <span class="number">1</span> <span class="special">&gt;=</span> <span class="number">12</span><span class="special">]</span>
  207. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">18</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_op_reportings"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">b</span> <span class="special">&gt;</span> <span class="identifier">a</span> <span class="special">-</span> <span class="number">1</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">12</span> <span class="special">&lt;=</span> <span class="number">12</span><span class="special">]</span>
  208. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">12</span><span class="special">):</span> <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_op_reportings"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">484u</span><span class="identifier">s</span>
  209. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro3"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">588u</span><span class="identifier">s</span>
  210. <span class="special">***</span> <span class="number">2</span> <span class="identifier">failures</span> <span class="identifier">are</span> <span class="identifier">detected</span> <span class="identifier">in</span> <span class="identifier">the</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro3"</span>
  211. </pre>
  212. </td></tr></tbody>
  213. </table></div>
  214. <p>
  215. <code class="computeroutput"><span class="identifier">BOOST_TEST</span></code> parses the <code class="computeroutput"><span class="identifier">statement</span></code> and constructs an expression
  216. out of it. <code class="computeroutput"><span class="identifier">statement</span></code> may
  217. be a complex expressions containing almost any of the overloadable operators
  218. in C++:
  219. </p>
  220. <div class="informaltable"><table class="table">
  221. <colgroup>
  222. <col>
  223. <col>
  224. </colgroup>
  225. <thead><tr>
  226. <th>
  227. <p>
  228. Class of operation
  229. </p>
  230. </th>
  231. <th>
  232. <p>
  233. operators
  234. </p>
  235. </th>
  236. </tr></thead>
  237. <tbody>
  238. <tr>
  239. <td>
  240. <p>
  241. binary comparisons
  242. </p>
  243. </td>
  244. <td>
  245. <p>
  246. <code class="computeroutput"><span class="special">==</span></code>, <code class="computeroutput"><span class="special">!=</span></code>, <code class="computeroutput"><span class="special">&lt;</span></code>,
  247. <code class="computeroutput"><span class="special">&gt;</span></code>, <code class="computeroutput"><span class="special">&lt;=</span></code>, <code class="computeroutput"><span class="special">&gt;=</span></code>
  248. </p>
  249. </td>
  250. </tr>
  251. <tr>
  252. <td>
  253. <p>
  254. arithmetic compositions
  255. </p>
  256. </td>
  257. <td>
  258. <p>
  259. <code class="computeroutput"><span class="special">+</span></code>, <code class="computeroutput"><span class="special">-</span></code>,
  260. <code class="computeroutput"><span class="special">*</span></code>, <code class="computeroutput"><span class="special">/</span></code>,
  261. <code class="computeroutput"><span class="special">%</span></code>
  262. </p>
  263. </td>
  264. </tr>
  265. <tr>
  266. <td>
  267. <p>
  268. bitwise compositions
  269. </p>
  270. </td>
  271. <td>
  272. <p>
  273. <code class="computeroutput"><span class="special">|</span></code>, <code class="computeroutput"><span class="special">&amp;</span></code>,
  274. <code class="computeroutput"><span class="special">^</span></code>, <code class="computeroutput"><span class="special">&lt;&lt;</span></code>,
  275. <code class="computeroutput"><span class="special">&gt;&gt;</span></code>
  276. </p>
  277. </td>
  278. </tr>
  279. <tr>
  280. <td>
  281. <p>
  282. assignments
  283. </p>
  284. </td>
  285. <td>
  286. <p>
  287. <code class="computeroutput"><span class="special">=</span></code>, <code class="computeroutput"><span class="special">+=</span></code>,
  288. <code class="computeroutput"><span class="special">-=</span></code>, <code class="computeroutput"><span class="special">*=</span></code>, <code class="computeroutput"><span class="special">/=</span></code>,
  289. <code class="computeroutput"><span class="special">%=</span></code>, <code class="computeroutput"><span class="special">&lt;&lt;=</span></code>, <code class="computeroutput"><span class="special">&gt;&gt;=</span></code>,
  290. <code class="computeroutput"><span class="special">&amp;=</span></code>, <code class="computeroutput"><span class="special">^=</span></code>, <code class="computeroutput"><span class="special">|=</span></code>
  291. </p>
  292. </td>
  293. </tr>
  294. </tbody>
  295. </table></div>
  296. <p>
  297. <code class="computeroutput"><span class="identifier">statement</span></code> is evaluated and
  298. cast to <code class="computeroutput"><span class="keyword">bool</span></code>, as if it would
  299. appear as argument to an <code class="computeroutput"><span class="keyword">if</span></code>
  300. statement: this is the result of the assertion
  301. </p>
  302. <h4>
  303. <a name="boost_test.testing_tools.boost_test_universal_macro.h3"></a>
  304. <span class="phrase"><a name="boost_test.testing_tools.boost_test_universal_macro.uniform_reporting"></a></span><a class="link" href="boost_test_universal_macro.html#boost_test.testing_tools.boost_test_universal_macro.uniform_reporting">Uniform
  305. reporting</a>
  306. </h4>
  307. <p>
  308. This tool is provided in three variants corresponding to the corresponding
  309. <a class="link" href="tools_assertion_severity_level.html" title="Assertion severity level">severity
  310. levels</a>. These three levels of assertions are reported into the test
  311. log and output, as described in details in the section. The granularity of
  312. the report depends on the current <a class="link" href="../utf_reference/rt_param_reference/log_level.html" title="log_level">log
  313. level</a> and <a class="link" href="../utf_reference/rt_param_reference/report_level.html" title="report_level">report
  314. level</a>.
  315. </p>
  316. <a name="boost_test_statement_limitations"></a><h4>
  317. <a name="boost_test.testing_tools.boost_test_universal_macro.h4"></a>
  318. <span class="phrase"><a name="boost_test.testing_tools.boost_test_universal_macro.limitations_workaround"></a></span><a class="link" href="boost_test_universal_macro.html#boost_test.testing_tools.boost_test_universal_macro.limitations_workaround">Limitations
  319. &amp; workaround</a>
  320. </h4>
  321. <p>
  322. There are a few constructions that are however unsupported, but adding an
  323. extra bracket usually solves that:
  324. </p>
  325. <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
  326. <li class="listitem">
  327. statements containing ternary conditions: those statement should be surrounded
  328. by parenthesis as they cannot be overloaded
  329. </li>
  330. <li class="listitem">
  331. statements containing commas: those statements will be intercepted by
  332. the preprocessor
  333. </li>
  334. <li class="listitem">
  335. <p class="simpara">
  336. compound statements containing any logical composition <code class="computeroutput"><span class="special">||</span></code>, <code class="computeroutput"><span class="special">&amp;&amp;</span></code>.
  337. Those are disabled intentionally and should be surrounded by parenthesis
  338. </p>
  339. <pre class="programlisting"><span class="identifier">BOOST_TEST</span><span class="special">((</span><span class="keyword">true</span> <span class="special">||</span> <span class="keyword">false</span><span class="special">));</span>
  340. </pre>
  341. <p class="simpara">
  342. The full details are given in <a class="link" href="internal_details.html" title="BOOST_TEST: details on expressions">this
  343. section</a>.
  344. </p>
  345. </li>
  346. </ul></div>
  347. <h6>
  348. <a name="boost_test.testing_tools.boost_test_universal_macro.h5"></a>
  349. <span class="phrase"><a name="boost_test.testing_tools.boost_test_universal_macro.example_descr1"></a></span><a class="link" href="boost_test_universal_macro.html#boost_test.testing_tools.boost_test_universal_macro.example_descr1">Example:
  350. BOOST_TEST limitation and workaround</a>
  351. </h6>
  352. <div class="informaltable"><table class="table">
  353. <colgroup><col></colgroup>
  354. <thead><tr><th>
  355. <p>
  356. Code
  357. </p>
  358. </th></tr></thead>
  359. <tbody><tr><td>
  360. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_TEST_MODULE</span> <span class="identifier">boost_test_macro_workaround</span>
  361. <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">test</span><span class="special">/</span><span class="identifier">included</span><span class="special">/</span><span class="identifier">unit_test</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
  362. <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">sstream</span><span class="special">&gt;</span>
  363. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_logical_not_allowed</span> <span class="special">)</span>
  364. <span class="special">{</span>
  365. <span class="comment">// Boost Unit Test Framework prevents compilation of</span>
  366. <span class="comment">// BOOST_TEST(true &amp;&amp; true);</span>
  367. <span class="identifier">BOOST_TEST</span><span class="special">((</span><span class="keyword">true</span> <span class="special">&amp;&amp;</span> <span class="keyword">true</span><span class="special">));</span> <span class="comment">// with extra brackets, it works as expected</span>
  368. <span class="special">}</span>
  369. <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_ternary</span> <span class="special">)</span>
  370. <span class="special">{</span>
  371. <span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
  372. <span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
  373. <span class="comment">// Boost Unit Test Framework prevents compilation of</span>
  374. <span class="comment">// BOOST_TEST(a == b ? true : false);</span>
  375. <span class="identifier">BOOST_TEST</span><span class="special">((</span><span class="identifier">a</span> <span class="special">+</span> <span class="number">1</span> <span class="special">==</span> <span class="identifier">b</span> <span class="special">?</span> <span class="keyword">true</span> <span class="special">:</span> <span class="keyword">false</span><span class="special">));</span> <span class="comment">// again works as expected with extra brackets</span>
  376. <span class="special">}</span>
  377. </pre>
  378. </td></tr></tbody>
  379. </table></div>
  380. <div class="informaltable"><table class="table">
  381. <colgroup><col></colgroup>
  382. <thead><tr><th>
  383. <p>
  384. Output
  385. </p>
  386. </th></tr></thead>
  387. <tbody><tr><td>
  388. <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">&gt;</span> <span class="special">./</span><span class="identifier">boost_test_macro_workaround</span> <span class="special">--</span><span class="identifier">log_level</span><span class="special">=</span><span class="identifier">all</span>
  389. <span class="identifier">Running</span> <span class="number">2</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
  390. <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro_workaround"</span>
  391. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">13</span><span class="special">:</span> <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_logical_not_allowed"</span>
  392. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">17</span><span class="special">:</span> <span class="identifier">info</span><span class="special">:</span> <span class="identifier">check</span> <span class="special">(</span><span class="keyword">true</span> <span class="special">&amp;&amp;</span> <span class="keyword">true</span><span class="special">)</span> <span class="identifier">has</span> <span class="identifier">passed</span>
  393. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">13</span><span class="special">:</span> <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_logical_not_allowed"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">183u</span><span class="identifier">s</span>
  394. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">20</span><span class="special">:</span> <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_ternary"</span>
  395. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">26</span><span class="special">:</span> <span class="identifier">info</span><span class="special">:</span> <span class="identifier">check</span> <span class="special">(</span><span class="identifier">a</span> <span class="special">+</span> <span class="number">1</span> <span class="special">==</span> <span class="identifier">b</span> <span class="special">?</span> <span class="keyword">true</span> <span class="special">:</span> <span class="keyword">false</span><span class="special">)</span> <span class="identifier">has</span> <span class="identifier">passed</span>
  396. <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">20</span><span class="special">:</span> <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_ternary"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">123u</span><span class="identifier">s</span>
  397. <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_macro_workaround"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">547u</span><span class="identifier">s</span>
  398. <span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span>
  399. </pre>
  400. </td></tr></tbody>
  401. </table></div>
  402. </div>
  403. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  404. <td align="left"></td>
  405. <td align="right"><div class="copyright-footer">Copyright &#169; 2001-2019 Boost.Test
  406. contributors<p>
  407. Distributed under the Boost Software License, Version 1.0. (See accompanying
  408. file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
  409. </p>
  410. </div></td>
  411. </tr></table>
  412. <hr>
  413. <div class="spirit-nav">
  414. <a accesskey="p" href="tools_assertion_severity_level.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../testing_tools.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="reports.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
  415. </div>
  416. </body>
  417. </html>