diff -r e20de85af2ee -r ce057bb09d0b stdcpp/tsrc/Boost_test/multi_index/src/test_special_set_ops.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stdcpp/tsrc/Boost_test/multi_index/src/test_special_set_ops.cpp Fri Jun 04 16:20:51 2010 +0100 @@ -0,0 +1,95 @@ +/* Boost.MultiIndex test for special set operations. + * + * Copyright 2003-2005 Joaquín M López Muñoz. + * 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) + * + * See http://www.boost.org/libs/multi_index for library home page. + */ + +#include "test_special_set_ops.hpp" + +#include /* keep it first to prevent nasty warns in MSVC */ +#include +#include +#include "pre_multi_index.hpp" +#include "employee.hpp" +#include + +using namespace boost::multi_index; + +static int string_to_int(const std::string& str) +{ + std::istringstream iss(str); + int res = 0; + iss>>res; + return res; +} + +struct comp_int_string +{ + bool operator()(int x,const std::string& y)const + { + return x()(string_to_int(x)); + } +}; + +struct eq_string_int +{ + bool operator()(int x,const std::string& y)const + { + return x==string_to_int(y); + } + + bool operator()(const std::string& x,int y)const + { + return operator()(y,x); + } +}; + +void test_special_set_ops() +{ + employee_set es; + + es.insert(employee(0,"Joe",31,1123)); + es.insert(employee(1,"Robert",27,5601)); + es.insert(employee(2,"John",40,7889)); + es.insert(employee(3,"Albert",20,9012)); + es.insert(employee(4,"John",57,1002)); + + std::pair p= + get(es).equal_range( + "7889",hash_string_as_int(),eq_string_int()); + + BOOST_CHECK(std::distance(p.first,p.second)==1&&(p.first)->id==2); + + BOOST_CHECK( + get(es).count( + "5601",hash_string_as_int(),eq_string_int())==1); + + BOOST_CHECK( + get(es).find( + "1123",hash_string_as_int(),eq_string_int())->name=="Joe"); + + BOOST_CHECK( + std::distance( + get(es).lower_bound("27",comp_int_string()), + get(es).upper_bound("40",comp_int_string()))==3); + + BOOST_CHECK(es.count(2,employee::comp_id())==1); + BOOST_CHECK(es.count(5,employee::comp_id())==0); +}