]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/test/doc/snippet/const_string_test.cpp
1 // (C) Copyright Gennadiy Rozental 2001-2014.
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
6 // See http://www.boost.org/libs/test for the library home page.
8 // Description : simple string class test
9 // ***************************************************************************
11 #define BOOST_TEST_MODULE const_string test
12 #include <boost/test/unit_test.hpp>
14 #include <const_string.hpp>
15 using common_layer::const_string
;
17 BOOST_AUTO_TEST_CASE( constructors_test
)
19 const_string
cs0( "" );
20 BOOST_CHECK_EQUAL( cs0
.length(), (size_t)0 );
21 BOOST_CHECK_EQUAL( cs0
.begin(), "" );
22 BOOST_CHECK_EQUAL( cs0
.end(), "" );
23 BOOST_CHECK( cs0
.is_empty() );
25 const_string
cs01( NULL
);
26 BOOST_CHECK_EQUAL( cs01
.length(), (size_t)0 );
27 BOOST_CHECK_EQUAL( cs01
.begin(), "" );
28 BOOST_CHECK_EQUAL( cs01
.end(), "" );
29 BOOST_CHECK( cs01
.is_empty() );
31 const_string
cs1( "test_string" );
32 BOOST_CHECK_EQUAL( std::strcmp( cs1
.data(), "test_string" ), 0 );
33 BOOST_CHECK_EQUAL( cs1
.length(), std::strlen("test_string") );
35 std::string
s( "test_string" );
36 const_string
cs2( s
);
37 BOOST_CHECK_EQUAL( std::strcmp( cs2
.data(), "test_string" ), 0 );
39 const_string
cs3( cs1
);
40 BOOST_CHECK_EQUAL( std::strcmp( cs1
.data(), "test_string" ), 0 );
42 const_string
cs4( "test_string", 4 );
43 BOOST_CHECK_EQUAL( std::strncmp( cs4
.data(), "test", cs4
.length() ), 0 );
45 const_string
cs5( s
.data(), s
.data() + s
.length() );
46 BOOST_CHECK_EQUAL( std::strncmp( cs5
.data(), "test_string", cs5
.length() ), 0 );
48 const_string cs_array
[] = { "str1", "str2" };
50 BOOST_CHECK_EQUAL( cs_array
[0], "str1" );
51 BOOST_CHECK_EQUAL( cs_array
[1], "str2" );
54 BOOST_AUTO_TEST_CASE( data_access_test
)
56 const_string
cs1( "test_string" );
57 BOOST_CHECK_EQUAL( std::strcmp( cs1
.data(), "test_string" ), 0 );
58 BOOST_CHECK_EQUAL( std::strcmp( cs1
.data(), cs1
), 0 );
60 BOOST_CHECK_EQUAL( cs1
[(size_t)0], 't' );
61 BOOST_CHECK_EQUAL( cs1
[(size_t)4], '_' );
62 BOOST_CHECK_EQUAL( cs1
[cs1
.length()-1], 'g' );
64 BOOST_CHECK_EQUAL( cs1
[(size_t)0], cs1
.at( 0 ) );
65 BOOST_CHECK_EQUAL( cs1
[(size_t)2], cs1
.at( 5 ) );
66 BOOST_CHECK_EQUAL( cs1
.at( cs1
.length() - 1 ), 'g' );
68 BOOST_CHECK_THROW( cs1
.at( cs1
.length() ), std::out_of_range
);
70 BOOST_CHECK_EQUAL( common_layer::first_char()( cs1
), 't' );
71 BOOST_CHECK_EQUAL( common_layer::last_char()( cs1
) , 'g' );
75 BOOST_AUTO_TEST_CASE( length_test
)
79 BOOST_CHECK_EQUAL( cs1
.length(), (size_t)0 );
80 BOOST_CHECK( cs1
.is_empty() );
83 BOOST_CHECK_EQUAL( cs1
.length(), (size_t)0 );
84 BOOST_CHECK( cs1
.is_empty() );
87 BOOST_CHECK_EQUAL( cs1
.length(), (size_t)11 );
90 BOOST_CHECK_EQUAL( cs1
.length(), (size_t)0 );
91 BOOST_CHECK_EQUAL( cs1
.data(), "" );
93 cs1
= const_string( "test_string", 4 );
94 BOOST_CHECK_EQUAL( cs1
.length(), (size_t)4 );
97 BOOST_CHECK_EQUAL( cs1
.length(), (size_t)4 );
100 BOOST_CHECK_EQUAL( cs1
.length(), (size_t)3 );
103 BOOST_CHECK_EQUAL( cs1
.length(), (size_t)2 );
104 BOOST_CHECK_EQUAL( cs1
[(size_t)0], 't' );
107 BOOST_CHECK_EQUAL( cs1
.length(), (size_t)1 );
108 BOOST_CHECK_EQUAL( cs1
[(size_t)0], 'e' );
111 BOOST_CHECK( cs1
.is_empty() );
112 BOOST_CHECK_EQUAL( cs1
.data(), "" );
116 BOOST_CHECK( cs1
.is_empty() );
117 BOOST_CHECK_EQUAL( cs1
.data(), "" );
120 BOOST_AUTO_TEST_CASE( asignment_test
)
123 std::string
s( "test_string" );
126 BOOST_CHECK_EQUAL( std::strcmp( cs1
.data(), "test" ), 0 );
129 BOOST_CHECK_EQUAL( std::strcmp( cs1
.data(), "test_string" ), 0 );
131 cs1
.assign( "test" );
132 BOOST_CHECK_EQUAL( std::strcmp( cs1
.data(), "test" ), 0 );
134 const_string
cs2( "test_string" );
137 BOOST_CHECK_EQUAL( std::strcmp( cs1
.data(), "test_string" ), 0 );
138 BOOST_CHECK_EQUAL( std::strcmp( cs2
.data(), "test" ), 0 );
141 BOOST_AUTO_TEST_CASE( comparison_test
)
143 const_string
cs1( "test_string" );
144 const_string
cs2( "test_string" );
145 std::string
s( "test_string" );
147 BOOST_CHECK_EQUAL( cs1
, "test_string" );
148 BOOST_CHECK_EQUAL( "test_string", cs1
);
149 BOOST_CHECK_EQUAL( cs1
, cs2
);
150 BOOST_CHECK_EQUAL( cs1
, s
);
151 BOOST_CHECK_EQUAL( s
, cs1
);
155 BOOST_CHECK( cs1
!= "test_string" );
156 BOOST_CHECK( "test_string" != cs1
);
157 BOOST_CHECK( cs1
!= cs2
);
158 BOOST_CHECK( cs1
!= s
);
159 BOOST_CHECK( s
!= cs1
);
161 BOOST_CHECK_EQUAL( cs1
, "test" );
164 BOOST_AUTO_TEST_CASE( iterators_test
)
166 const_string
cs1( "test_string" );
169 std::copy( cs1
.begin(), cs1
.end(), std::back_inserter( s
) );
170 BOOST_CHECK_EQUAL( cs1
, s
);
174 std::copy( cs1
.rbegin(), cs1
.rend(), std::back_inserter( s
) );
175 BOOST_CHECK_EQUAL( const_string( s
), "gnirts_tset" );
178 BOOST_AUTO_TEST_CASE( search_test
)
180 const_string
cs( "test_string" );
182 BOOST_CHECK_EQUAL( cs
.find_first_of( 't' ), cs
.begin() );
183 BOOST_CHECK_EQUAL( cs
.find_last_of( 't' ), cs
.begin() + 6 );
185 BOOST_CHECK_EQUAL( cs
.find_first_of( "st" ), cs
.begin() + 2 );
186 BOOST_CHECK_EQUAL( cs
.find_last_of( "st" ), cs
.begin() + 5 );