3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Collections comparison</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="../extended_comparison.html" title="Extended comparisons support">
9 <link rel="prev" href="strings.html" title="Strings and C-strings comparison">
10 <link rel="next" href="bitwise.html" title="Bitwise comparison">
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>
22 <div class="spirit-nav">
23 <a accesskey="p" href="strings.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../extended_comparison.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="bitwise.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="titlepage"><div><div><h4 class="title">
27 <a name="boost_test.testing_tools.extended_comparison.collections"></a><a class="link" href="collections.html" title="Collections comparison">Collections
29 </h4></div></div></div>
31 Instead of comparing a single value against another, there is often a need
32 for comparing <span class="emphasis"><em>collections</em></span> of values. A collection
33 and indirectly the values it contains may be considered in several ways:
35 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
37 collection as a <span class="emphasis"><em>sequence of values</em></span>: this is the
38 case for instance when <code class="computeroutput"><span class="identifier">N</span></code>
39 values are stored in a container. Containers in this case are used
40 for storing several values, and iterating over the containers yields
41 sequences that can be compared <span class="bold"><strong>element-wise</strong></span>.
42 The iteration should be in an order that is <span class="emphasis"><em>a priori</em></span>
43 known <a href="#ftn.boost_test.testing_tools.extended_comparison.collections.f0" class="footnote" name="boost_test.testing_tools.extended_comparison.collections.f0"><sup class="footnote">[10]</sup></a>, for being able to compare the sequences. The values in
44 the collection are independent each other, and subsets can be compared
48 collection as an <span class="emphasis"><em>ensemble</em></span>: this is the case where
49 the elements of the collection define an <span class="emphasis"><em>entity</em></span>,
50 and no element can be dissociated from the others. An example would
51 be a collection of letters for a specific word in the natural language;
52 in this settings any of the character in the word/collection depends
53 <span class="emphasis"><em>semantically</em></span> on the other and it is not possible
54 to take a subset of it without breaking the meaning of the word. Another
55 example would be a vector of size <code class="computeroutput"><span class="identifier">N</span></code>
56 representing a point in a <code class="computeroutput"><span class="identifier">N</span></code>
57 dimensional space, compared to another point with the relation "<code class="computeroutput"><span class="special"><</span></code>": the comparison is application
58 specific and a possible comparison would be the lexicographical ordering
59 <a href="#ftn.boost_test.testing_tools.extended_comparison.collections.f1" class="footnote" name="boost_test.testing_tools.extended_comparison.collections.f1"><sup class="footnote">[11]</sup></a>.
63 The following observations can be done:
65 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
67 the methods employed for comparing collections should be chosen adequately
68 with the meaning of the collection,
71 comparing sequences <span class="bold"><strong>element-wise</strong></span> often
72 involves writing loops in the test body, and if a dedicated tool is
73 already in place the test body would gain in clarity and expressiveness
74 (including the report in case of failure),
77 some comparison methods such as the lexicographical one, have good
78 general behavior (e.g. total ordering, defined for collections of different
79 size), but are sometimes inappropriate.
83 <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> provides specific tools
84 for comparing collections:
86 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
88 using the <span class="emphasis"><em>native</em></span> <a href="#ftn.boost_test.testing_tools.extended_comparison.collections.f2" class="footnote" name="boost_test.testing_tools.extended_comparison.collections.f2"><sup class="footnote">[12]</sup></a> operator of the container of the collection, which is mentioned
89 as the <a class="link" href="collections.html#ref_boost_test_coll_default_comp"><span class="emphasis"><em>default
90 behavior</em></span></a>.
93 using <a class="link" href="collections.html#boost_test_coll_perelement">element-wise</a>
94 comparison for which extended failure diagnostic is provided,
97 and using <a class="link" href="collections.html#boost_test_coll_default_lex">lexicographical</a>
98 comparison for which extended failure diagnostic is provided,
102 More details about the concept of <span class="emphasis"><em>collection</em></span> in the
103 <span class="emphasis"><em>Unit Test Framework</em></span> is given <a class="link" href="collections.html#what_is_a_collection"><span class="emphasis"><em>here</em></span></a>.
105 <a name="ref_boost_test_coll_default_comp"></a><h4>
106 <a name="boost_test.testing_tools.extended_comparison.collections.h0"></a>
107 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.default_comparison"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.default_comparison">Default
111 The default comparison dispatches to the existing overloaded comparison
112 operator. The <span class="emphasis"><em>Unit Test Framework</em></span> distinguishes two
115 <div class="orderedlist"><ol class="orderedlist" type="1">
116 <li class="listitem">
117 none of the comparison operand is a C-Array, in which case we use the
118 <a class="link" href="collections.html#ref_boost_test_coll_default_comp_container">container
121 <li class="listitem">
122 one of the comparison operand is a C-array, in which case we <a class="link" href="collections.html#ref_boost_test_coll_c_arrays">mimic <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code></a>
126 <a name="ref_boost_test_coll_default_comp_container"></a><h5>
127 <a name="boost_test.testing_tools.extended_comparison.collections.h1"></a>
128 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.container_default_behavior"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.container_default_behavior">Container
132 Given two containers <code class="computeroutput"><span class="identifier">c_a</span></code>
133 and <code class="computeroutput"><span class="identifier">c_b</span></code> that are not C-arrays,
135 <pre class="programlisting"><span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c_a</span> <span class="identifier">op</span> <span class="identifier">c_b</span><span class="special">)</span>
138 is equivalent, in terms of test success, to
140 <pre class="programlisting"><span class="keyword">auto</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">c_a</span> <span class="identifier">op</span> <span class="identifier">c_b</span><span class="special">;</span>
141 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">result</span><span class="special">);</span>
144 In the example below, <code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code> is not defined for <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code>
145 of different types, and the program would fail to compile if the corresponding
146 lines were uncommented (<code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code>
147 uses lexicographical comparison by default).
149 <div class="note"><table border="0" summary="Note">
151 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
152 <th align="left">Note</th>
154 <tr><td align="left" valign="top"><p>
155 In the case of default comparison, there is no additional diagnostic
156 provided by the <span class="emphasis"><em>Unit Test Framework</em></span>. See the section
157 <a class="link" href="collections.html#ref_boost_test_coll_special_macro"><code class="computeroutput"><span class="identifier">BOOST_TEST_SPECIALIZED_COLLECTION_COMPARE</span></code></a>
162 <a name="boost_test.testing_tools.extended_comparison.collections.h2"></a>
163 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.example_descr"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.example_descr">Example:
164 BOOST_TEST containers comparison default</a>
166 <div class="informaltable"><table class="table">
167 <colgroup><col></colgroup>
174 <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_sequence</span>
175 <span class="preprocessor">#include</span> <span class="special"><</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">></span>
176 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span>
178 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_collections_vectors</span> <span class="special">)</span>
179 <span class="special">{</span>
180 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</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="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">},</span> <span class="identifier">c</span><span class="special">{</span><span class="number">1</span><span class="special">,</span><span class="number">5</span><span class="special">,</span><span class="number">3</span><span class="special">,</span><span class="number">4</span><span class="special">};</span>
181 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">long</span><span class="special">></span> <span class="identifier">b</span><span class="special">{</span><span class="number">1</span><span class="special">,</span><span class="number">5</span><span class="special">,</span><span class="number">3</span><span class="special">};</span>
183 <span class="comment">// the following does not compile</span>
184 <span class="comment">//BOOST_TEST(a == b);</span>
185 <span class="comment">//BOOST_TEST(a <= b);</span>
187 <span class="comment">// stl defaults to lexicographical comparison</span>
188 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special"><</span> <span class="identifier">c</span><span class="special">);</span>
189 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">>=</span> <span class="identifier">c</span><span class="special">);</span>
190 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">!=</span> <span class="identifier">c</span><span class="special">);</span>
191 <span class="special">}</span>
195 <div class="informaltable"><table class="table">
196 <colgroup><col></colgroup>
203 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="special">./</span><span class="identifier">boost_test_container_default</span> <span class="special">--</span><span class="identifier">log_level</span><span class="special">=</span><span class="identifier">all</span>
204 <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
205 <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_sequence"</span>
206 <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_collections_vectors"</span>
207 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">23</span><span class="special">):</span> <span class="identifier">info</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special"><</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">passed</span>
208 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">24</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_collections_vectors"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">>=</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">failed</span>
209 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">25</span><span class="special">):</span> <span class="identifier">info</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">!=</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">passed</span>
210 <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_collections_vectors"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">208u</span><span class="identifier">s</span>
211 <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_sequence"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">286u</span><span class="identifier">s</span>
213 <span class="special">***</span> <span class="number">1</span> <span class="identifier">failure</span> <span class="identifier">is</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_container_default"</span>
217 <a name="ref_boost_test_coll_c_arrays"></a><h5>
218 <a name="boost_test.testing_tools.extended_comparison.collections.h3"></a>
219 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.c_arrays_default_behavior"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.c_arrays_default_behavior">C-arrays
223 As soon as one of the operands is a C-array, there is no <span class="emphasis"><em>default
224 behavior</em></span> the <span class="emphasis"><em>Unit Test Framework</em></span> can dispatch
225 to. This is why in that case, the comparison mimics the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code>
229 <a name="boost_test.testing_tools.extended_comparison.collections.h4"></a>
230 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.example_descr0"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.example_descr0">Example:
231 BOOST_TEST C-arrays</a>
233 <div class="informaltable"><table class="table">
234 <colgroup><col></colgroup>
241 <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_containers_c_arrays</span>
242 <span class="preprocessor">#include</span> <span class="special"><</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">></span>
243 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span>
245 <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>
247 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_collections_on_c_arrays</span> <span class="special">)</span>
248 <span class="special">{</span>
249 <span class="keyword">int</span> <span class="identifier">a</span><span class="special">[]</span> <span class="special">=</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="number">3</span><span class="special">};</span>
250 <span class="keyword">int</span> <span class="identifier">b</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">};</span>
251 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">long</span><span class="special">></span> <span class="identifier">c</span><span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">4</span><span class="special">};</span>
252 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">==</span> <span class="identifier">a</span><span class="special">);</span> <span class="comment">// element-wise compare</span>
253 <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="comment">// element-wise compare</span>
254 <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>
255 <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="comment">// lexicographical compare</span>
256 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">b</span> <span class="special"><</span> <span class="identifier">c</span><span class="special">);</span> <span class="comment">// lexicographical compare</span>
257 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c</span> <span class="special"><</span> <span class="identifier">a</span><span class="special">);</span> <span class="comment">// lexicographical compare</span>
258 <span class="special">}</span>
262 <div class="informaltable"><table class="table">
263 <colgroup><col></colgroup>
270 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="special">./</span><span class="identifier">boost_test_containers_c_arrays</span> <span class="special">--</span><span class="identifier">log_level</span><span class="special">=</span><span class="identifier">all</span>
271 <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
272 <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_containers_c_arrays"</span>
273 <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">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_collections_on_c_arrays"</span>
274 <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">info</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">==</span> <span class="identifier">a</span> <span class="identifier">has</span> <span class="identifier">passed</span>
275 <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_collections_on_c_arrays"</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>
276 <span class="identifier">Collections</span> <span class="identifier">size</span> <span class="identifier">mismatch</span><span class="special">:</span> <span class="number">3</span> <span class="special">!=</span> <span class="number">4</span>
277 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">22</span><span class="special">:</span> <span class="identifier">info</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">passed</span>
278 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">23</span><span class="special">:</span> <span class="identifier">info</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">passed</span>
279 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">24</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_collections_on_c_arrays"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">b</span> <span class="special"><</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">failed</span><span class="special">.</span>
280 <span class="identifier">Collections</span> <span class="identifier">appear</span> <span class="identifier">to</span> <span class="identifier">be</span> <span class="identifier">equal</span><span class="special">.</span>
281 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">25</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_collections_on_c_arrays"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">c</span> <span class="special"><</span> <span class="identifier">a</span> <span class="identifier">has</span> <span class="identifier">failed</span><span class="special">.</span>
282 <span class="identifier">Failure</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">1</span><span class="special">:</span> <span class="number">5</span> <span class="special">>=</span> <span class="number">2.</span>
283 <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">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_collections_on_c_arrays"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">204u</span><span class="identifier">s</span>
284 <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_containers_c_arrays"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">240u</span><span class="identifier">s</span>
286 <span class="special">***</span> <span class="number">3</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_containers_c_arrays"</span>
290 <a name="boost_test_coll_perelement"></a><h4>
291 <a name="boost_test.testing_tools.extended_comparison.collections.h5"></a>
292 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.element_wise_comparison"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.element_wise_comparison">Element-wise
296 By specifying the manipulator <code class="computeroutput"><a class="link" href="../../../boost/test_tools/per_element.html" title="Struct per_element">boost::test_tools::per_element</a></code>,
297 the comparison of the elements of the containers are performed <span class="emphasis"><em>element-wise</em></span>,
298 in the order given by the forward iterators of the containers. This is
299 a comparison on the <span class="emphasis"><em>sequences</em></span> of elements generated
300 by the containers, for which the <span class="emphasis"><em>Unit Test Framework</em></span>
301 provides advanced diagnostic.
304 In more details, let <code class="computeroutput"><span class="identifier">c_a</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">a_1</span><span class="special">,...</span> <span class="identifier">a_n</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">c_b</span>
305 <span class="special">=</span> <span class="special">(</span><span class="identifier">b_1</span><span class="special">,...</span> <span class="identifier">b_n</span><span class="special">)</span></code>
306 be two sequences of same length, but not necessarily of same type. Those
307 sequences correspond to the content of the respective containers, in the
308 order given by their iterator. Let <code class="computeroutput"><span class="identifier">op</span></code>
309 be one of the <a class="link" href="../boost_test_universal_macro.html#boost_test_statement_overloads">binary comparison
312 <pre class="programlisting"><span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c_a</span> <span class="identifier">op</span> <span class="identifier">c_b</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">()</span> <span class="special">);</span>
317 <pre class="programlisting"><span class="keyword">if</span><span class="special">(</span><span class="identifier">c_a</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">c_b</span><span class="special">.</span><span class="identifier">size</span><span class="special">())</span>
318 <span class="special">{</span>
319 <span class="keyword">for</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">c_a</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="identifier">i</span><span class="special">++)</span>
320 <span class="special">{</span>
321 <a class="link" href="../../utf_reference/testout_reference/test_output_macro_context.html" title="BOOST_TEST_CONTEXT"><code class="computeroutput"><span class="identifier">BOOST_TEST_CONTEXT</span></code></a><span class="special">(</span><span class="string">"index "</span> <span class="special"><<</span> <span class="identifier">i</span><span class="special">)</span>
322 <span class="special">{</span>
323 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a_i</span> <span class="identifier">op</span> <span class="identifier">b_i</span><span class="special">);</span>
324 <span class="special">}</span>
325 <span class="special">}</span>
326 <span class="special">}</span>
327 <span class="keyword">else</span>
328 <span class="special">{</span>
329 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c_a</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">c_b</span><span class="special">.</span><span class="identifier">size</span><span class="special">());</span>
330 <span class="special">}</span>
332 <div class="warning"><table border="0" summary="Warning">
334 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../doc/src/images/warning.png"></td>
335 <th align="left">Warning</th>
337 <tr><td align="left" valign="top"><p>
338 this is fundamentally different from using the containers' default comparison
339 operators (default behavior).
342 <div class="warning"><table border="0" summary="Warning">
344 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../doc/src/images/warning.png"></td>
345 <th align="left">Warning</th>
347 <tr><td align="left" valign="top">
349 this is not an order relationship on containers. As a side effect, it
352 <pre class="programlisting"><span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c_a</span> <span class="special">==</span> <span class="identifier">c_b</span><span class="special">)</span></pre>
356 <pre class="programlisting"><span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c_a</span> <span class="special">!=</span> <span class="identifier">c_b</span><span class="special">)</span></pre>
358 failing at the same time
363 Sequences are compared using the specified operator <code class="computeroutput"><span class="identifier">op</span></code>,
364 evaluated on the left and right elements of the respective sequences. The
365 order of the compared elements is given by the iterators of the respective
366 containers <a href="#ftn.boost_test.testing_tools.extended_comparison.collections.f3" class="footnote" name="boost_test.testing_tools.extended_comparison.collections.f3"><sup class="footnote">[13]</sup></a>. In case of failure, the indices of the elements failing <code class="computeroutput"><span class="identifier">op</span></code> are returned.
369 <a name="boost_test.testing_tools.extended_comparison.collections.h6"></a>
370 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.example_descr1"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.example_descr1">Example:
371 BOOST_TEST sequence comparison</a>
373 <div class="informaltable"><table class="table">
374 <colgroup><col></colgroup>
381 <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_sequence_per_element</span>
382 <span class="preprocessor">#include</span> <span class="special"><</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">></span>
383 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span>
384 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">list</span><span class="special">></span>
385 <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>
387 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_sequence_per_element</span> <span class="special">)</span>
388 <span class="special">{</span>
389 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</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="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">};</span>
390 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">long</span><span class="special">></span> <span class="identifier">b</span><span class="special">{</span><span class="number">1</span><span class="special">,</span><span class="number">5</span><span class="special">,</span><span class="number">3</span><span class="special">};</span>
391 <span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special"><</span><span class="keyword">short</span><span class="special">></span> <span class="identifier">c</span><span class="special">{</span><span class="number">1</span><span class="special">,</span><span class="number">5</span><span class="special">,</span><span class="number">3</span><span class="special">,</span><span class="number">4</span><span class="special">};</span>
393 <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">per_element</span><span class="special">());</span> <span class="comment">// nok: a[1] != b[1]</span>
395 <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">per_element</span><span class="special">());</span> <span class="comment">// nok: a[0] == b[0] ...</span>
396 <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">per_element</span><span class="special">());</span> <span class="comment">// ok</span>
397 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">b</span> <span class="special"><</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">tt</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">());</span> <span class="comment">// nok: size mismatch</span>
398 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">b</span> <span class="special">>=</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">tt</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">());</span> <span class="comment">// nok: size mismatch</span>
399 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">b</span> <span class="special">!=</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">tt</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">());</span> <span class="comment">// nok: size mismatch</span>
400 <span class="special">}</span>
402 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_compare_c_arrays_element_wise</span> <span class="special">)</span>
403 <span class="special">{</span>
404 <span class="keyword">int</span> <span class="identifier">a</span><span class="special">[]</span> <span class="special">=</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="number">3</span><span class="special">};</span>
405 <span class="keyword">int</span> <span class="identifier">b</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">3</span><span class="special">};</span>
406 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">long</span><span class="special">></span> <span class="identifier">c</span><span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">3</span><span class="special">};</span>
407 <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">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">());</span>
408 <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">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">());</span>
409 <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">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">());</span>
410 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">b</span> <span class="special"><</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">());</span>
411 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c</span> <span class="special"><</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">());</span>
412 <span class="special">}</span>
416 <div class="informaltable"><table class="table">
417 <colgroup><col></colgroup>
424 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="special">./</span><span class="identifier">boost_test_sequence_per_element</span>
425 <span class="identifier">Running</span> <span class="number">2</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
426 <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_sequence_per_element"</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>
427 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">1</span><span class="special">:</span> <span class="number">2</span> <span class="special">!=</span> <span class="number">5.</span>
428 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">23</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_sequence_per_element"</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>
429 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">0</span><span class="special">:</span> <span class="number">1</span> <span class="special">==</span> <span class="number">1.</span>
430 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">2</span><span class="special">:</span> <span class="number">3</span> <span class="special">==</span> <span class="number">3.</span>
431 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">25</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_sequence_per_element"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">b</span> <span class="special"><</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">failed</span>
432 <span class="identifier">Collections</span> <span class="identifier">size</span> <span class="identifier">mismatch</span><span class="special">:</span> <span class="number">3</span> <span class="special">!=</span> <span class="number">4</span>
433 <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">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_sequence_per_element"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">b</span> <span class="special">>=</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">failed</span>
434 <span class="identifier">Collections</span> <span class="identifier">size</span> <span class="identifier">mismatch</span><span class="special">:</span> <span class="number">3</span> <span class="special">!=</span> <span class="number">4</span>
435 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">27</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_sequence_per_element"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">b</span> <span class="special">!=</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">failed</span>
436 <span class="identifier">Collections</span> <span class="identifier">size</span> <span class="identifier">mismatch</span><span class="special">:</span> <span class="number">3</span> <span class="special">!=</span> <span class="number">4</span>
437 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">35</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_compare_c_arrays_element_wise"</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>
438 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">1</span><span class="special">:</span> <span class="number">2</span> <span class="special">!=</span> <span class="number">5.</span>
439 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">36</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_compare_c_arrays_element_wise"</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>
440 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">0</span><span class="special">:</span> <span class="number">1</span> <span class="special">==</span> <span class="number">1.</span>
441 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">2</span><span class="special">:</span> <span class="number">3</span> <span class="special">==</span> <span class="number">3.</span>
442 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">37</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_compare_c_arrays_element_wise"</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>
443 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">0</span><span class="special">:</span> <span class="number">1</span> <span class="special">>=</span> <span class="number">1.</span>
444 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">2</span><span class="special">:</span> <span class="number">3</span> <span class="special">>=</span> <span class="number">3.</span>
445 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">38</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_compare_c_arrays_element_wise"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">b</span> <span class="special"><</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">failed</span>
446 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">0</span><span class="special">:</span> <span class="number">1</span> <span class="special">>=</span> <span class="number">1.</span>
447 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">1</span><span class="special">:</span> <span class="number">5</span> <span class="special">>=</span> <span class="number">5.</span>
448 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">2</span><span class="special">:</span> <span class="number">3</span> <span class="special">>=</span> <span class="number">3.</span>
449 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">39</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_compare_c_arrays_element_wise"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">c</span> <span class="special"><</span> <span class="identifier">a</span> <span class="identifier">has</span> <span class="identifier">failed</span>
450 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">0</span><span class="special">:</span> <span class="number">1</span> <span class="special">>=</span> <span class="number">1.</span>
451 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">1</span><span class="special">:</span> <span class="number">5</span> <span class="special">>=</span> <span class="number">2.</span>
452 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">2</span><span class="special">:</span> <span class="number">3</span> <span class="special">>=</span> <span class="number">3.</span>
454 <span class="special">***</span> <span class="number">10</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_sequence_per_element"</span>
459 <a name="boost_test.testing_tools.extended_comparison.collections.h7"></a>
460 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.requirements"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.requirements">Requirements</a>
463 For the sequences to be comparable element-wise, the following conditions
466 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
467 <li class="listitem">
468 the containers should meet the <a class="link" href="collections.html#what_is_a_collection">sequence</a>
471 <li class="listitem">
472 the containers should yield the same number of elements,
474 <li class="listitem">
475 <code class="computeroutput"><span class="identifier">op</span></code> should be one of
476 the comparison operator <code class="computeroutput"><span class="special">==</span></code>,
477 <code class="computeroutput"><span class="special">!=</span></code>, <code class="computeroutput"><span class="special"><</span></code>,
478 <code class="computeroutput"><span class="special"><=</span></code>, <code class="computeroutput"><span class="special">></span></code>,
479 <code class="computeroutput"><span class="special">>=</span></code>
481 <li class="listitem">
482 the <code class="computeroutput"><span class="identifier">a_i</span> <span class="identifier">op</span>
483 <span class="identifier">b_i</span></code> should be defined, where
484 the type of <code class="computeroutput"><span class="identifier">a_i</span></code> and
485 <code class="computeroutput"><span class="identifier">b_i</span></code> are the type returned
486 by the dereference operator of the respective collections.
489 <div class="caution"><table border="0" summary="Caution">
491 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../doc/src/images/caution.png"></td>
492 <th align="left">Caution</th>
494 <tr><td align="left" valign="top">
496 the resulting type of "<code class="computeroutput"><span class="identifier">c_a</span>
497 <span class="special">==</span> <span class="identifier">c_b</span></code>"
498 is an <code class="computeroutput"><a class="link" href="../../../boost/test_tools/assertion_result.html" title="Class assertion_result">assertion_result</a></code>:
499 it is not possible to compose more that one comparison on the <code class="computeroutput"><span class="identifier">BOOST_TEST</span></code> statement:
501 <pre class="programlisting"><span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c_a</span> <span class="special">==</span> <span class="identifier">c_b</span> <span class="special">==</span> <span class="number">42</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">()</span> <span class="special">);</span> <span class="comment">// does not compile</span>
505 <a name="boost_test_coll_default_lex"></a><h4>
506 <a name="boost_test.testing_tools.extended_comparison.collections.h8"></a>
507 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.lexicographic_comparison"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.lexicographic_comparison">Lexicographic
511 By specifying the manipulator <code class="computeroutput"><a class="link" href="../../../boost/test_tools/lexicographic.html" title="Struct lexicographic">boost::test_tools::lexicographic</a></code>,
512 the containers are compared using the <span class="emphasis"><em>lexicographical</em></span>
513 order and for which the <span class="emphasis"><em>Unit Test Framework</em></span> provides
514 additional diagnostic in case of failure.
516 <pre class="programlisting"><span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c_a</span> <span class="identifier">op</span> <span class="identifier">c_b</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">lexicographic</span><span class="special">()</span> <span class="special">);</span>
519 The comparison is performed in the order given by forward iterators of
522 <div class="tip"><table border="0" summary="Tip">
524 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../../doc/src/images/tip.png"></td>
525 <th align="left">Tip</th>
527 <tr><td align="left" valign="top"><p>
528 lexicographic comparison yields a total order on the containers: the
529 statements <code class="computeroutput"><span class="identifier">c_a</span> <span class="special"><</span>
530 <span class="identifier">c_b</span></code> and <code class="computeroutput"><span class="identifier">c_b</span>
531 <span class="special"><=</span> <span class="identifier">c_a</span></code>
532 are mutually exclusive.
535 <div class="note"><table border="0" summary="Note">
537 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
538 <th align="left">Note</th>
540 <tr><td align="left" valign="top"><p>
541 The equality <code class="computeroutput"><span class="special">==</span></code> and inequality
542 <code class="computeroutput"><span class="special">!=</span></code> are not available for
543 this type of comparison.
547 <a name="boost_test.testing_tools.extended_comparison.collections.h9"></a>
548 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.example_descr2"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.example_descr2">Example:
549 BOOST_TEST container comparison using lexicographical order</a>
551 <div class="informaltable"><table class="table">
552 <colgroup><col></colgroup>
559 <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_container_lex</span>
560 <span class="preprocessor">#include</span> <span class="special"><</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">></span>
561 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span>
563 <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>
565 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_collections_vectors_lex</span> <span class="special">)</span>
566 <span class="special">{</span>
567 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</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="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">},</span> <span class="identifier">b</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="number">2</span><span class="special">},</span> <span class="identifier">c</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="number">3</span><span class="special">,</span><span class="number">4</span><span class="special">};</span>
569 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special"><</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">tt</span><span class="special">::</span><span class="identifier">lexicographic</span><span class="special">());</span>
570 <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">lexicographic</span><span class="special">());</span>
571 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special"><</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">tt</span><span class="special">::</span><span class="identifier">lexicographic</span><span class="special">());</span>
572 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special">>=</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">tt</span><span class="special">::</span><span class="identifier">lexicographic</span><span class="special">());</span>
574 <span class="comment">//BOOST_TEST(a == c, tt::lexicographic()); // does not compile</span>
575 <span class="comment">//BOOST_TEST(a != c, tt::lexicographic()); // does not compile</span>
576 <span class="special">}</span>
578 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_compare_c_arrays_lexicographic</span> <span class="special">)</span>
579 <span class="special">{</span>
580 <span class="keyword">int</span> <span class="identifier">a</span><span class="special">[]</span> <span class="special">=</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="number">3</span><span class="special">};</span>
581 <span class="keyword">int</span> <span class="identifier">b</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">3</span><span class="special">};</span>
582 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">long</span><span class="special">></span> <span class="identifier">c</span><span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">3</span><span class="special">};</span>
583 <span class="comment">// BOOST_TEST(a == b, boost::test_tools::lexicographic()); // does not compile</span>
584 <span class="comment">// BOOST_TEST(a != b, boost::test_tools::lexicographic()); // does not compile</span>
585 <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">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">lexicographic</span><span class="special">());</span>
586 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">b</span> <span class="special"><</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">lexicographic</span><span class="special">());</span>
587 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c</span> <span class="special"><</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">lexicographic</span><span class="special">());</span>
588 <span class="special">}</span>
592 <div class="informaltable"><table class="table">
593 <colgroup><col></colgroup>
600 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="special">./</span><span class="identifier">boost_test_container_lex</span> <span class="special">--</span><span class="identifier">log_level</span><span class="special">=</span><span class="identifier">all</span>
601 <span class="identifier">Running</span> <span class="number">2</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
602 <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_container_lex"</span>
603 <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">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_collections_vectors_lex"</span>
604 <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_collections_vectors_lex"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special"><</span> <span class="identifier">a</span> <span class="identifier">has</span> <span class="identifier">failed</span>
605 <span class="identifier">Collections</span> <span class="identifier">appear</span> <span class="identifier">to</span> <span class="identifier">be</span> <span class="identifier">equal</span><span class="special">.</span>
606 <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_collections_vectors_lex"</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>
607 <span class="identifier">Failure</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">2</span><span class="special">:</span> <span class="number">3</span> <span class="special">>=</span> <span class="number">2.</span>
608 <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">info</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special"><</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">passed</span>
609 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">22</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_collections_vectors_lex"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special">>=</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">failed</span>
610 <span class="identifier">Second</span> <span class="identifier">collection</span> <span class="identifier">has</span> <span class="identifier">extra</span> <span class="identifier">trailing</span> <span class="identifier">elements</span><span class="special">.</span>
611 <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">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_collections_vectors_lex"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">178u</span><span class="identifier">s</span>
612 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">28</span><span class="special">:</span> <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_compare_c_arrays_lexicographic"</span>
613 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">35</span><span class="special">:</span> <span class="identifier">info</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">passed</span>
614 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">36</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_compare_c_arrays_lexicographic"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">b</span> <span class="special"><</span> <span class="identifier">c</span> <span class="identifier">has</span> <span class="identifier">failed</span>
615 <span class="identifier">Collections</span> <span class="identifier">appear</span> <span class="identifier">to</span> <span class="identifier">be</span> <span class="identifier">equal</span><span class="special">.</span>
616 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">37</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_compare_c_arrays_lexicographic"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">c</span> <span class="special"><</span> <span class="identifier">a</span> <span class="identifier">has</span> <span class="identifier">failed</span>
617 <span class="identifier">Failure</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">1</span><span class="special">:</span> <span class="number">5</span> <span class="special">>=</span> <span class="number">2.</span>
618 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">28</span><span class="special">:</span> <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_compare_c_arrays_lexicographic"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">88u</span><span class="identifier">s</span>
619 <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_container_lex"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">323u</span><span class="identifier">s</span>
621 <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_container_lex"</span>
625 <a name="ref_boost_test_coll_special_macro"></a><h4>
626 <a name="boost_test.testing_tools.extended_comparison.collections.h10"></a>
627 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.extended_diagnostic_by_default_f"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.extended_diagnostic_by_default_f">Extended
628 diagnostic by default for specific containers</a>
633 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
634 <li class="listitem">
635 for testing equality, the <code class="computeroutput"><span class="special">==</span></code>
636 relation is either explicit (using <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">per_element</span><span class="special">()</span></code>) or implicit when the container overloads/implements
637 this type of comparison,
639 <li class="listitem">
640 for testing inequality, lexicographical comparison for <code class="computeroutput"><span class="special"><</span></code> (and derived operations) is either
641 explicit (using <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">test_tools</span><span class="special">::</span><span class="identifier">lexicographic</span><span class="special">()</span></code>) or implicit when the container overloads/implements
642 uses this type of comparison.
646 When the default is to using the container implementation, it is not possible
647 to benefit from an extended failure diagnostic. The <span class="emphasis"><em>Unit Test
648 Framework</em></span> provides a mechanism for performing the same comparisons
649 through the <span class="emphasis"><em>Unit Test Framework</em></span> instead of the container
650 operator, through the macro <code class="computeroutput"><span class="identifier">BOOST_TEST_SPECIALIZED_COLLECTION_COMPARE</span></code>
651 that might be used as follow:
654 <a name="boost_test.testing_tools.extended_comparison.collections.h11"></a>
655 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.example_descr3"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.example_descr3">Example:
656 Default <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span></code>
657 to lexicographic with extended diagnostic</a>
659 <div class="informaltable"><table class="table">
660 <colgroup><col></colgroup>
667 <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_container_lex_default</span>
668 <span class="preprocessor">#include</span> <span class="special"><</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">></span>
669 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span>
671 <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>
673 <span class="identifier">BOOST_TEST_SPECIALIZED_COLLECTION_COMPARE</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>)</span>
675 <span class="identifier">BOOST_AUTO_TEST_CASE</span><span class="special">(</span> <span class="identifier">test_collections_vectors_lex</span> <span class="special">)</span>
676 <span class="special">{</span>
677 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</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="number">2</span><span class="special">,</span><span class="number">3</span><span class="special">},</span> <span class="identifier">b</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="number">2</span><span class="special">};</span>
678 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">long</span> <span class="keyword">int</span><span class="special">></span> <span class="identifier">c</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="number">3</span><span class="special">,</span><span class="number">5</span><span class="special">},</span> <span class="identifier">d</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="number">3</span><span class="special">,</span><span class="number">4</span><span class="special">};</span>
680 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">a</span> <span class="special"><</span> <span class="identifier">a</span><span class="special">);</span> <span class="comment">// lexcographic</span>
681 <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="comment">// lexcographic</span>
682 <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="comment">// element-wise</span>
683 <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="comment">// extended diagnostic</span>
684 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c</span> <span class="special"><</span> <span class="identifier">d</span><span class="special">);</span> <span class="comment">// no extended diagnostic</span>
685 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">c</span> <span class="special">==</span> <span class="identifier">d</span><span class="special">);</span> <span class="comment">// no extended diagnostic</span>
686 <span class="special">}</span>
690 <div class="informaltable"><table class="table">
691 <colgroup><col></colgroup>
698 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="special">./</span><span class="identifier">boost_test_container_lex_default</span> <span class="special">--</span><span class="identifier">log_level</span><span class="special">=</span><span class="identifier">all</span>
699 <span class="identifier">Running</span> <span class="number">1</span> <span class="identifier">test</span> <span class="keyword">case</span><span class="special">...</span>
700 <span class="identifier">Entering</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_container_lex_default"</span>
701 <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">Entering</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_collections_vectors_lex"</span>
702 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">22</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_collections_vectors_lex"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">a</span> <span class="special"><</span> <span class="identifier">a</span> <span class="identifier">has</span> <span class="identifier">failed</span><span class="special">.</span>
703 <span class="identifier">Collections</span> <span class="identifier">appear</span> <span class="identifier">to</span> <span class="identifier">be</span> <span class="identifier">equal</span><span class="special">.</span>
704 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">23</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_collections_vectors_lex"</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>
705 <span class="identifier">Failure</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">2</span><span class="special">:</span> <span class="number">3</span> <span class="special">>=</span> <span class="number">2.</span>
706 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">24</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_collections_vectors_lex"</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>
707 <span class="identifier">Mismatch</span> <span class="identifier">at</span> <span class="identifier">position</span> <span class="number">2</span><span class="special">:</span> <span class="number">3</span> <span class="special">!=</span> <span class="number">2.</span>
708 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">25</span><span class="special">:</span> <span class="identifier">info</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">passed</span>
709 <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">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_collections_vectors_lex"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">c</span> <span class="special"><</span> <span class="identifier">d</span> <span class="identifier">has</span> <span class="identifier">failed</span>
710 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">:</span><span class="number">27</span><span class="special">:</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test_collections_vectors_lex"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">c</span> <span class="special">==</span> <span class="identifier">d</span> <span class="identifier">has</span> <span class="identifier">failed</span>
711 <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">Leaving</span> <span class="identifier">test</span> <span class="keyword">case</span> <span class="string">"test_collections_vectors_lex"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">155u</span><span class="identifier">s</span>
712 <span class="identifier">Leaving</span> <span class="identifier">test</span> <span class="identifier">module</span> <span class="string">"boost_test_container_lex_default"</span><span class="special">;</span> <span class="identifier">testing</span> <span class="identifier">time</span><span class="special">:</span> <span class="number">177u</span><span class="identifier">s</span>
714 <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_container_lex_default"</span>
719 <a name="boost_test.testing_tools.extended_comparison.collections.h12"></a>
720 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.requirements0"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.requirements0">Requirements</a>
722 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
723 <li class="listitem">
724 the containers should meet the <a class="link" href="collections.html#what_is_a_collection">sequence</a>
727 <li class="listitem">
728 the containers should be of the exact same type
730 <li class="listitem">
731 <code class="computeroutput"><span class="identifier">op</span></code> should be one of
732 the comparison operator <code class="computeroutput"><span class="special">==</span></code>,
733 <code class="computeroutput"><span class="special">!=</span></code>, <code class="computeroutput"><span class="special"><</span></code>,
734 <code class="computeroutput"><span class="special"><=</span></code>, <code class="computeroutput"><span class="special">></span></code>,
735 <code class="computeroutput"><span class="special">>=</span></code>
738 <div class="note"><table border="0" summary="Note">
740 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
741 <th align="left">Note</th>
743 <tr><td align="left" valign="top"><p>
744 Note that the operation <code class="computeroutput"><span class="special">!=</span></code>
745 is in this case not an element-wise comparison,
748 <a name="what_is_a_collection"></a><h4>
749 <a name="boost_test.testing_tools.extended_comparison.collections.h13"></a>
750 <span class="phrase"><a name="boost_test.testing_tools.extended_comparison.collections.what_is_a_sequence"></a></span><a class="link" href="collections.html#boost_test.testing_tools.extended_comparison.collections.what_is_a_sequence">What
754 A <span class="emphasis"><em>sequence</em></span> is given by the iteration over a <span class="emphasis"><em>forward
755 iterable</em></span> container. A forward iterable container is:
757 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
758 <li class="listitem">
761 <li class="listitem">
762 or a <code class="computeroutput"><span class="keyword">class</span></code>/<code class="computeroutput"><span class="keyword">struct</span></code> that implements the member functions
763 <code class="computeroutput"><span class="identifier">begin</span></code> and <code class="computeroutput"><span class="identifier">end</span></code>.
767 For collection comparisons, both sequences are also required to be different
768 than <code class="computeroutput"><span class="identifier">string</span></code> sequences.
769 In that case, the sequences are dispatched to string <a class="link" href="strings.html" title="Strings and C-strings comparison">comparison
772 <div class="warning"><table border="0" summary="Warning">
774 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../doc/src/images/warning.png"></td>
775 <th align="left">Warning</th>
777 <tr><td align="left" valign="top"><p>
778 <code class="computeroutput"><span class="identifier">string</span></code> (or <code class="computeroutput"><span class="identifier">wstring</span></code>) meets the sequence concept
779 by definition, but their handling with <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> is done differently.
780 See <a class="link" href="strings.html" title="Strings and C-strings comparison">Strings
781 and C-strings comparison</a> for more details.
784 <div class="tip"><table border="0" summary="Tip">
786 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../../doc/src/images/tip.png"></td>
787 <th align="left">Tip</th>
789 <tr><td align="left" valign="top"><p>
790 If the behavior of <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> is not the one you
791 expect, you can always use raw comparison. See <a class="link" href="../boost_test_universal_macro.html#boost_test_statement_limitations">this
792 section</a> for details.
795 <div class="note"><table border="0" summary="Note">
797 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
798 <th align="left">Note</th>
800 <tr><td align="left" valign="top"><p>
801 Since <a class="link" href="../../change_log.html#ref_CHANGE_LOG_3_6">Boost.Test 3.6</a> (Boost
802 1.65) the requirements for the collection concepts have been relaxed
803 to include C-arrays as well
806 <div class="note"><table border="0" summary="Note">
808 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td>
809 <th align="left">Note</th>
811 <tr><td align="left" valign="top"><p>
812 Since <a class="link" href="../../change_log.html#ref_CHANGE_LOG_3_7">Boost.Test 3.7</a> (Boost
813 1.67) the definition of <code class="computeroutput"><span class="identifier">const_iterator</span></code>
814 and <code class="computeroutput"><span class="identifier">value_type</span></code> in the
815 collection type is not required anymore (for the compilers properly supporting
816 <code class="computeroutput"><span class="keyword">decltype</span></code>).
820 The detection of the types that meet these requirements containers is delegated
821 to the class <code class="computeroutput"><a class="link" href="../../../boost/unit_test/is_forward_iterable.html" title="Struct template is_forward_iterable">boost::unit_test::is_forward_iterable</a></code>,
822 which for C++11 detects the required member functions and fields. However
823 for C++03, the types providing the sequences should be explicitly indicated
824 to the <span class="emphasis"><em>Unit Test Framework</em></span> by a specialization of
825 <code class="computeroutput"><a class="link" href="../../../boost/unit_test/is_forward_iterable.html" title="Struct template is_forward_iterable">boost::unit_test::is_forward_iterable</a></code>
826 <a href="#ftn.boost_test.testing_tools.extended_comparison.collections.f4" class="footnote" name="boost_test.testing_tools.extended_comparison.collections.f4"><sup class="footnote">[14]</sup></a>.
828 <div class="footnotes">
829 <br><hr style="width:100; text-align:left;margin-left: 0">
830 <div id="ftn.boost_test.testing_tools.extended_comparison.collections.f0" class="footnote"><p><a href="#boost_test.testing_tools.extended_comparison.collections.f0" class="para"><sup class="para">[10] </sup></a>
831 this might not be the case for e.g. <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">unordered_map</span></code>,
832 for which the buckets might be filled differently depending on the
835 <div id="ftn.boost_test.testing_tools.extended_comparison.collections.f1" class="footnote"><p><a href="#boost_test.testing_tools.extended_comparison.collections.f1" class="para"><sup class="para">[11] </sup></a>
836 in this case <code class="computeroutput"><span class="identifier">v_a</span> <span class="special"><</span> <span class="identifier">v_b</span></code>
837 means that the point <code class="computeroutput"><span class="identifier">v_a</span></code>
838 is inside the rectangle (origin, <code class="computeroutput"><span class="identifier">v_b</span></code>)
840 <div id="ftn.boost_test.testing_tools.extended_comparison.collections.f2" class="footnote"><p><a href="#boost_test.testing_tools.extended_comparison.collections.f2" class="para"><sup class="para">[12] </sup></a>
841 either defined by the container or by the user
843 <div id="ftn.boost_test.testing_tools.extended_comparison.collections.f3" class="footnote"><p><a href="#boost_test.testing_tools.extended_comparison.collections.f3" class="para"><sup class="para">[13] </sup></a>
844 the containers should yield the same sequences for a fixed set of elements
847 <div id="ftn.boost_test.testing_tools.extended_comparison.collections.f4" class="footnote"><p><a href="#boost_test.testing_tools.extended_comparison.collections.f4" class="para"><sup class="para">[14] </sup></a>
848 Standard containers of the <code class="computeroutput"><span class="identifier">STL</span></code>
849 are recognized as <span class="emphasis"><em>forward iterable</em></span> container.
853 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
854 <td align="left"></td>
855 <td align="right"><div class="copyright-footer">Copyright © 2001-2019 Boost.Test
857 Distributed under the Boost Software License, Version 1.0. (See accompanying
858 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>)
863 <div class="spirit-nav">
864 <a accesskey="p" href="strings.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../extended_comparison.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="bitwise.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>