diff options
Diffstat (limited to 'libs/format/test/format_test3.cpp')
-rw-r--r-- | libs/format/test/format_test3.cpp | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/libs/format/test/format_test3.cpp b/libs/format/test/format_test3.cpp new file mode 100644 index 0000000000..231a91b39f --- /dev/null +++ b/libs/format/test/format_test3.cpp @@ -0,0 +1,132 @@ +// ------------------------------------------------------------------------------ +// format_test3.cpp : complicated format strings and / or advanced uses +// ------------------------------------------------------------------------------ + +// Copyright Samuel Krempp 2003. Use, modification, and distribution are +// subject to the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// see http://www.boost.org/libs/format for library home page + +// ------------------------------------------------------------------------------ + +#define BOOST_FORMAT_STATIC_STREAM +#include "boost/format.hpp" + +#include <iostream> +#include <iomanip> + +#define BOOST_INCLUDE_MAIN +#include <boost/test/test_tools.hpp> + +struct Rational { + int n,d; + Rational (int an, int ad) : n(an), d(ad) {} +}; + +std::ostream& operator<<( std::ostream& os, const Rational& r) { + os << r.n << "/" << r.d; + return os; +} + +int test_main(int, char* []) +{ + using namespace std; + using boost::format; + using boost::io::group; + using boost::str; + + string s, s2; + // special paddings + s = str( format("[%=6s] [%+6s] [%+6s] [% 6s] [%+6s]\n") + % 123 + % group(internal, setfill('W'), 234) + % group(internal, setfill('X'), -345) + % group(setfill('Y'), 456) + % group(setfill('Z'), -10 ) ); + + if(s != "[ 123 ] [+WW234] [-XX345] [YY 456] [ZZZ-10]\n" ) { + cerr << s ; + BOOST_ERROR("formatting error. (with special paddings)"); + } + + s = str( format("[% 6.8s] [% 8.6s] [% 7.7s]\n") + % group(internal, setfill('x'), Rational(12345,54321)) + % group(internal, setfill('x'), Rational(123,45)) + % group(internal, setfill('x'), Rational(123,321)) + ); + if(s != (s2="[ 12345/5] [ xx123/4] [ 123/32]\n" )) { + cerr << s << s2; + BOOST_ERROR("formatting error. (with special paddings)"); + } + + s = str( format("[% 6.8s] [% 6.8s] [% 6.8s] [% 6.8s] [%6.8s]\n") + % 1234567897 + % group(setfill('x'), 12) + % group(internal, setfill('x'), 12) + % group(internal, setfill('x'), 1234567890) + % group(internal, setfill('x'), 123456) + ); + if(s != (s2="[ 1234567] [xxx 12] [ xxx12] [ 1234567] [123456]\n") ) { + cerr << s << s2; + BOOST_ERROR("formatting error. (with special paddings)"); + } + + s = str( format("[% 8.6s] [% 6.4s] [% 6.4s] [% 8.6s] [% 8.6s]\n") + % 1234567897 + % group(setfill('x'), 12) + % group(internal, setfill('x'), 12) + % group(internal, setfill('x'), 1234567890) + % group(internal, setfill('x'), 12345) + ); + if(s != (s2="[ 12345] [xxx 12] [ xxx12] [ xx12345] [ xx12345]\n") ) { + cerr << s << s2; + BOOST_ERROR("formatting error. (with special paddings)"); + } + + // nesting formats : + s = str( format("%2$014x [%1%] %|2$05|\n") % (format("%05s / %s") % -18 % 7) + %group(showbase, -100) + ); + if( s != "0x0000ffffff9c [-0018 / 7] -0100\n" ){ + cerr << s ; + BOOST_ERROR("nesting did not work"); + } + + // bind args, and various arguments counts : + { + boost::format bf("%1% %4% %1%"); + bf.bind_arg(1, "one") % 2 % "three" ; + BOOST_CHECK_EQUAL(bf.expected_args(), 4); + BOOST_CHECK_EQUAL(bf.fed_args(), 2); + BOOST_CHECK_EQUAL(bf.bound_args(), 1); + BOOST_CHECK_EQUAL(bf.remaining_args(), 1); + BOOST_CHECK_EQUAL(bf.cur_arg(), 4); + bf.clear_binds(); + bf % "one" % 2 % "three" ; + BOOST_CHECK_EQUAL(bf.expected_args(), 4); + BOOST_CHECK_EQUAL(bf.fed_args(), 3); + BOOST_CHECK_EQUAL(bf.bound_args(), 0); + BOOST_CHECK_EQUAL(bf.remaining_args(), 1); + BOOST_CHECK_EQUAL(bf.cur_arg(), 4); + } + // testcase for bug reported at + // http://lists.boost.org/boost-users/2006/05/19723.php + { + format f("%40t%1%"); + int x = 0; + f.bind_arg(1, x); + f.clear(); + } + + // testcase for bug reported at + // http://lists.boost.org/boost-users/2005/11/15454.php + std::string l_param; + std::string l_str = (boost::format("here is an empty string: %1%") % l_param).str(); + + // testcase for SourceForge bug #1506914 + std::string arg; // empty string + s = str(format("%=8s") % arg); + + return 0; +} |