1 // Boost.Assign library
2 //
3 //  Copyright Thorsten Ottosen 2003-2004. Use, modification and
4 //  distribution is subject to the Boost Software License, Version
5 //  1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 //  http://www.boost.org/LICENSE_1_0.txt)
7 //
8 // For more information, see http://www.boost.org/libs/assign/
9 //
10 
11 
12 #include <boost/detail/workaround.hpp>
13 
14 #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
15 #  pragma warn -8091 // supress warning in Boost.Test
16 #  pragma warn -8057 // unused argument argc/argv in Boost.Test
17 #endif
18 
19 #include <boost/assign/std.hpp>
20 #include <boost/test/test_tools.hpp>
21 #include <utility>
22 #include <string>
23 
24 using namespace std;
25 using namespace boost::assign;
26 
27 template< typename K, typename V >
P(K k,V v)28 inline pair<K,V> P( K k, V v )
29 {
30     return make_pair( k, v );
31 }
32 
33 struct three
34 {
threethree35     three( int, int, int ) { }
threethree36     three( const string&, const string&, const string& ) { }
37 };
38 
39 struct four
40 {
fourfour41     four( int, int, int, int ) { }
fourfour42     four( const string&, const string&, const string&, const string& ) { }
43 };
44 
45 struct five
46 {
fivefive47     five( int, int, int, int, int ) { }
fivefive48     five( const string&, const string&, const string&,
49           const string&, const string& ) { }
50 };
51 
52 
53 
54 template< class C >
test_int_sequence()55 void test_int_sequence()
56 {
57     C c;
58 
59     BOOST_CHECK_EQUAL( c.size(), 0u );
60     c +=1,2,3,4,5,6,7,8,9,10;
61     BOOST_CHECK_EQUAL( c.size(), 10u );
62 }
63 
64 
65 
66 template< class C >
test_string_sequence()67 void test_string_sequence()
68 {
69     C c;
70 
71     BOOST_CHECK_EQUAL( c.size(), 0u );
72     c += "1","2","3","4","5","6","7","8","9","10";
73     BOOST_CHECK_EQUAL( c.size(), 10u );
74 }
75 
76 
77 
78 typedef pair<string,int> two_tuple;
79 
80 template< class C >
test_tuple_sequence()81 void test_tuple_sequence()
82 {
83     C c;
84 
85     BOOST_CHECK_EQUAL( c.size(), 0u );
86     c += P("1",1), P("2",2), P("3",3), P("4",4), P("5",5), P("6",6),
87          P("7",7), P("8",8), P("9",9), P("10",10);
88     BOOST_CHECK_EQUAL( c.size(), 10u );
89 }
90 
91 
92 
93 template< class M >
test_map()94 void test_map()
95 {
96     M m;
97     m += P( "january",   31 ), P( "february", 28 ),
98          P( "march",     31 ), P( "april",    30 ),
99          P( "may",       31 ), P( "june",     30 ),
100          P( "july",      31 ), P( "august",   31 ),
101          P( "september", 30 ), P( "october",  31 ),
102          P( "november",  30 ), P( "december", 31 );
103     BOOST_CHECK_EQUAL( m.size(), 12u );
104     m.clear();
105     insert( m )
106         ( "january",   31 )( "february", 28 )
107         ( "march",     31 )( "april",    30 )
108         ( "may",       31 )( "june",     30 )
109         ( "july",      31 )( "august",   31 )
110         ( "september", 30 )( "october",  31 )
111         ( "november",  30 )( "december", 31 );
112     BOOST_CHECK_EQUAL( m.size(), 12u );
113 }
114 
115 
116 
test_tuple()117 void test_tuple()
118 {
119     vector<three>    v_three;
120     vector<four>     v_four;
121     vector<five>     v_five;
122 
123     push_back( v_three ) (1,2,3) ("1","2","3");
124     push_back( v_four ) (1,2,3,4) ("1","2","3","4");
125     push_back( v_five ) (1,2,3,4,5) ("1","2","3","4","5");
126     BOOST_CHECK_EQUAL( v_three.size(), 2u );
127     BOOST_CHECK_EQUAL( v_four.size(), 2u );
128     BOOST_CHECK_EQUAL( v_five.size(), 2u );
129 
130 }
131 
132 
133 
check_std()134 void check_std()
135 {
136     test_int_sequence< deque<int> >();
137     test_int_sequence< list<int> >();
138     test_int_sequence< vector<int> >();
139     test_int_sequence< set<int> >();
140     test_int_sequence< multiset<int> >();
141     test_int_sequence< stack<int> >();
142     test_int_sequence< queue<int> >();
143     test_int_sequence< priority_queue<int> >();
144 
145     test_string_sequence< deque<string> >();
146     test_string_sequence< list<string> >();
147     test_string_sequence< vector<string> >();
148     test_string_sequence< set<string> >();
149     test_string_sequence< multiset<string> >();
150     test_string_sequence< stack<string> >();
151     test_string_sequence< queue<string> >();
152     test_string_sequence< priority_queue<string> >();
153 
154     test_tuple_sequence< deque<two_tuple> >();
155     test_tuple_sequence< list<two_tuple> >();
156     test_tuple_sequence< vector<two_tuple> >();
157     test_tuple_sequence< set<two_tuple> >();
158     test_tuple_sequence< multiset<two_tuple> >();
159     test_tuple_sequence< stack<two_tuple> >();
160     test_tuple_sequence< queue<two_tuple> >();
161     test_tuple_sequence< priority_queue<two_tuple> >();
162     test_tuple();
163 
164     deque<int>          di;
165     push_back( di )( 1 );
166     push_front( di )( 2 );
167     BOOST_CHECK_EQUAL( di[0], 2 );
168     BOOST_CHECK_EQUAL( di[1], 1 );
169 
170     list<int>           li;
171     push_back( li )( 2 );
172     push_front( li )( 1 );
173     BOOST_CHECK_EQUAL( li.front(), 1 );
174     BOOST_CHECK_EQUAL( li.back(), 2 );
175 
176     vector<int>         vi;
177     push_back( vi ) = 2,3;
178     BOOST_CHECK_EQUAL( vi[0], 2 );
179     BOOST_CHECK_EQUAL( vi[1], 3 );
180 
181     set<int>            si;
182     insert( si )( 4 );
183     BOOST_CHECK_EQUAL( *si.find( 4 ), 4 );
184 
185     multiset<int>       msi;
186     insert( msi )( 5 );
187     BOOST_CHECK_EQUAL( *msi.find( 5 ), 5 );
188 
189     stack<int>          sti;
190     push( sti )( 6 );
191     BOOST_CHECK_EQUAL( sti.top(), 6 );
192 
193     queue<int>          qi;
194     push( qi )( 7 );
195     BOOST_CHECK_EQUAL( qi.back(), 7 );
196 
197     priority_queue<int> pqi;
198     push( pqi )( 8 );
199     BOOST_CHECK_EQUAL( pqi.top(), 8 );
200 
201     test_map< map<string,int> >();
202     test_map< multimap<string,int> >();
203 
204 }
205 
206 
207 
208 #include <boost/test/unit_test.hpp>
209 using boost::unit_test::test_suite;
210 
init_unit_test_suite(int argc,char * argv[])211 test_suite* init_unit_test_suite( int argc, char* argv[] )
212 {
213     test_suite* test = BOOST_TEST_SUITE( "List Test Suite" );
214 
215     test->add( BOOST_TEST_CASE( &check_std ) );
216 
217     return test;
218 }
219 
220