/* Copyright (c) Marshall Clow 2008-2012. Distributed under 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) For more information, see http://www.boost.org */ #include #include #include #include #include #include template struct is_ : public std::unary_function { is_ ( T v ) : val_ ( v ) {} ~is_ () {} bool operator () ( T comp ) const { return val_ == comp; } private: is_ (); // need a value T val_; }; namespace ba = boost::algorithm; void test_one () { // Note: The literal values here are tested against directly, careful if you change them: int some_numbers[] = { 1, 1, 2, 3, 5 }; std::vector vi(some_numbers, some_numbers + 5); std::list li(vi.begin(), vi.end ()); int some_letters[] = { 'a', 'q', 'n', 'y', 'n' }; std::vector vc(some_letters, some_letters + 5); BOOST_CHECK (!ba::one_of_equal ( vi, 1 )); BOOST_CHECK (!ba::one_of ( vi, is_ ( 1 ))); BOOST_CHECK (!ba::one_of_equal ( vi.begin(), vi.end(), 1 )); BOOST_CHECK (!ba::one_of ( vi.begin(), vi.end(), is_ ( 1 ))); BOOST_CHECK (!ba::one_of_equal ( vi, 0 )); BOOST_CHECK (!ba::one_of ( vi, is_ ( 0 ))); BOOST_CHECK (!ba::one_of_equal ( vi.begin(), vi.end(), 0 )); BOOST_CHECK (!ba::one_of ( vi.begin(), vi.end(), is_ ( 0 ))); BOOST_CHECK ( ba::one_of_equal ( vi, 2 )); BOOST_CHECK ( ba::one_of ( vi, is_ ( 2 ))); BOOST_CHECK ( ba::one_of_equal ( vi.begin(), vi.end(), 2 )); BOOST_CHECK ( ba::one_of ( vi.begin(), vi.end(), is_ ( 2 ))); // Check for a match at the end BOOST_CHECK ( ba::one_of_equal ( vi, 5 )); BOOST_CHECK ( ba::one_of ( vi, is_ ( 5 ))); BOOST_CHECK ( ba::one_of_equal ( vi.begin(), vi.end(), 5 )); BOOST_CHECK ( ba::one_of ( vi.begin(), vi.end(), is_ ( 5 ))); BOOST_CHECK ( ba::one_of_equal ( vi.begin() + 1, vi.end(), 1 )); BOOST_CHECK ( ba::one_of ( vi.begin() + 1, vi.end(), is_ ( 1 ))); BOOST_CHECK ( ba::one_of_equal ( vc.begin() + 1, vc.begin() + 2, 'q' )); BOOST_CHECK ( ba::one_of ( vc.begin() + 1, vc.begin() + 2, is_ ( 'q' ))); BOOST_CHECK (!ba::one_of_equal ( vc, '!' )); BOOST_CHECK (!ba::one_of ( vc, is_ ( '!' ))); BOOST_CHECK (!ba::one_of_equal ( vc, 'n' )); BOOST_CHECK (!ba::one_of ( vc, is_ ( 'n' ))); // Empty range check BOOST_CHECK (!ba::one_of_equal ( vi.begin(), vi.begin(), 1 )); BOOST_CHECK (!ba::one_of_equal ( vc.begin(), vc.begin(), 'a' )); BOOST_CHECK (!ba::one_of ( vi.begin(), vi.begin(), is_ ( 1 ))); BOOST_CHECK (!ba::one_of ( vc.begin(), vc.begin(), is_ ( 'a' ))); BOOST_CHECK (!ba::one_of_equal ( li, 1 )); BOOST_CHECK (!ba::one_of ( li, is_ ( 1 ))); BOOST_CHECK (!ba::one_of_equal ( li.begin(), li.end(), 1 )); BOOST_CHECK (!ba::one_of ( li.begin(), li.end(), is_ ( 1 ))); std::list::iterator l_iter = li.begin (); l_iter++; l_iter++; l_iter++; BOOST_CHECK (!ba::one_of_equal ( li.begin(), l_iter, 1 )); BOOST_CHECK (!ba::one_of ( li.begin(), l_iter, is_ ( 1 ))); BOOST_CHECK ( ba::one_of_equal ( li.begin(), l_iter, 2 )); BOOST_CHECK ( ba::one_of ( li.begin(), l_iter, is_ ( 2 ))); BOOST_CHECK (!ba::one_of_equal ( li.begin(), l_iter, 3 )); BOOST_CHECK (!ba::one_of ( li.begin(), l_iter, is_ ( 3 ))); } int test_main( int , char* [] ) { test_one (); return 0; }