File: index.html

package info (click to toggle)
boost 1.34.1-14
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 116,412 kB
  • ctags: 259,566
  • sloc: cpp: 642,395; xml: 56,450; python: 17,612; ansic: 14,520; sh: 2,265; yacc: 858; perl: 481; makefile: 478; lex: 94; sql: 74; csh: 6
file content (170 lines) | stat: -rw-r--r-- 10,989 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>The Test Tools</TITLE>
<LINK rel="stylesheet" type="text/css" href="../../style/btl.css" media="screen">
<LINK rel="stylesheet" type="text/css" href="../../style/btl-print.css" media="print">
<META http-equiv="Content-Language" content="en-us">
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY> 
<DIV class="header"> <A href="../../index.html">Boost.Test</A> &gt; <A href="../index.html">Components</A> &gt; <SPAN class="current_article">The
    Test Tools</SPAN> </DIV> 
<DIV class="body"> <IMG src="../../btl1.gif" width="252" height="43" alt="Boost Test logo"> 
  <H1>Boost Test Library: The Test Tools</H1> 
  <P class="page-toc"> <A href="#Introduction">Introduction</A><BR> 
    <A href="reference/index.html">Reference</A><BR> 
  <A href="floating_point_comparison.html">Floating point comparison algorithms</A><BR>
  <A href="custom_predicate_support.html">Output testing tool<BR>
  Custom predicate support </A><BR>
    <A href="#Implementation">Implementation</A><BR> 
    <A href="#Examples">Examples and tests</A><BR> 
  </P> 
  <H2><A name="Introduction">Introduction</A></H2> 
  <P class="first-line-indented"> Boost Test Library's Test Tools component supply
    a toolbox of instruments to ease a creation and a maintenance of test programs
    and provide a uniform error reporting mechanism. The toolbox supplied in
    most part in a form of macro and function declarations. While the functions
    can be called directly, the usual way to use Test Tools is via convenience
    macros. All macros arguments are calculated once, so it's safe to pass complex
    expressions in their place. All tools automatically supply an error location:
    a file name and a line number. Boost Test Library's Test Tools are intended
    for unit test code rather than library or production code, where throwing
    exceptions, using assert(), <A href="../../../../../libs/concept_check/index.html">boost::concept_check</A> or <A href="../../../../../libs/static_assert/static_assert.htm">BOOST_STATIC_ASSERT</A>()
    may be more suitable ways to detect and report errors. For list of all supplied
    Test Tools and usage examples see the <A href="reference/index.html">reference</A>.</P>
  <H5>Test Tools flavours</H5>
  <P class="first-line-indented">All the tools supplied (with one exclusion)
    in three flavours(levels): WARN, CHECK and REQUIRE (for example BOOST_WARN_EQUAL,
    BOOST_CHECK_EQUAL, BOOST_REQUIRE_EQUAL). If an assertion designated by the
    tool passes, confirmation message could be printed in log output (note: to
    manage what messages appear in the test log stream set the proper log level).
    If an assertion designated by the tool failed, depending on the level following
    will happened (in some cases log message could be slightly different to reflect
    failed tool specifics):</P>
      <TABLE border="0" cellpadding="10" cellspacing="0">
        <TR>
          <TH style="border-bottom: solid 2px black; border-right: solid 1px black;">Level</TH>
      <TH style="border-bottom: solid 2px black; border-right: solid 1px black;">Output
        log content </TH>
      <TH style="border-bottom: solid 2px black; border-right: solid 1px black;">Errors
        counter </TH>
          <TH style="border-bottom: solid 2px black">Test execution </TH>
        </TR>
        <TR>
          <TD style="border-right: solid 1px black;">WARN</TD>
      <TD style="border-right: solid 1px black;">warning in &lt;test case name&gt;:
          condition &lt;assertion description&gt; is not satisfied</TD>
          <TD style="border-right: solid 1px black;">not affected</TD>
          <TD>continues</TD>
        </TR>
        <TR>
          <TD style="border-right: solid 1px black;">CHECK</TD>
          <TD style="border-right: solid 1px black;">error in &lt;test case name&gt;:
          test &lt;assertion description&gt; failed</TD>
          <TD style="border-right: solid 1px black;">increased</TD>
          <TD>continues</TD>
        </TR>
        <TR>
          <TD style="border-right: solid 1px black;">REQUIRE</TD>
          <TD style="border-right: solid 1px black;">fatal error in &lt;test case
          name&gt;: critical test &lt;assertion description&gt; failed</TD>
          <TD style="border-right: solid 1px black;">increased</TD>
          <TD>aborts</TD>
        </TR>
  </TABLE>
  <P class="first-line-indented">Regularly you should use CHECK level tools to
    implement your assertions.You could use WARN level tools to validate aspects
    less important then correctness: performance, portability, usability etc.
    You should use REQUIRE level tools only if continuation of the test case
    doesn't make sense if this assertions fails.</P>
  <H5>Output testing tool </H5>
  <P class="first-line-indented">In addition to the checking tools toolbox, the
    Test Tools also contains class ostream_test_stream. This is a class designed
    to significantly simplify correctness testing of the ostream based output
    procedures. Detailed description of interface and example usage you
    could see on the <A href="output_test_stream.html">ostream_test_stream</A> page.</P>
  <H5>Logging tool arguments </H5>
  <P class="first-line-indented">Most of test tools direct values of their arguments
    to the output stream in some form of log statement. If arguments type does
    not support operator&lt;&lt;(std::ostream&amp;,ArgumentType const&amp;) interface
    you will get a compilation error. You could either implement above interface
    or prohibit the Test Tools from logging argument values for specified type.
    To do so use following statement on file level before first test case that
  includes statement failing to compile:</P> 
  <P class="first-line-indented"><SPAN class="new-term">BOOST_TEST_DONT_PRINT_LOG_VALUE</SPAN>(
    ArgumentType ).</P> 
  <H5>Logging floating point numbers</H5>
  <P class="first-line-indented">It may appear that floating-point numbers are
    displayed by Boost.Test with an excessive number of decimal digits. However
    the number of digits shown is chosen to avoid apparently nonsensical displays
    like [1.00000 != 1.00000] when comparing exactly unity against a value which
    is increased by just one least significant binary digit using the default
    precision for float of just 6 decimal digits, given by std::numeric_limits&lt;float&gt;::digits10.
    The function used for the number of decimal digits displayed is that proposed
    for a future C++ Standard, <A href="http://www2.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1822.pdf">A
    Proposal to add a max significant decimal digits value</A>, to be called
    numeric_limits::max_digits10();. For 32-bit floats, 9 decimal digits are
    needed to ensure a single bit change produces a different decimal digit string.</P>
  <P class="first-line-indented">So a much more helpful display using 9 decimal
    digits is thus: [1.00000000 != 1.00000012] showing that the two values are
    in fact different.</P>
  <P class="first-line-indented">For IEEE754 32-bit float values - 9 decimal
    digits are shown. For 64-bit IEEE754 double - 17 decimal digits.<BR>
    For IEEE754 extended long double using 80-bit - 21 decimal digits. For
    IEEE754 quadruple long double 128-bit, and Sparc extended long double 128-bit
    - 36 decimal digits. For floating-point types, a convenient formula to calculate
    max_digits10 is:<BR>
  &nbsp; 2 + std::numeric_limits&lt;FPT&gt;::digits * 3010/10000;</P>
  <P class="first-line-indented">Note that a user defined floating point type
    UDFPT must define numeric_limits&lt;UDFPT&gt;::is_specialized
    = true and provide an appropriate value for std::numeric_limits&lt;UDFPT&gt;::digits,
    the number of bits used for the significand or mantissa. 
    For example, for the Sparc extended long double 128, 113 bits are used
    for the significand (one of which is implicit). </P>
  <H5>Custom predicate support</H5>
  <P class="first-line-indented">Even though supplied test tools cover wide range
    of possible checks and provide detailed report on cause of error in some
    cases you may want to implement and use custom predicate that perform complex
    check and produce intelligent report on failure. To satisfy this need the
    Test Tools implement <A href="custom_predicate_support.html">custom predicate
    support</A>.</P> 
  <H2><A name="Implementation">Implementation</A></H2> 
  <P class="first-line-indented">The Test Tools are implemented in three modules:
    two header files and one source file. </P> 
  <H4><A href="../../../../../boost/test/test_tools.hpp">boost/test/test_tools.hpp</A>:</H4> 
  <P class="first-line-indented">contains definition for the convenience macros,
    some template based Test Tools implementation functions and class ostream_test_stream.</P> 
  <H4><A href="../../../../../boost/test/floating_point_comparison.hpp">boost/test/floating_point_comparison.hpp</A>:</H4> 
  <P class="first-line-indented">contains implementation for the floating point
    comparison algorithms, used by floating point comparison tools. They
    also could be used directly.</P>
  <H4><A href="../../../src/test_tools.cpp">libs/test/test_tools.cpp</A>:</H4> 
  <P class="first-line-indented">contains definition for the most Test Tools
    implementation functions and class ostream_test_stream implementation.</P> 
  <P class="first-line-indented">Since this component is not intended to be used
    standalone, there are no special compilation instruction for it.</P>
  <P class="first-line-indented">The Test Tools are implemented in namespace
    boost::test_tools. But in majority of the cases you don't need to know about
    that, since the tool are used through convinience macros that fully qualify
    implementation functions access.</P>
  <H2><A name="Examples">Examples and Tests</A></H2> 
  <P class="indented"><A href="../../tests/test_tools_test.html">test_tools_test</A><BR>
    <A href="../../tests/output_test_stream_test.html">output_test_stream_test</A><BR> 
    <A href="../../tests/boost_check_equal_str.html">boost_check_equal_str</A><BR> 
    <A href="../../tests/test_fp_comparisons.html">test_fp_comparisons</A> </P>
</DIV> 
<DIV class="footer"> 
  <DIV class="footer-body">
    <P> &copy; <A name="Copyright">Copyright</A> <A href="mailto:boost-test%20at%20emailaccount%20dot%20com%20%28please%20unobscure%29">Gennadiy
        Rozental</A> 2001-2006. <BR> 
      Distributed under the Boost Software License, Version 1.0. (See accompanying
      file <A href="../../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or copy
      at <A href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</A>)</P> 
    <P>Revised:
      <!-- #BeginDate format:Sw1 -->23 February, 2006<!-- #EndDate -->
    </P> 
  </DIV> 
</DIV> 
</BODY>
</HTML>