summaryrefslogtreecommitdiff
path: root/libs/format/test/format_test3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/format/test/format_test3.cpp')
-rw-r--r--libs/format/test/format_test3.cpp132
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;
+}