1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Datasets generators</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="operations.html" title="Operations on dataset"> 10<link rel="next" href="../test_organization_templates.html" title="Template test cases"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="operations.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="../test_organization_templates.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h5 class="title"> 27<a name="boost_test.tests_organization.test_cases.test_case_generation.generators"></a><a class="link" href="generators.html" title="Datasets generators">Datasets 28 generators</a> 29</h5></div></div></div> 30<p> 31 Several <span class="emphasis"><em>generators</em></span> for datasets are implemented 32 in <span class="emphasis"><em>Unit Test Framework</em></span>: 33 </p> 34<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 35<li class="listitem"> 36 <a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.singletons">Singletons</a> 37 </li> 38<li class="listitem"> 39 <a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.stl"><code class="computeroutput"><span class="identifier">forward</span> <span class="identifier">iterable</span></code></a> 40 containers and <a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.c_arrays"><code class="computeroutput"><span class="identifier">C</span></code> array</a> like datasets 41 </li> 42<li class="listitem"> 43 <a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.ranges">ranges</a> 44 or sequences of values 45 </li> 46<li class="listitem"> 47 datasets made of <a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.random">random 48 numbers</a> and following a particular distribution 49 </li> 50</ul></div> 51<p> 52 <code class="computeroutput"><span class="identifier">stl</span></code> and <code class="computeroutput"><span class="identifier">C</span><span class="special">-</span><span class="identifier">array</span></code> generators are merely a dataset 53 view on existing collection, while ranges and random number sequences 54 are describing new datasets. 55 </p> 56<h5> 57<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h0"></a> 58 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.singletons"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.singletons">Singletons</a> 59 </h5> 60<p> 61 A singleton is a dataset containing a unique value. The size and arity 62 of such a dataset is 1. This value can be 63 </p> 64<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 65<li class="listitem"> 66 either consumed once 67 </li> 68<li class="listitem"> 69 or repeated as many times as needed in a zip operation 70 </li> 71</ul></div> 72<p> 73 As mentioned in <span class="emphasis"><em>zip</em></span>, when zipped with a distribution 74 of infinite size, the resulting dataset will have a size of 1. 75 </p> 76<p> 77 The singleton is constructible through the function <code class="computeroutput"><a class="link" href="../../../../boost/unit_test/data/make.html" title="Function make">boost::unit_test::data::make</a></code>. 78 </p> 79<h6> 80<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h1"></a> 81 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.example_descr"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.example_descr">Example: 82 Singleton</a> 83 </h6> 84<div class="informaltable"><table class="table"> 85<colgroup><col></colgroup> 86<thead><tr><th> 87 <p> 88 Code 89 </p> 90 </th></tr></thead> 91<tbody><tr><td> 92<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_example65</span> 93<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> 94<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> 95<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> 96 97<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> 98 99 100<span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span> 101 <span class="identifier">test1</span><span class="special">,</span> 102 <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">make</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> 103 <span class="identifier">singleton</span><span class="special">)</span> 104<span class="special">{</span> 105 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> 106 <span class="special"><<</span> <span class="string">"test 1: "</span> 107 <span class="special"><<</span> <span class="identifier">singleton</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 108 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">singleton</span> <span class="special">==</span> <span class="number">2</span><span class="special">);</span> 109<span class="special">}</span> 110 111<span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span> 112 <span class="identifier">test2</span><span class="special">,</span> 113 <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> <span class="special">^</span> <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">make</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> 114 <span class="identifier">xr</span><span class="special">,</span> <span class="identifier">singleton</span><span class="special">)</span> 115<span class="special">{</span> 116 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> 117 <span class="special"><<</span> <span class="string">"test 2: "</span> 118 <span class="special"><<</span> <span class="identifier">xr</span> <span class="special"><<</span> <span class="string">", "</span> <span class="special"><<</span> <span class="identifier">singleton</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 119 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">singleton</span> <span class="special">==</span> <span class="number">2</span><span class="special">);</span> 120<span class="special">}</span> 121</pre> 122 </td></tr></tbody> 123</table></div> 124<div class="informaltable"><table class="table"> 125<colgroup><col></colgroup> 126<thead><tr><th> 127 <p> 128 Output 129 </p> 130 </th></tr></thead> 131<tbody><tr><td> 132<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="identifier">dataset_example65</span> 133<span class="identifier">Running</span> <span class="number">4</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span> 134<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">2</span> 135<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">2</span> 136<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">2</span> 137<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">2</span> 138 139<span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span> 140</pre> 141 </td></tr></tbody> 142</table></div> 143<h5> 144<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h2"></a> 145 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.c_arrays"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.c_arrays">Datasets 146 from C arrays</a> 147 </h5> 148<p> 149 This type of datasets does not contains the logic for generating the 150 sequence of values, and is used as a wrapper on an existing sequence 151 contained in a <code class="computeroutput"><span class="identifier">C</span></code> array. 152 The arity is 1 and the size is the size of the array. 153 </p> 154<p> 155 Such datasets are simply constructed from an overload of the <code class="computeroutput"><a class="link" href="../../../../boost/unit_test/data/make.html" title="Function make">make</a></code> 156 function. 157 </p> 158<h6> 159<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h3"></a> 160 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.example_descr0"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.example_descr0">Example: 161 Array</a> 162 </h6> 163<div class="informaltable"><table class="table"> 164<colgroup><col></colgroup> 165<thead><tr><th> 166 <p> 167 Code 168 </p> 169 </th></tr></thead> 170<tbody><tr><td> 171<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_example66</span> 172<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> 173<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> 174<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> 175 176<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> 177 178<span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">arr</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="string">"cat"</span><span class="special">,</span> <span class="string">"dog"</span><span class="special">};</span> 179 180<span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span> 181 <span class="identifier">test1</span><span class="special">,</span> 182 <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">make</span><span class="special">(</span><span class="identifier">arr</span><span class="special">),</span> 183 <span class="identifier">xr</span><span class="special">,</span> <span class="identifier">array_element</span><span class="special">)</span> 184<span class="special">{</span> 185 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"test 1: "</span> 186 <span class="special"><<</span> <span class="identifier">xr</span> <span class="special"><<</span> <span class="string">", "</span> 187 <span class="special"><<</span> <span class="identifier">array_element</span> 188 <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 189 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">array_element</span> <span class="special">!=</span> <span class="string">"mammoth"</span><span class="special">);</span> 190<span class="special">}</span> 191</pre> 192 </td></tr></tbody> 193</table></div> 194<div class="informaltable"><table class="table"> 195<colgroup><col></colgroup> 196<thead><tr><th> 197 <p> 198 Output 199 </p> 200 </th></tr></thead> 201<tbody><tr><td> 202<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="identifier">dataset_example66</span> 203<span class="identifier">Running</span> <span class="number">2</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span> 204<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="identifier">cat</span> 205<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="identifier">dog</span> 206 207<span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span> 208</pre> 209 </td></tr></tbody> 210</table></div> 211<h5> 212<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h4"></a> 213 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.stl"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.stl">Datasets 214 from forward iterable containers</a> 215 </h5> 216<p> 217 As for <code class="computeroutput"><span class="identifier">C</span></code> arrays, this 218 type of datasets does not contain the logic for generating sequence of 219 values, and are used for parsing an existing sequence. The arity is 1 220 and the size is the same as the one of the container. 221 </p> 222<div class="tip"><table border="0" summary="Tip"> 223<tr> 224<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../../../doc/src/images/tip.png"></td> 225<th align="left">Tip</th> 226</tr> 227<tr><td align="left" valign="top"><p> 228 C++11 implementation enables the dataset generation from any container 229 which iterator implements the forward iterator concept. For C++03, 230 the feature is enabled on most STL containers. 231 </p></td></tr> 232</table></div> 233<h6> 234<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h5"></a> 235 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.example_descr1"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.example_descr1">Example: 236 Dataset from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code> and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span></code></a> 237 </h6> 238<div class="informaltable"><table class="table"> 239<colgroup><col></colgroup> 240<thead><tr><th> 241 <p> 242 Code 243 </p> 244 </th></tr></thead> 245<tbody><tr><td> 246<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">example67</span> 247<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> 248<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> 249<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> 250<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">sstream</span><span class="special">></span> 251 252<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> 253 254<span class="comment">// Generates a Fibonacci sequence</span> 255<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">float</span><span class="special">></span> <span class="identifier">fibonacci</span><span class="special">()</span> <span class="special">{</span> 256 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">float</span><span class="special">></span> <span class="identifier">ret</span><span class="special">(</span><span class="number">8</span><span class="special">);</span> 257 <span class="identifier">ret</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> 258 <span class="identifier">ret</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> 259 260 <span class="keyword">for</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">s</span><span class="special">(</span><span class="number">2</span><span class="special">);</span> <span class="identifier">s</span> <span class="special"><</span> <span class="identifier">ret</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="identifier">s</span><span class="special">++)</span> 261 <span class="special">{</span> 262 <span class="identifier">ret</span><span class="special">[</span><span class="identifier">s</span><span class="special">]</span> <span class="special">=</span> <span class="identifier">ret</span><span class="special">[</span><span class="identifier">s</span><span class="special">-</span><span class="number">1</span><span class="special">]</span> <span class="special">+</span> <span class="identifier">ret</span><span class="special">[</span><span class="identifier">s</span><span class="special">-</span><span class="number">2</span><span class="special">];</span> 263 <span class="special">}</span> 264 <span class="keyword">return</span> <span class="identifier">ret</span><span class="special">;</span> 265<span class="special">}</span> 266 267<span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span> 268 <span class="identifier">test1</span><span class="special">,</span> 269 <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">make</span><span class="special">(</span><span class="identifier">fibonacci</span><span class="special">()),</span> 270 <span class="identifier">array_element</span><span class="special">)</span> 271<span class="special">{</span> 272 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"test 1: "</span> 273 <span class="special"><<</span> <span class="identifier">array_element</span> 274 <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 275 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">array_element</span> <span class="special"><=</span> <span class="number">13</span><span class="special">);</span> 276<span class="special">}</span> 277 278 279<span class="comment">// Generates a map from a vector</span> 280<span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="keyword">float</span><span class="special">></span> <span class="identifier">vect_2_str</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">float</span><span class="special">></span> <span class="identifier">v</span><span class="special">)</span> 281<span class="special">{</span> 282 <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="keyword">float</span><span class="special">></span> <span class="identifier">out</span><span class="special">;</span> 283 <span class="keyword">for</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">s</span><span class="special">(</span><span class="number">0</span><span class="special">);</span> <span class="identifier">s</span> <span class="special"><</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="identifier">s</span><span class="special">++)</span> 284 <span class="special">{</span> 285 <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostringstream</span> <span class="identifier">o</span><span class="special">;</span> 286 <span class="identifier">o</span> <span class="special"><<</span> <span class="identifier">v</span><span class="special">[</span><span class="identifier">s</span><span class="special">];</span> 287 <span class="identifier">out</span><span class="special">[</span><span class="identifier">o</span><span class="special">.</span><span class="identifier">str</span><span class="special">()]</span> <span class="special">=</span> <span class="identifier">v</span><span class="special">[</span><span class="identifier">s</span><span class="special">];</span> 288 <span class="special">}</span> 289 <span class="keyword">return</span> <span class="identifier">out</span><span class="special">;</span> 290<span class="special">}</span> 291 292<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="keyword">float</span><span class="special">></span> <span class="identifier">pair_map_t</span><span class="special">;</span> 293<span class="identifier">BOOST_TEST_DONT_PRINT_LOG_VALUE</span><span class="special">(</span> <span class="identifier">pair_map_t</span> <span class="special">)</span> 294 295<span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span> 296 <span class="identifier">test2</span><span class="special">,</span> 297 <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">make</span><span class="special">(</span><span class="identifier">vect_2_str</span><span class="special">(</span><span class="identifier">fibonacci</span><span class="special">())),</span> 298 <span class="identifier">array_element</span><span class="special">)</span> 299<span class="special">{</span> 300 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"test 2: \""</span> 301 <span class="special"><<</span> <span class="identifier">array_element</span><span class="special">.</span><span class="identifier">first</span> <span class="special"><<</span> <span class="string">"\", "</span> 302 <span class="special"><<</span> <span class="identifier">array_element</span><span class="special">.</span><span class="identifier">second</span> 303 <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 304 <span class="identifier">BOOST_TEST</span><span class="special">(</span><span class="identifier">array_element</span><span class="special">.</span><span class="identifier">second</span> <span class="special"><=</span> <span class="number">13</span><span class="special">);</span> 305<span class="special">}</span> 306</pre> 307 </td></tr></tbody> 308</table></div> 309<div class="informaltable"><table class="table"> 310<colgroup><col></colgroup> 311<thead><tr><th> 312 <p> 313 Output 314 </p> 315 </th></tr></thead> 316<tbody><tr><td> 317<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="identifier">dataset_example67</span> 318<span class="identifier">Running</span> <span class="number">15</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span> 319<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">0</span> 320<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">1</span> 321<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">1</span> 322<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">2</span> 323<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">3</span> 324<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">5</span> 325<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">8</span> 326<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">13</span> 327<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="string">"0"</span><span class="special">,</span> <span class="number">0</span> 328<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="string">"1"</span><span class="special">,</span> <span class="number">1</span> 329<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="string">"13"</span><span class="special">,</span> <span class="number">13</span> 330<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="string">"2"</span><span class="special">,</span> <span class="number">2</span> 331<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="string">"3"</span><span class="special">,</span> <span class="number">3</span> 332<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="string">"5"</span><span class="special">,</span> <span class="number">5</span> 333<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="string">"8"</span><span class="special">,</span> <span class="number">8</span> 334 335<span class="special">***</span> <span class="identifier">No</span> <span class="identifier">errors</span> <span class="identifier">detected</span> 336</pre> 337 </td></tr></tbody> 338</table></div> 339<h5> 340<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h6"></a> 341 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.ranges"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.ranges">Ranges</a> 342 </h5> 343<p> 344 A range is a dataset that implements a sequence of equally spaced values, 345 defined by a <span class="emphasis"><em>start</em></span>, and <span class="emphasis"><em>end</em></span> 346 and a <span class="emphasis"><em>step</em></span>. 347 </p> 348<p> 349 It is possible to construct a range using the factory <code class="computeroutput"><a class="link" href="../../../../boost/unit_test/data/xrange.html" title="Function xrange">boost::unit_test::data::xrange</a></code>, 350 available in the overloads below: 351 </p> 352<pre class="programlisting"><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> 353<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> 354 355<span class="keyword">auto</span> <span class="identifier">range1</span> <span class="special">=</span> <span class="identifier">data</span><span class="special">::</span><span class="identifier">xrange</span><span class="special">(</span> <span class="special">(</span><span class="identifier">data</span><span class="special">::</span><span class="identifier">step</span> <span class="special">=</span> <span class="number">0.5</span><span class="special">,</span> <span class="identifier">data</span><span class="special">::</span><span class="identifier">end</span> <span class="special">=</span> <span class="number">3</span> <span class="special">)</span> <span class="special">);</span> <span class="comment">// Constructs with named values, starting at 0</span> 356<span class="keyword">auto</span> <span class="identifier">range2</span> <span class="special">=</span> <span class="identifier">data</span><span class="special">::</span><span class="identifier">xrange</span><span class="special">(</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">end</span> <span class="special">);</span> <span class="comment">// begin < end required</span> 357<span class="keyword">auto</span> <span class="identifier">range5</span> <span class="special">=</span> <span class="identifier">data</span><span class="special">::</span><span class="identifier">xrange</span><span class="special">(</span> <span class="identifier">begin</span><span class="special">,</span> <span class="identifier">end</span><span class="special">,</span> <span class="identifier">step</span> <span class="special">);</span> <span class="comment">// begin < end required</span> 358<span class="keyword">auto</span> <span class="identifier">range3</span> <span class="special">=</span> <span class="identifier">data</span><span class="special">::</span><span class="identifier">xrange</span><span class="special">(</span> <span class="identifier">end</span> <span class="special">);</span> <span class="comment">// begin=0, end cannot be <= 0, see above</span> 359<span class="keyword">auto</span> <span class="identifier">range4</span> <span class="special">=</span> <span class="identifier">data</span><span class="special">::</span><span class="identifier">xrange</span><span class="special">(</span> <span class="identifier">end</span><span class="special">,</span> <span class="special">(</span><span class="identifier">data</span><span class="special">::</span><span class="identifier">begin</span><span class="special">=</span><span class="number">1</span><span class="special">)</span> <span class="special">);</span> <span class="comment">// named value after end</span> 360</pre> 361<div class="tip"><table border="0" summary="Tip"> 362<tr> 363<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../../../doc/src/images/tip.png"></td> 364<th align="left">Tip</th> 365</tr> 366<tr><td align="left" valign="top"><p> 367 The named value parameters should be declared inside parenthesis 368 </p></td></tr> 369</table></div> 370<h6> 371<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h7"></a> 372 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.parameters"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.parameters">Parameters</a> 373 </h6> 374<p> 375 The details of the named value parameters is given in the table below. 376 </p> 377<div class="table"> 378<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.id_range_parameter_table"></a><p class="title"><b>Table 1. Range parameters</b></p> 379<div class="table-contents"><table class="table" summary="Range parameters"> 380<colgroup> 381<col> 382<col> 383<col> 384</colgroup> 385<thead><tr> 386<th> 387 <p> 388 Name 389 </p> 390 </th> 391<th> 392 <p> 393 Default 394 </p> 395 </th> 396<th> 397 <p> 398 Description 399 </p> 400 </th> 401</tr></thead> 402<tbody> 403<tr> 404<td> 405 <p> 406 <code class="computeroutput"><span class="identifier">begin</span></code> 407 </p> 408 </td> 409<td> 410 <p> 411 0 412 </p> 413 </td> 414<td> 415 <p> 416 Beginning of the generated sequence. The <code class="computeroutput"><span class="identifier">begin</span></code> 417 value is included in set of values returned by the generator. 418 </p> 419 </td> 420</tr> 421<tr> 422<td> 423 <p> 424 <code class="computeroutput"><span class="identifier">end</span></code> 425 </p> 426 </td> 427<td> 428 <p> 429 + infinity 430 </p> 431 </td> 432<td> 433 <p> 434 End of the generated sequence. The <code class="computeroutput"><span class="identifier">end</span></code> 435 value is not included in set of values returned by the generator. 436 If omitted, the generator has infinite size. 437 </p> 438 </td> 439</tr> 440<tr> 441<td> 442 <p> 443 <code class="computeroutput"><span class="identifier">step</span></code> 444 </p> 445 </td> 446<td> 447 <p> 448 1 449 </p> 450 </td> 451<td> 452 <p> 453 Number indicating the step between two consecutive samples 454 of the generated range. The default type is the same as the 455 input type. This value should not be 0. It should be of the 456 same sign as <code class="computeroutput"><span class="identifier">end</span><span class="special">-</span><span class="identifier">begin</span></code>. 457 </p> 458 </td> 459</tr> 460</tbody> 461</table></div> 462</div> 463<br class="table-break"><h6> 464<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h8"></a> 465 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.example_descr2"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.example_descr2">Example: 466 Declaring a test with a range</a> 467 </h6> 468<div class="informaltable"><table class="table"> 469<colgroup><col></colgroup> 470<thead><tr><th> 471 <p> 472 Code 473 </p> 474 </th></tr></thead> 475<tbody><tr><td> 476<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_example59</span> 477<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> 478<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> 479<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> 480 481<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> 482 483<span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span> <span class="identifier">test1</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">5</span><span class="special">)</span> <span class="special">)</span> 484<span class="special">{</span> 485 <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">sample</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 486 <span class="identifier">BOOST_TEST</span><span class="special">((</span><span class="identifier">sample</span> <span class="special"><=</span> <span class="number">4</span> <span class="special">&&</span> <span class="identifier">sample</span> <span class="special">>=</span> <span class="number">0</span><span class="special">));</span> 487<span class="special">}</span> 488 489<span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span> 490 <span class="identifier">test2</span><span class="special">,</span> 491 <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">xrange</span><span class="special"><</span><span class="keyword">int</span><span class="special">>(</span> <span class="special">(</span><span class="identifier">bdata</span><span class="special">::</span><span class="identifier">begin</span><span class="special">=</span><span class="number">1</span><span class="special">,</span> <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">end</span><span class="special">=</span><span class="number">10</span><span class="special">,</span> <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">step</span><span class="special">=</span><span class="number">3</span><span class="special">))</span> <span class="special">)</span> 492<span class="special">{</span> 493 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"test 2: "</span> <span class="special"><<</span> <span class="identifier">sample</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 494 <span class="identifier">BOOST_TEST</span><span class="special">((</span><span class="identifier">sample</span> <span class="special"><=</span> <span class="number">4</span> <span class="special">&&</span> <span class="identifier">sample</span> <span class="special">>=</span> <span class="number">0</span><span class="special">));</span> 495<span class="special">}</span> 496</pre> 497 </td></tr></tbody> 498</table></div> 499<div class="informaltable"><table class="table"> 500<colgroup><col></colgroup> 501<thead><tr><th> 502 <p> 503 Output 504 </p> 505 </th></tr></thead> 506<tbody><tr><td> 507<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="identifier">dataset_example59</span> 508<span class="identifier">Running</span> <span class="number">8</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span> 509<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">0</span> 510<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">1</span> 511<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">2</span> 512<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">3</span> 513<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">4</span> 514<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">1</span> 515<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">4</span> 516<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">7</span> 517<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">"test2/_2"</span><span class="special">:</span> <span class="identifier">check</span> <span class="special">(</span><span class="identifier">sample</span> <span class="special"><=</span> <span class="number">4</span> <span class="special">&&</span> <span class="identifier">sample</span> <span class="special">>=</span> <span class="number">0</span><span class="special">)</span> <span class="identifier">has</span> <span class="identifier">failed</span> 518<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> 519 <span class="identifier">sample</span> <span class="special">=</span> <span class="number">7</span><span class="special">;</span> 520 521<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_example59"</span> 522</pre> 523 </td></tr></tbody> 524</table></div> 525<h5> 526<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h9"></a> 527 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.random"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.random">Random 528 value dataset</a> 529 </h5> 530<p> 531 This type of dataset generates a sequence of random numbers following 532 a given <span class="emphasis"><em>distribution</em></span>. The <span class="emphasis"><em>seed</em></span> 533 and the <span class="emphasis"><em>engine</em></span> may also be specified. 534 </p> 535<div class="caution"><table border="0" summary="Caution"> 536<tr> 537<td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../../doc/src/images/caution.png"></td> 538<th align="left">Caution</th> 539</tr> 540<tr><td align="left" valign="top"><p> 541 The random value generator is available only for C++11 capable compilers. 542 If this feature is not supported for your compiler, the macro <code class="computeroutput"><a class="link" href="../../../../BOOST_TE_idm45267320606592.html" title="Macro BOOST_TEST_NO_RANDOM_DATASET_AVAILABLE">BOOST_TEST_NO_RANDOM_DATASET_AVAILABLE</a></code> 543 will be automatically set by the <span class="emphasis"><em>Unit Test Framework</em></span> 544 </p></td></tr> 545</table></div> 546<p> 547 It is possible to construct a random sequence using the factory <code class="computeroutput"><a class="link" href="../../../../boost/unit_test/data/random.html" title="Function random">boost::unit_test::data::random</a></code>, 548 available in the overloads below: 549 </p> 550<pre class="programlisting"><span class="keyword">auto</span> <span class="identifier">rdgen</span> <span class="special">=</span> <span class="identifier">random</span><span class="special">();</span> <span class="comment">// uniform distribution (real) on [0, 1)</span> 551<span class="keyword">auto</span> <span class="identifier">rdgen</span> <span class="special">=</span> <span class="identifier">random</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">17</span><span class="special">);</span> <span class="comment">// uniform distribution (integer) on [1, 17]</span> 552<span class="comment">// Default random generator engine, Gaussian distribution (mean=5, sigma=2) and seed set to 100.</span> 553<span class="keyword">auto</span> <span class="identifier">rdgen</span> <span class="special">=</span> <span class="identifier">random</span><span class="special">(</span> <span class="special">(</span><span class="identifier">data</span><span class="special">::</span><span class="identifier">seed</span> <span class="special">=</span> <span class="number">100UL</span><span class="special">,</span> 554 <span class="identifier">data</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">normal_distribution</span><span class="special"><>(</span><span class="number">5.</span><span class="special">,</span><span class="number">2</span><span class="special">))</span> <span class="special">);</span> 555</pre> 556<p> 557 Since the generated datasets will have infinite size, the sequence size 558 should be narrowed by combining the dataset with another one through 559 e.g. a <span class="emphasis"><em>zip</em></span> operation. 560 </p> 561<div class="tip"><table border="0" summary="Tip"> 562<tr> 563<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../../../../../doc/src/images/tip.png"></td> 564<th align="left">Tip</th> 565</tr> 566<tr><td align="left" valign="top"><p> 567 In order to be able to reproduce a failure within a randomized parameter 568 test case, the seed that generated the failure may be set in order 569 to generate the same sequence of random values. 570 </p></td></tr> 571</table></div> 572<h6> 573<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h10"></a> 574 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.parameters0"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.parameters0">Parameters</a> 575 </h6> 576<p> 577 The details of the named value parameters is given in the table below. 578 </p> 579<div class="table"> 580<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.id_range_parameter_table0"></a><p class="title"><b>Table 2. Range parameters</b></p> 581<div class="table-contents"><table class="table" summary="Range parameters"> 582<colgroup> 583<col> 584<col> 585<col> 586</colgroup> 587<thead><tr> 588<th> 589 <p> 590 Parameter name 591 </p> 592 </th> 593<th> 594 <p> 595 Default 596 </p> 597 </th> 598<th> 599 <p> 600 Description 601 </p> 602 </th> 603</tr></thead> 604<tbody> 605<tr> 606<td> 607 <p> 608 <code class="computeroutput"><span class="identifier">seed</span></code> 609 </p> 610 </td> 611<td> 612 <p> 613 (not set) 614 </p> 615 </td> 616<td> 617 <p> 618 Seed for the generation of the random sequence. 619 </p> 620 </td> 621</tr> 622<tr> 623<td> 624 <p> 625 <code class="computeroutput"><span class="identifier">distribution</span></code> 626 </p> 627 </td> 628<td> 629 <p> 630 Uniform 631 </p> 632 </td> 633<td> 634 <p> 635 Distribution instance for generating the random number sequences. 636 The <code class="computeroutput"><span class="identifier">end</span></code> value 637 is not included in set of values returned by the generator 638 for real values, and is included for integers. 639 </p> 640 </td> 641</tr> 642<tr> 643<td> 644 <p> 645 <code class="computeroutput"><span class="identifier">engine</span></code> 646 </p> 647 </td> 648<td> 649 <p> 650 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">default_random_engine</span></code> 651 </p> 652 </td> 653<td> 654 <p> 655 Random number generator engine. 656 </p> 657 </td> 658</tr> 659</tbody> 660</table></div> 661</div> 662<br class="table-break"><h6> 663<a name="boost_test.tests_organization.test_cases.test_case_generation.generators.h11"></a> 664 <span class="phrase"><a name="boost_test.tests_organization.test_cases.test_case_generation.generators.example_descr3"></a></span><a class="link" href="generators.html#boost_test.tests_organization.test_cases.test_case_generation.generators.example_descr3">Example: 665 Declaring a test with a random sequence</a> 666 </h6> 667<div class="informaltable"><table class="table"> 668<colgroup><col></colgroup> 669<thead><tr><th> 670 <p> 671 Code 672 </p> 673 </th></tr></thead> 674<tbody><tr><td> 675<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_example63</span> 676<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> 677<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> 678<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> 679 680<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> 681 682 683<span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span> 684 <span class="identifier">test1</span><span class="special">,</span> 685 <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">random</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">17</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">7</span><span class="special">),</span> 686 <span class="identifier">random_sample</span><span class="special">,</span> <span class="identifier">index</span> <span class="special">)</span> 687<span class="special">{</span> 688 <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">random_sample</span> 689 <span class="special"><<</span> <span class="string">", "</span> <span class="special"><<</span> <span class="identifier">index</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 690 <span class="identifier">BOOST_TEST</span><span class="special">((</span><span class="identifier">random_sample</span> <span class="special"><=</span> <span class="number">17</span> <span class="special">&&</span> <span class="identifier">random_sample</span> <span class="special">>=</span> <span class="number">1</span><span class="special">));</span> 691<span class="special">}</span> 692 693<span class="identifier">BOOST_DATA_TEST_CASE</span><span class="special">(</span> 694 <span class="identifier">test2</span><span class="special">,</span> 695 <span class="identifier">bdata</span><span class="special">::</span><span class="identifier">random</span><span class="special">(</span> <span class="special">(</span><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> <span class="special">)</span> 696 <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">7</span><span class="special">),</span> 697 <span class="identifier">random_sample</span><span class="special">,</span> <span class="identifier">index</span> <span class="special">)</span> 698<span class="special">{</span> 699 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"test 2: "</span> <span class="special"><<</span> <span class="identifier">random_sample</span> 700 <span class="special"><<</span> <span class="string">", "</span> <span class="special"><<</span> <span class="identifier">index</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 701 <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> 702<span class="special">}</span> 703</pre> 704 </td></tr></tbody> 705</table></div> 706<div class="informaltable"><table class="table"> 707<colgroup><col></colgroup> 708<thead><tr><th> 709 <p> 710 Output 711 </p> 712 </th></tr></thead> 713<tbody><tr><td> 714<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">></span> <span class="identifier">dataset_example63</span> 715<span class="identifier">Running</span> <span class="number">14</span> <span class="identifier">test</span> <span class="identifier">cases</span><span class="special">...</span> 716<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">2</span><span class="special">,</span> <span class="number">0</span> 717<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">3</span><span class="special">,</span> <span class="number">1</span> 718<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">2</span><span class="special">,</span> <span class="number">2</span> 719<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">8</span><span class="special">,</span> <span class="number">3</span> 720<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">10</span><span class="special">,</span> <span class="number">4</span> 721<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">15</span><span class="special">,</span> <span class="number">5</span> 722<span class="identifier">test</span> <span class="number">1</span><span class="special">:</span> <span class="number">8</span><span class="special">,</span> <span class="number">6</span> 723<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">1.00001</span><span class="special">,</span> <span class="number">0</span> 724<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">1.13154</span><span class="special">,</span> <span class="number">1</span> 725<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">1.75561</span><span class="special">,</span> <span class="number">2</span> 726<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">"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> 727<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> 728 <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">2</span><span class="special">;</span> 729<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">1.45865</span><span class="special">,</span> <span class="number">3</span> 730<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">1.53277</span><span class="special">,</span> <span class="number">4</span> 731<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">1.21896</span><span class="special">,</span> <span class="number">5</span> 732<span class="identifier">test</span> <span class="number">2</span><span class="special">:</span> <span class="number">1.04704</span><span class="special">,</span> <span class="number">6</span> 733 734<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_example63"</span> 735</pre> 736 </td></tr></tbody> 737</table></div> 738</div> 739<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 740<td align="left"></td> 741<td align="right"><div class="copyright-footer">Copyright © 2001-2020 Boost.Test contributors<p> 742 Distributed under the Boost Software License, Version 1.0. (See accompanying 743 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>) 744 </p> 745</div></td> 746</tr></table> 747<hr> 748<div class="spirit-nav"> 749<a accesskey="p" href="operations.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="../test_organization_templates.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> 750</div> 751</body> 752</html> 753