構成 | |
| struct | del_counter |
| コンストラクタ、デストラクタでカウントアップ [詳細] | |
関数 | |
| void | begin () |
| template<typename ContGen> void | basic_sequence () |
| シーケンスコンテナの基本テスト | |
| template<typename Cont> void | dump (const Cont &cont) |
| バイナリファイルへの直接書き込み・読み込みテスト | |
| template<typename ContGen> void | dump () |
|
|||||||||
|
シーケンスコンテナの基本テスト
basic_sequence.h の 14 行で定義されています。 参照先 static_container::size_type.
00014 {
00015 struct local_func {
00016 static void test_del_counter() {
00017 const size_type size = 10;
00018 typedef ContGen::gen< del_counter, size >::type Cont;
00019 BOOST_REQUIRE( size == Cont::max_size() );
00020 size_type del_count = 0;
00021 {
00022 Cont cont;
00023 BOOST_REQUIRE( cont.empty() );
00024 BOOST_REQUIRE( 0 == cont.size() );
00025 cont.push_back( del_counter( del_count ) );
00026 // 一時オブジェクトの破棄を確認
00027 BOOST_REQUIRE( 1 == del_count );
00028 BOOST_REQUIRE( !cont.empty() );
00029 BOOST_REQUIRE( 1 == cont.size() );
00030 }
00031 // cont のデストラクタによる解放を確認
00032 BOOST_REQUIRE( 2 == del_count );
00033
00034 del_count = 0;
00035 {
00036 Cont cont;
00037 for ( size_type i = 0; i < size; ++i ) {
00038 cont.push_back( del_counter( del_count ) );
00039 BOOST_REQUIRE( i + 1 == cont.size() );
00040 }
00041 BOOST_REQUIRE( 10 == del_count );
00042 for ( size_type i = 0; i < size; ++i ) {
00043 cont.pop_back();
00044 BOOST_REQUIRE( size - i - 1 == cont.size() );
00045 }
00046 BOOST_REQUIRE( 20 == del_count );
00047 }
00048 BOOST_REQUIRE( 20 == del_count );
00049
00050 del_count = 0;
00051 {
00052 Cont cont;
00053 for ( size_type i = 0; i < size; ++i ) {
00054 cont.push_back( del_counter( del_count ) );
00055 BOOST_REQUIRE( i + 1 == cont.size() );
00056 }
00057 BOOST_REQUIRE( 10 == del_count );
00058 cont.clear();
00059 BOOST_REQUIRE( 20 == del_count );
00060 }
00061 BOOST_REQUIRE( 20 == del_count );
00062 }
00063
00064 static void test_int() {
00065 const size_type size = 10;
00066 typedef ContGen::gen< int, size >::type Cont;
00067 typedef Cont::iterator iterator;
00068 typedef Cont::const_iterator const_iterator;
00069 BOOST_REQUIRE( size == Cont::max_size() );
00070
00071 Cont cont;
00072 cont.push_back( 123 );
00073 BOOST_REQUIRE( 123 == cont.front() );
00074 cont.front() = 33;
00075 BOOST_REQUIRE( 33 == cont.front() );
00076 cont.push_back( 53 );
00077 BOOST_REQUIRE( 33 == cont.front() );
00078 BOOST_REQUIRE( 53 == cont.back() );
00079
00080 Cont::iterator it = cont.begin();
00081 BOOST_REQUIRE( 33 == *it );
00082 ++it;
00083 BOOST_REQUIRE( 53 == *it );
00084
00085 Cont another( cont );
00086 BOOST_REQUIRE( another == cont );
00087 cont.push_back( 0 );
00088 BOOST_REQUIRE( another != cont );
00089 BOOST_REQUIRE( another < cont );
00090 ++another.back();
00091 BOOST_REQUIRE( cont < another );
00092 another = cont;
00093 BOOST_REQUIRE( cont == another );
00094 cont = cont; // 自己代入テスト
00095 BOOST_REQUIRE( cont == another );
00096
00097 cont.clear();
00098
00099 for ( int i = 0; i < static_cast< int >( size ); ++i ) {
00100 cont.push_back( i );
00101 }
00102 for ( iterator it = cont.begin(); it != cont.end(); ++it ) {
00103 BOOST_REQUIRE( std::distance( cont.begin(), it ) == *it );
00104 }
00105 cont.clear();
00106
00107 // iterator から const_iterator への暗黙のキャストは可能か?
00108 const_iterator cit = cont.begin();
00109
00110 // 多重クリア
00111 for ( int i = 0; i < 10; ++i ) {
00112 cont.clear();
00113 }
00114 }
00115 };
00116
00117 local_func::test_del_counter();
00118 local_func::test_int();
00119 }
|
|
|
assert_new.h の 17 行で定義されています。 参照先 begin_test.
00017 {
00018 begin_test = true;
00019 }
|
|
|||||||||
|
00023 {
00024 ContGen::gen< int, 10 >::type iv;
00025 test::dump( iv );
00026
00027 iv.push_back( 100 );
00028 iv.push_back( 50 );
00029 test::dump( iv );
00030 }
|
|
||||||||||
|
バイナリファイルへの直接書き込み・読み込みテスト
00012 {
00013 char fileImage1[ sizeof( Cont ) ];
00014 char fileImage2[ sizeof( Cont ) ];
00015
00016 memcpy( fileImage1, &cont, sizeof( Cont ) );
00017 memcpy( fileImage2, fileImage1, sizeof( Cont ) );
00018 Cont* dest = reinterpret_cast< Cont* >( fileImage2 );
00019 BOOST_REQUIRE( cont == *dest );
00020 }
|
1.3.6