123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- // Boost.Bimap
- //
- // Copyright (c) 2006-2007 Matias Capeletto
- //
- // 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)
- // VC++ 8.0 warns on usage of certain Standard Library and API functions that
- // can be cause buffer overruns or other possible security issues if misused.
- // See https://web.archive.org/web/20071014014301/http://msdn.microsoft.com/msdnmag/issues/05/05/SafeCandC/default.aspx
- // But the wording of the warning is misleading and unsettling, there are no
- // portable alternative functions, and VC++ 8.0's own libraries use the
- // functions in question. So turn off the warnings.
- #define _CRT_SECURE_NO_DEPRECATE
- #define _SCL_SECURE_NO_DEPRECATE
- #include <boost/config.hpp>
- // Boost.Test
- #include <boost/test/minimal.hpp>
- // Boost.Bimap
- #include <boost/bimap/support/lambda.hpp>
- #include <boost/bimap/bimap.hpp>
- struct id{};
- void test_bimap_modify()
- {
- using namespace boost::bimaps;
- typedef bimap<int,long> bm;
- bm b;
- b.insert( bm::value_type(2,200) );
- BOOST_CHECK( b.left.at(2) == 200 );
- bool result;
- // replace
- //----------------------------------------------------------------------
- // successful replace in left map view
- {
- bm::left_iterator i = b.left.begin();
- result = b.left.replace( i, bm::left_value_type(1,100) );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->first == 1 && i->second == 100 );
- BOOST_CHECK( b.left.at(1) == 100 );
- result = b.left.replace_key( i, 2 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->first == 2 && i->second == 100 );
- BOOST_CHECK( b.left.at(2) == 100 );
- result = b.left.replace_data( i, 200 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->first == 2 && i->second == 200 );
- BOOST_CHECK( b.left.at(2) == 200 );
- }
- // successful replace in right map view
- {
- bm::right_iterator i = b.right.begin();
- result = b.right.replace( i, bm::right_value_type(100,1) );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->first == 100 && i->second == 1 );
- BOOST_CHECK( b.right.at(100) == 1 );
- result = b.right.replace_key( i, 200 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->first == 200 && i->second == 1 );
- BOOST_CHECK( b.right.at(200) == 1 );
- result = b.right.replace_data( i, 2 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->first == 200 && i->second == 2 );
- BOOST_CHECK( b.right.at(200) == 2 );
- }
- // successful replace in set of relations view
- {
- bm::iterator i = b.begin();
- result = b.replace( i, bm::value_type(1,100) );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->left == 1 && i->right == 100 );
- BOOST_CHECK( b.left.at(1) == 100 );
- result = b.replace_left( i, 2 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->left == 2 && i->right == 100 );
- BOOST_CHECK( b.left.at(2) == 100 );
- result = b.replace_right( b.begin(), 200 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->left == 2 && i->right == 200 );
- BOOST_CHECK( b.left.at(2) == 200 );
- }
- b.clear();
- b.insert( bm::value_type(1,100) );
- b.insert( bm::value_type(2,200) );
- // fail to replace in left map view
- {
- bm::left_iterator i = b.left.begin();
- result = b.left.replace( i, bm::left_value_type(2,100) );
- BOOST_CHECK( ! result );
- BOOST_CHECK( b.size() == 2 );
- BOOST_CHECK( i->first == 1 && i->second == 100 );
- BOOST_CHECK( b.left.at(1) == 100 );
- BOOST_CHECK( b.left.at(2) == 200 );
- // Add checks for replace_key and replace_data
- }
- // Add checks for fail to replace in right map view
- // Add checks for fail to replace in set of relations view
- // modify
- // ----------------------------------------------------------------------
- b.clear();
- b.insert( bm::value_type(1,100) );
- // successful modify in left map view
- {
- result = b.left.modify_key( b.left.begin(), _key = 2 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( b.left.at(2) == 100 );
- result = b.left.modify_data( b.left.begin() , _data = 200 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( b.left.at(2) == 200 );
- }
- // Add checks for successful modify in right map view
- // Add checks for fails to modify in left map view
- }
- void test_bimap_replace_with_info()
- {
- using namespace boost::bimaps;
- typedef bimap<int,long,with_info<int> > bm;
- bm b;
- b.insert( bm::value_type(2,200,-2) );
- BOOST_CHECK( b.left.at(2) == 200 );
- BOOST_CHECK( b.left.info_at(2) == -2 );
-
- // Use set view
- {
- bm::iterator i = b.begin();
- bool result = b.replace( i, bm::value_type(1,100,-1) );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->left == 1 && i->right == 100 );
- BOOST_CHECK( i->info == -1 );
-
- result = b.replace_left( i, 2 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->left == 2 && i->right == 100 );
- BOOST_CHECK( i->info == -1 );
-
- result = b.replace_right( i, 200 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.size() == 1 );
- BOOST_CHECK( i->left == 2 && i->right == 200 );
- BOOST_CHECK( i->info == -1 );
- }
- // Use map view
- {
- bm::left_iterator i = b.left.begin();
- bool result = b.left.replace( i, bm::left_value_type(1,100,-1) );
- BOOST_CHECK( result );
- BOOST_CHECK( b.left.size() == 1 );
- BOOST_CHECK( i->first == 1 && i->second == 100 );
- BOOST_CHECK( i->info == -1 );
-
- result = b.left.replace_key( i, 2 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.left.size() == 1 );
- BOOST_CHECK( i->first == 2 && i->second == 100 );
- BOOST_CHECK( i->info == -1 );
-
- result = b.left.replace_data( i, 200 );
- BOOST_CHECK( result );
- BOOST_CHECK( b.left.size() == 1 );
- BOOST_CHECK( i->first == 2 && i->second == 200 );
- BOOST_CHECK( i->info == -1 );
- }
- }
- int test_main( int, char* [] )
- {
- test_bimap_modify();
- test_bimap_replace_with_info();
-
- return 0;
- }
|