メインページ | ネームスペース一覧 | クラス階層 | 構成 | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ | 関連ページ

basic_sequence.h

#include <gslib/numeric.h>
#include <boost/assert.hpp>
#include <gslib/test/del_counter.h>

basic_sequence.hのインクルード依存関係図

Include dependency graph

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

Included by dependency graph

ソースコードを見る。

関数

template<typename ContGen> void basic_sequence ()
 シーケンスコンテナの基本テスト


関数

template<typename ContGen>
void basic_sequence  ) 
 

シーケンスコンテナの基本テスト

basic_sequence.h11 行で定義されています。

00011                       {
00012     using namespace gslib;
00013     using namespace test;
00014     using namespace static_container;
00015     
00016     struct local_func {
00017         static void test_del_counter() {
00018             const size_t    size = 10;
00019             typedef ContGen::gen< del_counter, size >::type Cont;
00020             BOOST_REQUIRE( size == Cont::max_size() );
00021             int del_count = 0;
00022             {
00023                 Cont cont;
00024                 BOOST_REQUIRE( cont.empty() );
00025                 BOOST_REQUIRE( 0 == cont.size() );
00026                 cont.push_back( del_counter( del_count ) );
00027                 //  一時オブジェクトの破棄を確認
00028                 BOOST_REQUIRE( 1 == del_count );
00029                 BOOST_REQUIRE( !cont.empty() );
00030                 BOOST_REQUIRE( 1 == cont.size() );
00031             }
00032             //  cont のデストラクタによる解放を確認
00033             BOOST_REQUIRE( 2 == del_count );
00034             
00035             del_count = 0;
00036             {
00037                 Cont cont;
00038                 for ( size_t i = 0; i < size; ++i ) {
00039                     cont.push_back( del_counter( del_count ) );
00040                     BOOST_REQUIRE( i + 1 == cont.size() );
00041                 }
00042                 BOOST_REQUIRE( 10 == del_count );
00043                 for ( size_t i = 0; i < size; ++i ) {
00044                     cont.pop_back();
00045                     BOOST_REQUIRE( size - i - 1 == cont.size() );
00046                 }
00047                 BOOST_REQUIRE( 20 == del_count );
00048             }
00049             BOOST_REQUIRE( 20 == del_count );
00050 
00051             del_count = 0;
00052             {
00053                 Cont cont;
00054                 for ( size_t i = 0; i < size; ++i ) {
00055                     cont.push_back( del_counter( del_count ) );
00056                     BOOST_REQUIRE( i + 1 == cont.size() );
00057                 }
00058                 BOOST_REQUIRE( 10 == del_count );
00059                 cont.clear();
00060                 BOOST_REQUIRE( 20 == del_count );
00061             }
00062             BOOST_REQUIRE( 20 == del_count );
00063         }
00064         
00065         static void test_int() {
00066             const size_t size = 10;
00067             typedef ContGen::gen< int, size >::type Cont;
00068             typedef Cont::iterator          iterator;
00069             typedef Cont::const_iterator    const_iterator;
00070             BOOST_REQUIRE( size == Cont::max_size() );
00071             
00072             Cont cont;
00073             cont.push_back( 123 );
00074             BOOST_REQUIRE( 123 == cont.front() );
00075             cont.front() = 33;
00076             BOOST_REQUIRE( 33 == cont.front() );
00077             cont.push_back( 53 );
00078             BOOST_REQUIRE( 33 == cont.front() );
00079             BOOST_REQUIRE( 53 == cont.back() );
00080             
00081             Cont::iterator it = cont.begin();
00082             BOOST_REQUIRE( 33 == *it );
00083             ++it;
00084             BOOST_REQUIRE( 53 == *it );
00085             
00086             Cont another( cont );
00087             BOOST_REQUIRE( another == cont );
00088             cont.push_back( 0 );
00089             BOOST_REQUIRE( another != cont );
00090             BOOST_REQUIRE( another < cont );
00091             ++another.back();
00092             BOOST_REQUIRE( cont < another );
00093             another = cont;
00094             BOOST_REQUIRE( cont == another );
00095             cont = cont; // 自己代入テスト
00096             BOOST_REQUIRE( cont == another );
00097             
00098             cont.clear();
00099             
00100             for ( int i = 0; i < static_cast< int >( size ); ++i ) {
00101                 cont.push_back( i );
00102             }
00103             for ( iterator it = cont.begin(); it != cont.end(); ++it ) {
00104                     BOOST_REQUIRE( std::distance( cont.begin(), it ) == *it );
00105             }
00106             cont.clear();
00107             
00108             //  iterator から const_iterator への暗黙のキャストは可能か?
00109             const_iterator cit = cont.begin();
00110             
00111             //  多重クリア
00112             for ( int i = 0; i < 10; ++i ) {
00113                 cont.clear();
00114             }
00115         }
00116     };
00117     
00118     local_func::test_del_counter();
00119     local_func::test_int();
00120 }


static_containerに対してSat Nov 27 15:03:13 2004に生成されました。 doxygen 1.3.6