3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Operations on dataset</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="../test_case_generation.html" title="Data-driven test cases">
9 <link rel="prev" href="datasets_auto_registration.html" title="Declaring and registering test cases with datasets">
10 <link rel="next" href="generators.html" title="Datasets generators">
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="datasets_auto_registration.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../test_case_generation.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="generators.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
26 <div class="titlepage"><div><div><h5 class="title">
27 <a name="boost_test.tests_organization.test_cases.test_case_generation.operations"></a><a class="link" href="operations.html" title="Operations on dataset">Operations
29 </h5></div></div></div>
31 As mentioned earlier, one of the major aspects of using the <span class="emphasis"><em>Unit
32 Test Framework</em></span> datasets lies in the number of operations provided
33 for their combination.
36 For that purpose, three operators are provided:
38 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
40 joins with <code class="computeroutput"><span class="keyword">operator</span><span class="special">+</span></code>
43 zips with <code class="computeroutput"><span class="keyword">operator</span><span class="special">^</span></code>
47 and grids or Cartesian products with <code class="computeroutput"><span class="keyword">operator</span><span class="special">*</span></code>
50 <div class="tip"><table border="0" summary="Tip">
52 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../../../doc/src/images/tip.png"></td>
53 <th align="left">Tip</th>
55 <tr><td align="left" valign="top"><p>
56 All these operators are associative, which enables their combination
57 without parenthesis. However, the precedence rule on the operators
58 for the language still apply.
62 <div class="titlepage"><div><div><h6 class="title">
63 <a name="boost_test.tests_organization.test_cases.test_case_generation.operations.joins"></a><a class="link" href="operations.html#boost_test.tests_organization.test_cases.test_case_generation.operations.joins" title="Joins">Joins</a>
64 </h6></div></div></div>
66 A <span class="emphasis"><em>join</em></span>, denoted <code class="computeroutput"><span class="special">+</span></code>,
67 is an operation on two datasets <code class="computeroutput"><span class="identifier">dsa</span></code>
68 and <code class="computeroutput"><span class="identifier">dsb</span></code> of same arity
69 and compatible types, resulting in the <span class="bold"><strong>concatenation</strong></span>
70 of these two datasets <code class="computeroutput"><span class="identifier">dsa</span></code>
71 and <code class="computeroutput"><span class="identifier">dsb</span></code> from the left
72 to the right order of the symbol <code class="computeroutput"><span class="special">+</span></code>:
74 <pre class="programlisting"><span class="identifier">dsa</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">a_1</span><span class="special">,</span> <span class="identifier">a_2</span><span class="special">,</span> <span class="special">...</span> <span class="identifier">a_i</span><span class="special">)</span>
75 <span class="identifier">dsb</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">b_1</span><span class="special">,</span> <span class="identifier">b_2</span><span class="special">,</span> <span class="special">...</span> <span class="identifier">b_j</span><span class="special">)</span>
76 <span class="identifier">dsa</span> <span class="special">+</span> <span class="identifier">dsb</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">a_1</span><span class="special">,</span> <span class="identifier">a_2</span><span class="special">,</span> <span class="special">...</span> <span class="identifier">a_i</span><span class="special">,</span> <span class="identifier">b_1</span><span class="special">,</span> <span class="identifier">b_2</span><span class="special">,</span> <span class="special">...</span> <span class="identifier">b_j</span><span class="special">)</span>
79 The following properties hold:
81 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
83 the resulting dataset is of same arity as the operand datasets,
86 the size of the returned dataset is the sum of the size of the
91 the operation is associative, and it is possible to combine more
92 than two datasets in one expression. The following joins are equivalent
93 for any datasets <code class="computeroutput"><span class="identifier">dsa</span></code>,
94 <code class="computeroutput"><span class="identifier">dsb</span></code> and <code class="computeroutput"><span class="identifier">dsc</span></code>:
96 <pre class="programlisting"><span class="special">(</span> <span class="identifier">dsa</span> <span class="special">+</span> <span class="identifier">dsb</span> <span class="special">)</span> <span class="special">+</span> <span class="identifier">dsc</span>
97 <span class="special">==</span> <span class="identifier">dsa</span> <span class="special">+</span> <span class="special">(</span> <span class="identifier">dsb</span> <span class="special">+</span> <span class="identifier">dsc</span> <span class="special">)</span>
98 <span class="special">==</span> <span class="identifier">dsa</span> <span class="special">+</span> <span class="identifier">dsb</span> <span class="special">+</span> <span class="identifier">dsc</span>
102 <div class="warning"><table border="0" summary="Warning">
104 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../../doc/src/images/warning.png"></td>
105 <th align="left">Warning</th>
107 <tr><td align="left" valign="top"><p>
108 In the expression <code class="computeroutput"><span class="identifier">dsa</span> <span class="special">+</span> <span class="identifier">dsb</span></code>,
109 <code class="computeroutput"><span class="identifier">dsa</span></code> and/or <code class="computeroutput"><span class="identifier">dsb</span></code> can be of infinite size. The
110 resulting dataset will have an infinite size as well. If <code class="computeroutput"><span class="identifier">dsa</span></code> is infinite, the content of
111 <code class="computeroutput"><span class="identifier">dsb</span></code> will never be
116 <a name="boost_test.tests_organization.test_cases.test_case_generation.operations.joins.h0"></a>
117 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.operations.joins.example_descr"></a></span><a class="link" href="operations.html#boost_test.tests_organization.test_cases.test_case_generation.operations.joins.example_descr">Example:
118 Example of join on datasets</a>
120 <div class="informaltable"><table class="table">
121 <colgroup><col></colgroup>
128 <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">dataset_example62</span>
129 <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>
130 <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">data</span><span class="special">/</span><span class="identifier">test_case</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
131 <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">data</span><span class="special">/</span><span class="identifier">monomorphic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
133 <span class="keyword">namespace</span> <span class="identifier">data</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">::</span><span class="identifier">data</span><span class="special">;</span>
135 <span class="keyword">int</span> <span class="identifier">samples1</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>
136 <span class="keyword">int</span> <span class="identifier">samples2</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="number">8</span><span class="special">,</span> <span class="number">9</span><span class="special">,</span> <span class="number">10</span><span class="special">};</span>
138 <span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span>
139 <span class="identifier">test1</span><span class="special">,</span>
140 <span class="identifier">data</span><span class="special">::</span><span class="identifier">make</span><span class="special">(</span><span class="identifier">samples1</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">samples2</span><span class="special">,</span>
141 <span class="identifier">var</span><span class="special">)</span>
142 <span class="special">{</span>
143 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">var</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
144 <span class="special">}</span>
148 <div class="informaltable"><table class="table">
149 <colgroup><col></colgroup>
156 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="identifier">dataset_example62</span>
157 <span class="identifier">Running</span> <span class="number">5</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
158 <span class="number">1</span>
159 <span class="number">2</span>
160 <span class="number">8</span>
161 <span class="number">9</span>
162 <span class="number">10</span>
164 <span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span>
169 <div class="section">
170 <div class="titlepage"><div><div><h6 class="title">
171 <a name="boost_test.tests_organization.test_cases.test_case_generation.operations.zips"></a><a class="link" href="operations.html#boost_test.tests_organization.test_cases.test_case_generation.operations.zips" title="Zips">Zips</a>
172 </h6></div></div></div>
174 A <span class="emphasis"><em>zip</em></span>, denoted <code class="computeroutput"><span class="special">^</span></code>
175 , is an operation on two datasets <code class="computeroutput"><span class="identifier">dsa</span></code>
176 and <code class="computeroutput"><span class="identifier">dsb</span></code> of same arity
177 and same size, resulting in a dataset where the <code class="computeroutput"><span class="identifier">k</span></code>-th
178 sample of <code class="computeroutput"><span class="identifier">dsa</span></code> is paired
179 with the corresponding <code class="computeroutput"><span class="identifier">k</span></code>-th
180 sample of <code class="computeroutput"><span class="identifier">dsb</span></code>. The
181 resulting dataset samples order follows the left to right order against
182 the symbol <code class="computeroutput"><span class="special">^</span></code>.
184 <pre class="programlisting"><span class="identifier">dsa</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">a_1</span><span class="special">,</span> <span class="identifier">a_2</span><span class="special">,</span> <span class="special">...</span> <span class="identifier">a_i</span><span class="special">)</span>
185 <span class="identifier">dsb</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">b_1</span><span class="special">,</span> <span class="identifier">b_2</span><span class="special">,</span> <span class="special">...</span> <span class="identifier">b_i</span><span class="special">)</span>
186 <span class="identifier">dsa</span> <span class="special">^</span> <span class="identifier">dsb</span> <span class="special">=</span> <span class="special">(</span> <span class="special">(</span><span class="identifier">a_1</span><span class="special">,</span> <span class="identifier">b_1</span><span class="special">),</span> <span class="special">(</span><span class="identifier">a_2</span><span class="special">,</span> <span class="identifier">b_2</span><span class="special">)</span> <span class="special">...</span> <span class="special">(</span><span class="identifier">a_i</span><span class="special">,</span> <span class="identifier">b_i</span><span class="special">)</span> <span class="special">)</span>
189 The following properties hold:
191 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
192 <li class="listitem">
193 the arity of the resulting dataset is the sum of the arities of
194 the operand datasets,
196 <li class="listitem">
197 the size of the resulting dataset is equal to the size of the datasets
198 (since they are supposed to be of the same size), exception made
199 for the case the operand datasets size mismatch (see below),
201 <li class="listitem">
203 the operation is associative, and it is possible to combine more
204 than two datasets in one expression,
206 <pre class="programlisting"><span class="special">(</span> <span class="identifier">dsa</span> <span class="special">^</span> <span class="identifier">dsb</span> <span class="special">)</span> <span class="special">^</span> <span class="identifier">dsc</span>
207 <span class="special">==</span> <span class="identifier">dsa</span> <span class="special">^</span> <span class="special">(</span> <span class="identifier">dsb</span> <span class="special">^</span> <span class="identifier">dsc</span> <span class="special">)</span>
208 <span class="special">==</span> <span class="identifier">dsa</span> <span class="special">^</span> <span class="identifier">dsb</span> <span class="special">^</span> <span class="identifier">dsc</span>
213 A particular handling is performed if <code class="computeroutput"><span class="identifier">dsa</span></code>
214 and <code class="computeroutput"><span class="identifier">dsb</span></code> are of different
215 size. The rule is as follow:
217 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
218 <li class="listitem">
219 if the both zipped datasets have the same size, this is the size
220 of the resulting dataset (this size can then be infinite).
222 <li class="listitem">
223 otherwise if one of the dataset is of size 1 (singleton) or of
224 infinite size, the resulting size is governed by the other dataset.
226 <li class="listitem">
227 otherwise an exception is thrown at runtime
230 <div class="caution"><table border="0" summary="Caution">
232 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../../doc/src/images/caution.png"></td>
233 <th align="left">Caution</th>
235 <tr><td align="left" valign="top"><p>
236 If the <span class="emphasis"><em>zip</em></span> operation is not supported for your
237 compiler, the macro <code class="computeroutput"><a class="link" href="../../../../BOOST_TE_idm46279146767520.html" title="Macro BOOST_TEST_NO_ZIP_COMPOSITION_AVAILABLE">BOOST_TEST_NO_ZIP_COMPOSITION_AVAILABLE</a></code>
238 will be automatically set by the <span class="emphasis"><em>Unit Test Framework</em></span>
242 <a name="boost_test.tests_organization.test_cases.test_case_generation.operations.zips.h0"></a>
243 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.operations.zips.example_descr"></a></span><a class="link" href="operations.html#boost_test.tests_organization.test_cases.test_case_generation.operations.zips.example_descr">Example:
244 Example of zip on datasets</a>
246 <div class="informaltable"><table class="table">
247 <colgroup><col></colgroup>
254 <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">dataset_example61</span>
255 <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>
256 <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">data</span><span class="special">/</span><span class="identifier">test_case</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
257 <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">data</span><span class="special">/</span><span class="identifier">monomorphic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
259 <span class="keyword">namespace</span> <span class="identifier">data</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">::</span><span class="identifier">data</span><span class="special">;</span>
261 <span class="keyword">int</span> <span class="identifier">samples1</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>
262 <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">samples2</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="string">"qwerty"</span><span class="special">,</span> <span class="string">"asdfg"</span><span class="special">};</span>
264 <span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span>
265 <span class="identifier">test1</span><span class="special">,</span>
266 <span class="identifier">data</span><span class="special">::</span><span class="identifier">make</span><span class="special">(</span><span class="identifier">samples1</span><span class="special">)^</span><span class="identifier">samples2</span><span class="special">,</span>
267 <span class="identifier">integer_values</span><span class="special">,</span>
268 <span class="identifier">string_value</span><span class="special">)</span>
269 <span class="special">{</span>
270 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">integer_values</span> <span class="special"><<</span> <span class="string">", "</span> <span class="special"><<</span> <span class="identifier">string_value</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
271 <span class="special">}</span>
275 <div class="informaltable"><table class="table">
276 <colgroup><col></colgroup>
283 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="identifier">dataset_example61</span>
284 <span class="identifier">Running</span> <span class="number">2</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
285 <span class="number">1</span><span class="special">,</span> <span class="identifier">qwerty</span>
286 <span class="number">2</span><span class="special">,</span> <span class="identifier">asdfg</span>
288 <span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span>
293 <div class="section">
294 <div class="titlepage"><div><div><h6 class="title">
295 <a name="boost_test.tests_organization.test_cases.test_case_generation.operations.grid_cartesian_products"></a><a class="link" href="operations.html#boost_test.tests_organization.test_cases.test_case_generation.operations.grid_cartesian_products" title="Grid (Cartesian products)">Grid
296 (Cartesian products)</a>
297 </h6></div></div></div>
299 A <span class="emphasis"><em>grid</em></span>, denoted <code class="computeroutput"><span class="special">*</span></code>
300 , is an operation on two any datasets <code class="computeroutput"><span class="identifier">dsa</span></code>
301 and <code class="computeroutput"><span class="identifier">dsb</span></code> resulting in
302 a dataset where each sample of <code class="computeroutput"><span class="identifier">dsa</span></code>
303 is paired with each sample of <code class="computeroutput"><span class="identifier">dsb</span></code>
304 exactly once. The resulting dataset samples order follows the left
305 to right order against the symbol <code class="computeroutput"><span class="special">*</span></code>.
306 The rightmost dataset samples are iterated first.
308 <pre class="programlisting"><span class="identifier">dsa</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">a_1</span><span class="special">,</span> <span class="identifier">a_2</span><span class="special">,</span> <span class="special">...</span> <span class="identifier">a_i</span><span class="special">)</span>
309 <span class="identifier">dsb</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">b_1</span><span class="special">,</span> <span class="identifier">b_2</span><span class="special">,</span> <span class="special">...</span> <span class="identifier">b_j</span><span class="special">)</span>
310 <span class="identifier">dsa</span> <span class="special">*</span> <span class="identifier">dsb</span> <span class="special">=</span> <span class="special">((</span><span class="identifier">a_1</span><span class="special">,</span> <span class="identifier">b_1</span><span class="special">),</span> <span class="special">(</span><span class="identifier">a_1</span><span class="special">,</span> <span class="identifier">b_2</span><span class="special">)</span> <span class="special">...</span> <span class="special">(</span><span class="identifier">a_1</span><span class="special">,</span> <span class="identifier">b_j</span><span class="special">),</span> <span class="special">(</span><span class="identifier">a_2</span><span class="special">,</span> <span class="identifier">b_1</span><span class="special">),</span> <span class="special">...</span> <span class="special">(</span><span class="identifier">a_2</span><span class="special">,</span> <span class="identifier">b_j</span><span class="special">)</span> <span class="special">...</span> <span class="special">(</span><span class="identifier">a_i</span><span class="special">,</span> <span class="identifier">b_1</span><span class="special">),</span> <span class="special">...</span> <span class="special">(</span><span class="identifier">a_i</span><span class="special">,</span> <span class="identifier">b_j</span><span class="special">))</span>
313 The grid hence is similar to the mathematical notion of Cartesian product
314 <a href="#ftn.boost_test.tests_organization.test_cases.test_case_generation.operations.grid_cartesian_products.f0" class="footnote" name="boost_test.tests_organization.test_cases.test_case_generation.operations.grid_cartesian_products.f0"><sup class="footnote">[3]</sup></a>.
317 The following properties hold:
319 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
320 <li class="listitem">
321 the arity of the resulting dataset is the sum of the arities of
322 the operand datasets,
324 <li class="listitem">
325 the size of the resulting dataset is the product of the sizes of
328 <li class="listitem">
329 the operation is associative, and it is possible to combine more
330 than two datasets in one expression,
332 <li class="listitem">
333 as for <span class="emphasis"><em>zip</em></span>, there is no need the dataset to
334 have the same type of samples.
337 <div class="caution"><table border="0" summary="Caution">
339 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../../doc/src/images/caution.png"></td>
340 <th align="left">Caution</th>
342 <tr><td align="left" valign="top"><p>
343 If the <span class="emphasis"><em>grid</em></span> operation is not supported for your
344 compiler, the macro <code class="computeroutput"><a class="link" href="../../../../BOOST_TE_idm46279146806912.html" title="Macro BOOST_TEST_NO_GRID_COMPOSITION_AVAILABLE">BOOST_TEST_NO_GRID_COMPOSITION_AVAILABLE</a></code>
345 will be automatically set by the <span class="emphasis"><em>Unit Test Framework</em></span>
349 In the following example, the random number generator is the second
350 dataset. Its state is evaluated 6 times (3 times for the first <code class="computeroutput"><span class="identifier">xrange</span></code> - first dimension - and twice
351 for the second <code class="computeroutput"><span class="identifier">xrange</span></code>
352 - second dimension - to which it is zipped). Note that the state of
353 the random engine is not copied between two successive evaluations
354 of the first dimension.
357 <a name="boost_test.tests_organization.test_cases.test_case_generation.operations.grid_cartesian_products.h0"></a>
358 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.operations.grid_cartesian_products.example_descr"></a></span><a class="link" href="operations.html#boost_test.tests_organization.test_cases.test_case_generation.operations.grid_cartesian_products.example_descr">Example:
359 Example of Cartesian product</a>
361 <div class="informaltable"><table class="table">
362 <colgroup><col></colgroup>
369 <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">dataset_example64</span>
370 <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>
371 <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">data</span><span class="special">/</span><span class="identifier">test_case</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
372 <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">data</span><span class="special">/</span><span class="identifier">monomorphic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
374 <span class="keyword">namespace</span> <span class="identifier">bdata</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unit_test</span><span class="special">::</span><span class="identifier">data</span><span class="special">;</span>
377 <span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span>
378 <span class="identifier">test1</span><span class="special">,</span>
379 <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">xrange</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">*</span> <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">xrange</span><span class="special">(</span><span class="number">3</span><span class="special">),</span>
380 <span class="identifier">xr1</span><span class="special">,</span> <span class="identifier">xr2</span><span class="special">)</span>
381 <span class="special">{</span>
382 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"test 1: "</span> <span class="special"><<</span> <span class="identifier">xr1</span> <span class="special"><<</span> <span class="string">", "</span> <span class="special"><<</span> <span class="identifier">xr2</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
383 <span class="identifier">BOOST_TEST</span><span class="special">((</span><span class="identifier">xr1</span> <span class="special"><=</span> <span class="number">2</span> <span class="special">&&</span> <span class="identifier">xr2</span> <span class="special"><=</span> <span class="number">3</span><span class="special">));</span>
384 <span class="special">}</span>
386 <span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span>
387 <span class="identifier">test2</span><span class="special">,</span>
388 <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">xrange</span><span class="special">(</span><span class="number">3</span><span class="special">)</span>
389 <span class="special">*</span>
390 <span class="special">(</span> <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">random</span><span class="special">(</span>
391 <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">distribution</span><span class="special">=</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">uniform_real_distribution</span><span class="special"><</span><span class="keyword">float</span><span class="special">>(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">))</span>
392 <span class="special">^</span> <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">xrange</span><span class="special">(</span><span class="number">2</span><span class="special">)</span>
393 <span class="special">),</span>
394 <span class="identifier">xr</span><span class="special">,</span> <span class="identifier">random_sample</span><span class="special">,</span> <span class="identifier">index</span><span class="special">)</span>
395 <span class="special">{</span>
396 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"test 2: "</span>
397 <span class="special"><<</span> <span class="identifier">xr</span> <span class="special"><<</span> <span class="string">" / "</span>
398 <span class="special"><<</span> <span class="identifier">random_sample</span> <span class="special"><<</span> <span class="string">", "</span> <span class="special"><<</span> <span class="identifier">index</span>
399 <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
400 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">random_sample</span> <span class="special"><</span> <span class="number">1.7</span><span class="special">);</span> <span class="comment">// 30% chance of failure</span>
401 <span class="special">}</span>
405 <div class="informaltable"><table class="table">
406 <colgroup><col></colgroup>
413 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="identifier">dataset_example64</span>
414 <span class="identifier">Running</span> <span class="number">12</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span>
415 <span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">0</span><span class="special">,</span> <span class="number">0</span>
416 <span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">0</span><span class="special">,</span> <span class="number">1</span>
417 <span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">0</span><span class="special">,</span> <span class="number">2</span>
418 <span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">1</span><span class="special">,</span> <span class="number">0</span>
419 <span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">1</span><span class="special">,</span> <span class="number">1</span>
420 <span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span>
421 <span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">0</span> <span class="special">/</span> <span class="number">1.00001</span><span class="special">,</span> <span class="number">0</span>
422 <span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">0</span> <span class="special">/</span> <span class="number">1.13154</span><span class="special">,</span> <span class="number">1</span>
423 <span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">1</span> <span class="special">/</span> <span class="number">1.75561</span><span class="special">,</span> <span class="number">0</span>
424 <span class="identifier">test</span><span class="special">.</span><span class="identifier">cpp</span><span class="special">(</span><span class="number">40</span><span class="special">):</span> <span class="identifier">error</span><span class="special">:</span> <span class="identifier">in</span> <span class="string">"test2/_2"</span><span class="special">:</span> <span class="identifier">check</span> <span class="identifier">random_sample</span> <span class="special"><</span> <span class="number">1.7</span> <span class="identifier">has</span> <span class="identifier">failed</span> <span class="special">[</span><span class="number">1.75560534</span> <span class="special">>=</span> <span class="number">1.7</span><span class="special">]</span>
425 <span class="identifier">Failure</span> <span class="identifier">occurred</span> <span class="identifier">in</span> <span class="identifier">a</span> <span class="identifier">following</span> <span class="identifier">context</span><span class="special">:</span>
426 <span class="identifier">xr</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">random_sample</span> <span class="special">=</span> <span class="number">1.75560534</span><span class="special">;</span> <span class="identifier">index</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
427 <span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">1</span> <span class="special">/</span> <span class="number">1.45865</span><span class="special">,</span> <span class="number">1</span>
428 <span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">2</span> <span class="special">/</span> <span class="number">1.53277</span><span class="special">,</span> <span class="number">0</span>
429 <span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">2</span> <span class="special">/</span> <span class="number">1.21896</span><span class="special">,</span> <span class="number">1</span>
431 <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">"dataset_example64"</span>
436 <div class="footnotes">
437 <br><hr style="width:100; text-align:left;margin-left: 0">
438 <div id="ftn.boost_test.tests_organization.test_cases.test_case_generation.operations.grid_cartesian_products.f0" class="footnote"><p><a href="#boost_test.tests_organization.test_cases.test_case_generation.operations.grid_cartesian_products.f0" class="para"><sup class="para">[3] </sup></a>
439 if the sequence is viewed as a set
443 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
444 <td align="left"></td>
445 <td align="right"><div class="copyright-footer">Copyright © 2001-2019 Boost.Test
447 Distributed under the Boost Software License, Version 1.0. (See accompanying
448 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>)
453 <div class="spirit-nav">
454 <a accesskey="p" href="datasets_auto_registration.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../test_case_generation.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="generators.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>