$\newcommand{\W}[1]{ \; #1 \; } \newcommand{\R}[1]{ {\rm #1} } \newcommand{\B}[1]{ {\bf #1} } \newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} } \newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} } \newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} } \newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }$
 # include <cppad/utility/vector.hpp> # include <cppad/utility/check_simple_vector.hpp> # include <sstream> // sstream and string are used to test output operation # include <string> bool vectorBool(void) { bool ok = true; using CppAD::vectorBool; vectorBool x; // default constructor ok &= (x.size() == 0); x.resize(2); // resize and set element assignment to bool ok &= (x.size() == 2); x[0] = false; x[1] = true; vectorBool y(2); // sizing constructor ok &= (y.size() == 2); const vectorBool z(x); // copy constructor and const element access ok &= (z.size() == 2); ok &= ( (z[0] == false) && (z[1] == true) ); x[0] = true; // modify, assignment changes x ok &= (x[0] == true); // resize x to zero and check that vector assignment works for both // size zero and mathching sizes x.resize(0); ok &= (x.size() == 0); ok &= (y.size() == z.size()); // x = y = z; ok &= ( (x[0] == false) && (x[1] == true) ); ok &= ( (y[0] == false) && (y[1] == true) ); ok &= ( (z[0] == false) && (z[1] == true) ); // test of push_vector y.push_vector(z); ok &= y.size() == 4; ok &= ( (y[0] == false) && (y[1] == true) ); ok &= ( (y[2] == false) && (y[3] == true) ); y[1] = false; // element assignment to another element x[0] = y[1]; ok &= (x[0] == false); // test of output std::string correct= "01"; std::string str; std::ostringstream buf; buf << z; str = buf.str(); ok &= (str == correct); // test resize(0), capacity, and clear size_t i = x.capacity(); ok &= i > 0; x.resize(0); ok &= i == x.capacity(); x.clear(); ok &= 0 == x.capacity(); // test of push_back element for(i = 0; i < 100; i++) x.push_back( (i % 3) != 0 ); ok &= (x.size() == 100); for(i = 0; i < 100; i++) ok &= ( x[i] == ((i % 3) != 0) ); // is that boolvector is // a simple vector class with elements of type bool CppAD::CheckSimpleVector< bool, vectorBool >(); return ok; }