| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | //  Boost string_algo library iterator_test.cpp file  ---------------------------//
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //  Copyright Pavol Droba 2002-2003. Use, modification and
 | 
					
						
							|  |  |  | //  distribution is 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 for updates, documentation, and revision history.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-16 14:10:08 +00:00
										 |  |  | #include <boost/algorithm/string/split.hpp>
 | 
					
						
							|  |  |  | #include <boost/algorithm/string/classification.hpp>
 | 
					
						
							|  |  |  | // equals predicate is used for result comparison
 | 
					
						
							|  |  |  | #include <boost/algorithm/string/predicate.hpp>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | // Include unit test framework
 | 
					
						
							| 
									
										
										
										
											2013-02-08 17:21:43 +00:00
										 |  |  | #define BOOST_TEST_MAIN
 | 
					
						
							|  |  |  | #include <boost/test/unit_test.hpp>
 | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <string>
 | 
					
						
							|  |  |  | #include <vector>
 | 
					
						
							| 
									
										
										
										
											2013-02-08 17:21:43 +00:00
										 |  |  | #include <list>
 | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | #include <iostream>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <boost/test/test_tools.hpp>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace std; | 
					
						
							|  |  |  | using namespace boost; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template< typename T1, typename T2 > | 
					
						
							|  |  |  | void deep_compare( const T1& X, const T2& Y ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     BOOST_REQUIRE( X.size() == Y.size() ); | 
					
						
							|  |  |  |     for( unsigned int nIndex=0; nIndex<X.size(); ++nIndex ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         BOOST_CHECK( equals( X[nIndex], Y[nIndex] ) ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void iterator_test() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     string str1("xx-abc--xx-abb"); | 
					
						
							| 
									
										
										
										
											2005-04-11 07:41:01 +00:00
										 |  |  |     string str2("Xx-abc--xX-abb-xx"); | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  |     string str3("xx"); | 
					
						
							| 
									
										
										
										
											2010-10-27 20:42:22 +00:00
										 |  |  |     string strempty(""); | 
					
						
							| 
									
										
										
										
											2005-04-14 16:08:58 +00:00
										 |  |  |     const char* pch1="xx-abc--xx-abb"; | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  |     vector<string> tokens; | 
					
						
							|  |  |  |     vector< vector<int> > vtokens; | 
					
						
							| 
									
										
										
										
											2013-02-08 17:21:43 +00:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2004-07-13 14:59:43 +00:00
										 |  |  |     // find_all tests
 | 
					
						
							|  |  |  |     find_all( | 
					
						
							|  |  |  |         tokens, | 
					
						
							|  |  |  |         pch1, | 
					
						
							|  |  |  |         "xx" ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     BOOST_REQUIRE( tokens.size()==2 ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[0]==string("xx") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[1]==string("xx") ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-16 09:08:21 +00:00
										 |  |  |     ifind_all( | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  |         tokens, | 
					
						
							|  |  |  |         str2, | 
					
						
							|  |  |  |         "xx" ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-11 07:41:01 +00:00
										 |  |  |     BOOST_REQUIRE( tokens.size()==3 ); | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  |     BOOST_CHECK( tokens[0]==string("Xx") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[1]==string("xX") ); | 
					
						
							| 
									
										
										
										
											2005-04-11 07:41:01 +00:00
										 |  |  |     BOOST_CHECK( tokens[2]==string("xx") ); | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     find_all( | 
					
						
							|  |  |  |         tokens, | 
					
						
							|  |  |  |         str1, | 
					
						
							|  |  |  |         "xx" ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     BOOST_REQUIRE( tokens.size()==2 ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[0]==string("xx") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[1]==string("xx") ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     find_all( | 
					
						
							|  |  |  |         vtokens, | 
					
						
							|  |  |  |         str1, | 
					
						
							|  |  |  |         string("xx") ); | 
					
						
							|  |  |  |     deep_compare( tokens, vtokens ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // split tests
 | 
					
						
							|  |  |  |     split( | 
					
						
							|  |  |  |         tokens, | 
					
						
							| 
									
										
										
										
											2005-04-11 07:41:01 +00:00
										 |  |  |         str2, | 
					
						
							|  |  |  |         is_any_of("xX"), | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  |         token_compress_on ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-11 07:41:01 +00:00
										 |  |  |     BOOST_REQUIRE( tokens.size()==4 ); | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  |     BOOST_CHECK( tokens[0]==string("") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[1]==string("-abc--") ); | 
					
						
							| 
									
										
										
										
											2005-04-11 07:41:01 +00:00
										 |  |  |     BOOST_CHECK( tokens[2]==string("-abb-") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[3]==string("") ); | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     split( | 
					
						
							|  |  |  |         tokens, | 
					
						
							|  |  |  |         pch1, | 
					
						
							|  |  |  |         is_any_of("x"), | 
					
						
							|  |  |  |         token_compress_on ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     BOOST_REQUIRE( tokens.size()==3 ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[0]==string("") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[1]==string("-abc--") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[2]==string("-abb") ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     split( | 
					
						
							|  |  |  |         vtokens, | 
					
						
							|  |  |  |         str1, | 
					
						
							|  |  |  |         is_any_of("x"), | 
					
						
							|  |  |  |         token_compress_on ); | 
					
						
							|  |  |  |     deep_compare( tokens, vtokens ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     split( | 
					
						
							|  |  |  |         tokens, | 
					
						
							|  |  |  |         str1, | 
					
						
							|  |  |  |         is_punct(), | 
					
						
							|  |  |  |         token_compress_off ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     BOOST_REQUIRE( tokens.size()==5 ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[0]==string("xx") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[1]==string("abc") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[2]==string("") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[3]==string("xx") ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[4]==string("abb") ); | 
					
						
							| 
									
										
										
										
											2007-07-01 22:24:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-27 20:42:22 +00:00
										 |  |  |     split( | 
					
						
							|  |  |  |         tokens, | 
					
						
							|  |  |  |         str3, | 
					
						
							|  |  |  |         is_any_of(","), | 
					
						
							|  |  |  |         token_compress_off); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     BOOST_REQUIRE( tokens.size()==1 ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[0]==string("xx") ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     split( | 
					
						
							|  |  |  |         tokens, | 
					
						
							|  |  |  |         strempty, | 
					
						
							|  |  |  |         is_punct(), | 
					
						
							|  |  |  |         token_compress_off); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     BOOST_REQUIRE( tokens.size()==1 ); | 
					
						
							|  |  |  |     BOOST_CHECK( tokens[0]==string("") ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-07-01 22:24:29 +00:00
										 |  |  |     find_iterator<string::iterator> fiter=make_find_iterator(str1, first_finder("xx")); | 
					
						
							| 
									
										
										
										
											2012-11-28 18:19:36 +00:00
										 |  |  |     find_iterator<string::iterator> fiter2; | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2007-07-01 22:24:29 +00:00
										 |  |  |     BOOST_CHECK(equals(*fiter, "xx")); | 
					
						
							|  |  |  |     ++fiter; | 
					
						
							| 
									
										
										
										
											2012-11-28 18:19:36 +00:00
										 |  |  |      | 
					
						
							|  |  |  |     fiter2 = fiter; | 
					
						
							|  |  |  |     BOOST_CHECK(equals(*fiter,  "xx")); | 
					
						
							|  |  |  |     BOOST_CHECK(equals(*fiter2, "xx")); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-07-01 22:24:29 +00:00
										 |  |  |     ++fiter; | 
					
						
							|  |  |  |     BOOST_CHECK(fiter==find_iterator<string::iterator>()); | 
					
						
							| 
									
										
										
										
											2012-11-28 18:19:36 +00:00
										 |  |  |     BOOST_CHECK(equals(*fiter2, "xx")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ++fiter2; | 
					
						
							|  |  |  |     BOOST_CHECK(fiter2==find_iterator<string::iterator>()); | 
					
						
							| 
									
										
										
										
											2007-07-01 22:24:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     split_iterator<string::iterator> siter=make_split_iterator(str1, token_finder(is_any_of("-"), token_compress_on)); | 
					
						
							| 
									
										
										
										
											2012-11-28 18:19:36 +00:00
										 |  |  |     split_iterator<string::iterator> siter2; | 
					
						
							| 
									
										
										
										
											2007-07-01 22:24:29 +00:00
										 |  |  |     BOOST_CHECK(equals(*siter, "xx")); | 
					
						
							|  |  |  |     ++siter; | 
					
						
							| 
									
										
										
										
											2012-11-28 18:19:36 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     siter2 = siter; | 
					
						
							|  |  |  |     BOOST_CHECK(equals(*siter,  "abc")); | 
					
						
							|  |  |  |     BOOST_CHECK(equals(*siter2, "abc")); | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2007-07-01 22:24:29 +00:00
										 |  |  |     ++siter; | 
					
						
							| 
									
										
										
										
											2012-11-28 18:19:36 +00:00
										 |  |  |     BOOST_CHECK(equals(*siter,  "xx")); | 
					
						
							|  |  |  |     BOOST_CHECK(equals(*siter2, "abc")); | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2007-07-01 22:24:29 +00:00
										 |  |  |     ++siter; | 
					
						
							|  |  |  |     BOOST_CHECK(equals(*siter, "abb")); | 
					
						
							|  |  |  |     ++siter; | 
					
						
							| 
									
										
										
										
											2010-06-09 23:12:56 +00:00
										 |  |  |     BOOST_CHECK(siter==split_iterator<string::iterator>(siter)); | 
					
						
							| 
									
										
										
										
											2007-07-01 22:24:29 +00:00
										 |  |  |     BOOST_CHECK(siter==split_iterator<string::iterator>()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-08 17:21:43 +00:00
										 |  |  | //  Make sure we work with forward iterators
 | 
					
						
							|  |  |  | //	See bug #7989
 | 
					
						
							|  |  |  |     list<char> l1; | 
					
						
							|  |  |  |     find_iterator<list<char>::iterator> liter=make_find_iterator(l1, first_finder("xx")); | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-08 17:21:43 +00:00
										 |  |  | BOOST_AUTO_TEST_CASE( test_main ) | 
					
						
							| 
									
										
										
										
											2004-03-04 22:12:19 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     iterator_test(); | 
					
						
							|  |  |  | } |