177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//To make GLib C++ closer to STLport behavior we need this macro: 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//Only mandatory when building unit tests without STLport, do not change 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//anything when building with STLport 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _GLIBCXX_FULLY_DYNAMIC_STRING 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//Has to be first for StackAllocator swap overload to be taken 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//into account (at least using GCC 4.0.1) 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "stack_allocator.h" 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <vector> 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <deque> 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <string> 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <algorithm> 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS) 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <sstream> 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stdexcept> 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_THREADS) 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (STLPORT) && defined (_STLP_PTHREADS) || \ 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner defined (__GNUC__) && !defined (__MINGW32__) 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define USE_PTHREAD_API 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <pthread.h> 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (STLPORT) && defined (_STLP_WIN32THREADS) || \ 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner defined (__GNUC__) && defined (__MINGW32__) || \ 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner defined (_MSC_VER) 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define USE_WINDOWS_API 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <windows.h> 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "stack_allocator.h" 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "cppunit/cppunit_proxy.h" 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing namespace std; 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// TestCase class 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass StringTest : public CPPUNIT_NS::TestCase 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST_SUITE(StringTest); 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(constructor); 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(trivial_char_compare); 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(reserve); 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(assign); 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(erase); 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(data); 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(c_str); 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(null_char); 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(insert); 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(replace); 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(resize); 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(short_string); 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(find); 6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(bogus_edge_find); 6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(rfind); 6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(find_last_of); 6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(find_last_not_of); 6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(copy); 6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (USE_PTHREAD_API) && !defined (USE_WINDOWS_API) 6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_IGNORE; 7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(mt); 7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_STOP_IGNORE; 7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(short_string_optim_bug); 7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(compare); 7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(template_expression); 7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && ((defined (_STLP_MSVC) && (_STLP_MSVC < 1300)) || \ 7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (defined(__GNUC__) && defined(_STLP_USE_TEMPLATE_EXPRESSION) && \ 7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)) ) ) 7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define TE_TMP_TEST_IGNORED 8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_IGNORE; 8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(te_tmp); 8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (TE_TMP_TEST_IGNORED) 8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_STOP_IGNORE; 8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(oper_tmp); 8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && defined (_STLP_NO_WCHAR_T) 8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_IGNORE; 8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (__CYGWIN__) && !defined (STLPORT) 9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_IGNORE; 9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(template_wexpression); 9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_STOP_IGNORE; 9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && defined (_STLP_USE_NO_IOSTREAMS) 9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_IGNORE; 9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(io); 9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_STOP_IGNORE; 10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && defined (_STLP_NO_CUSTOM_IO) 10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_IGNORE; 10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(allocator_with_state); 10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_STOP_IGNORE; 10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(capacity); 10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(concat24); 10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST_SUITE_END(); 10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected: 11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void constructor(); 11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void trivial_char_compare(); 11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void reserve(); 11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void erase(); 11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void data(); 11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void c_str(); 11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void null_char(); 11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void insert(); 11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void replace(); 11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void resize(); 12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void short_string(); 12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void find(); 12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void bogus_edge_find(); 12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void rfind(); 12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void find_last_of(); 12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void find_last_not_of(); 12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void copy(); 12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void assign(); 12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void mt(); 12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void short_string_optim_bug(); 13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void compare(); 13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void template_expression(); 13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void te_tmp(); 13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void oper_tmp(); 13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void template_wexpression(); 13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void io(); 13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void allocator_with_state(); 13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void capacity(); 13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void concat24(); 13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static string func(const string& par) { 14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string tmp( par ); 14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return tmp; 14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (USE_PTHREAD_API) || defined (USE_WINDOWS_API) 14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (USE_PTHREAD_API) 14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void* f(void*) 14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static DWORD __stdcall f(void*) 15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "qyweyuewunfkHBUKGYUGL,wehbYGUW^(@T@H!BALWD:h^&@#*@(#:JKHWJ:CND" ); 15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( int i = 0; i < 2000000; ++i ) { 15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string sx = func( s ); 15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return 0; 15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(StringTest); 16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// tests implementation 16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::constructor() 17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s((size_t)-1, 'a'); 17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (length_error const&) { 17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Expected exception is length_error: 18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::trivial_char_compare() 18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "message" ); 18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s == "message" ); 19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( "message" == s ); 19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::reserve() 19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s; 19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.reserve(s.max_size() + 1); 19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (length_error const&) { 20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Expected exception is length_error: 20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::mt() 21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (USE_PTHREAD_API) || defined (USE_WINDOWS_API) 21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const int nth = 2; 21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (USE_PTHREAD_API) 21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pthread_t t[nth]; 21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( int i = 0; i < nth; ++i ) { 21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pthread_create( &t[i], 0, f, 0 ); 21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( int i = 0; i < nth; ++i ) { 22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pthread_join( t[i], 0 ); 22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif // PTHREAD 22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (USE_WINDOWS_API) 22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //DWORD start = GetTickCount(); 22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner HANDLE t[nth]; 23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int i; // VC6 not support in-loop scope of cycle var 23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( i = 0; i < nth; ++i ) { 23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner t[i] = CreateThread(NULL, 0, f, 0, 0, NULL); 23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (WaitForMultipleObjects(nth, t, TRUE, INFINITE) == WAIT_FAILED) { 23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // On some platforms (evc3/evc4) WaitForMultipleObjects() with fWaitAll == TRUE 23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // is not supported. We then wait with a loop on each thread: 23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( i = 0; i < nth; ++i ) { 24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner WaitForSingleObject(t[i], INFINITE); 24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* 24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner DWORD duration = GetTickCount() - start; 24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ostringstream ostr; 24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ostr << "Duration: " << duration << endl; 24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_MESSAGE(ostr.str().c_str()); 24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::short_string() 25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string const ref_short_str1("str1"), ref_short_str2("str2"); 25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string short_str1(ref_short_str1), short_str2(ref_short_str2); 25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string const ref_long_str1("str 1"); 25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string const ref_long_str2("str 2"); 26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string long_str1(ref_long_str1), long_str2(ref_long_str2); 26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(short_str1 == ref_short_str1); 26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(long_str1 == ref_long_str1); 26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str1(short_str1); 26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1 = long_str1; 26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(str1 == ref_long_str1); 26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str1(long_str1); 27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1 = short_str1; 27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(str1 == ref_short_str1); 27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner short_str1.swap(short_str2); 27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT((short_str1 == ref_short_str2) && (short_str2 == ref_short_str1)); 28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner short_str1.swap(short_str2); 28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner long_str1.swap(long_str2); 28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT((long_str1 == ref_long_str2) && (long_str2 == ref_long_str1)); 28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner long_str1.swap(long_str2); 28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner short_str1.swap(long_str1); 29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT((short_str1 == ref_long_str1) && (long_str1 == ref_short_str1)); 29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner short_str1.swap(long_str1); 29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner long_str1.swap(short_str1); 29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT((short_str1 == ref_long_str1) && (long_str1 == ref_short_str1)); 29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner long_str1.swap(short_str1); 29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string a(256, 'a'); 30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string b(256, 'b'); 30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char* as = a.c_str(); 30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char* bs = b.c_str(); 30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner swap(a, b); 30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( a.c_str() == bs ); 30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( b.c_str() == as ); 30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //This is to test move constructor 31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<string> str_vect; 31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str_vect.push_back(short_str1); 31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str_vect.push_back(long_str1); 31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str_vect.push_back(short_str2); 31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str_vect.push_back(long_str2); 31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT((str_vect[0] == ref_short_str1) && 31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (str_vect[1] == ref_long_str1) && 32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (str_vect[2] == ref_short_str2) && 32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (str_vect[3] == ref_long_str2)); 32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::erase() 32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char const* c_str = "Hello, World!"; 32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str(c_str); 32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == c_str ); 33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.erase(str.begin() + 1, str.end() - 1); // Erase all but first and last. 33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t i; 33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (i = 0; i < str.size(); ++i) { 33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner switch ( i ) { 33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 0: 33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str[i] == 'H' ); 33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 1: 34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str[i] == '!' ); 34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner default: 34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.insert(1, c_str); 34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.erase(str.begin()); // Erase first element. 34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.erase(str.end() - 1); // Erase last element. 35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == c_str ); 35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.clear(); // Erase all. 35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str.empty() ); 35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str = c_str; 35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == c_str ); 35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.erase(1, str.size() - 1); // Erase all but first and last. 35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for (i = 0; i < str.size(); i++) { 35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner switch ( i ) { 36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 0: 36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str[i] == 'H' ); 36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner case 1: 36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str[i] == '!' ); 36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner break; 36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner default: 36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.erase(1); 37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == "H" ); 37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::data() 37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string xx; 37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( xx.data() != 0 ); // ISO-IEC-14882:1998(E), 21.3.6, paragraph 3 38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if 0 38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* This test really not required: in ISO-IEC-14882:1998(E) paragraph 3 stated: 38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * '... and can have zero added to it', again: 'CAN', but not 'MUST'. 38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * That's why I am comment this test. But I don't remove it due to I had 38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * unevident problem with misinterpretation of data() return (i.e. data() 38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * and c_str() provide different functionality!) and expect that this is 38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * more-or-less common pitfall. 38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * - ptr 38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string low( "2004-01-01" ); 39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Blocks A and B should follow each other. 39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Block A: 39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner xx = "123456"; 39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner xx += low; 39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if ( strcmp( xx.data(), "1234562004-01-01" ) != 0 ) { 39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return -1; 39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // End of block A 39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Block B: 40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner xx = "1234"; 40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner xx += ";"; 40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if ( strcmp( xx.data(), "1234;" ) != 0 ) { 40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return -1; 40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // End of block B 40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::c_str() 41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string low( "2004-01-01" ); 41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string xx; 41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string yy; 41577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 41677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *(yy.c_str()) == '\0' ); // ISO-IEC-14882:1998(E), 21.3.6, paragraph 1 41777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 41877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Blocks A and B should follow each other. 41977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Block A: 42077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner xx = "123456"; 42177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner xx += low; 42277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp( xx.c_str(), "1234562004-01-01" ) == 0 ); 42377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // End of block A 42477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 42577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Block B: 42677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner xx = "1234"; 42777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner xx += ";"; 42877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( strcmp( xx.c_str(), "1234;" ) == 0 ); 42977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // End of block B 43077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 43177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 43277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::null_char() 43377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 43477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // ISO/IEC 14882:1998(E), ISO/IEC 14882:2003(E), 21.3.4 ('... the const version') 43577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const string s( "123456" ); 43677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 43777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s[s.size()] == '\0' ); 43877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 43977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 44077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 44177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Check is only here to avoid warning about value of expression not used 44277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s.at(s.size()) == '\0' ); 44377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 44477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 44577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (out_of_range const&) { 44677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( true ); 44777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 44877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch ( ... ) { 44977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 45077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 45177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 45277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 45377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 45477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::insert() 45577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 45677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string strorg = "This is test string for string calls"; 45777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str; 45877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* 45977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * In case of reallocation there is no auto reference problem 46077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * so we reserve a big enough string to be sure to test this 46177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * particular point. 46277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 46377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.reserve(100); 46477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str = strorg; 46577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 46677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //test self insertion: 46777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.insert(10, str.c_str() + 5, 15); 46877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == "This is teis test string st string for string calls" ); 46977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 47077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str = strorg; 47177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.insert(15, str.c_str() + 5, 25); 47277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == "This is test stis test string for stringring for string calls" ); 47377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 47477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str = strorg; 47577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.insert(0, str.c_str() + str.size() - 4, 4); 47677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == "allsThis is test string for string calls" ); 47777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 47877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str = strorg; 47977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.insert(0, str.c_str() + str.size() / 2 - 1, str.size() / 2 + 1); 48077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == "ng for string callsThis is test string for string calls" ); 48177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 48277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str = strorg; 48377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::iterator b = str.begin(); 48477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::const_iterator s = str.begin() + str.size() / 2 - 1; 48577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::const_iterator e = str.end(); 48677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.insert( b, s, e ); 48777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == "ng for string callsThis is test string for string calls" ); 48877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 48977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str = strorg; 49077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.insert(str.begin(), str.begin() + str.size() / 2 - 1, str.end()); 49177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == "ng for string callsThis is test string for string calls" ); 49277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 49377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifdef _STLP_MEMBER_TEMPLATES 49477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner vector<int> int_vect; 49577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Just a compile time test: 49677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.insert(str.end(), int_vect.begin(), int_vect.end()); 49777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 49877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 49977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str0; 50077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str0.insert(str0.begin(), 5, '0'); 50177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str0 == "00000" ); 50277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 50377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str1; 50477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 50577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type pos = 0, nb = 2; 50677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1.insert(pos, nb, '1'); 50777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 50877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1 == "11" ); 50977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 51077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str0.insert(0, str1); 51177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str0 == "1100000" ); 51277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 51377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str2("2345"); 51477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str0.insert(str0.size(), str2, 1, 2); 51577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str0 == "110000034" ); 51677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 51777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1.insert(str1.begin() + 1, 2, '2'); 51877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1 == "1221" ); 51977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 52077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1.insert(2, "333333", 3); 52177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1 == "1233321" ); 52277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 52377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1.insert(4, "4444"); 52477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1 == "12334444321" ); 52577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 52677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1.insert(str1.begin() + 6, '5'); 52777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1 == "123344544321" ); 52877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 52977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 53077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::replace() 53177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 53277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* 53377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This test case is for the non template basic_string::replace method, 53477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * this is why we play with the const iterators and reference to guaranty 53577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * that the right method is called. 53677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 53777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const string v( "78" ); 53877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "123456" ); 53977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string const& cs = s; 54077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 54177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::iterator i = s.begin() + 1; 54277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.replace(i, i + 3, v.begin(), v.end()); 54377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s == "17856" ); 54477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 54577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "123456"; 54677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner i = s.begin() + 1; 54777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.replace(i, i + 1, v.begin(), v.end()); 54877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s == "1783456" ); 54977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 55077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "123456"; 55177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner i = s.begin() + 1; 55277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::const_iterator ci = s.begin() + 1; 55377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.replace(i, i + 3, ci + 3, cs.end()); 55477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s == "15656" ); 55577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 55677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "123456"; 55777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner i = s.begin() + 1; 55877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ci = s.begin() + 1; 55977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.replace(i, i + 3, ci, ci + 2); 56077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s == "12356" ); 56177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 56277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "123456"; 56377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner i = s.begin() + 1; 56477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ci = s.begin() + 1; 56577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.replace(i, i + 3, ci + 1, cs.end()); 56677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s == "1345656" ); 56777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 56877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "123456"; 56977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner i = s.begin(); 57077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ci = s.begin() + 1; 57177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.replace(i, i, ci, ci + 1); 57277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s == "2123456" ); 57377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 57477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "123456"; 57577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.replace(s.begin() + 4, s.end(), cs.begin(), cs.end()); 57677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s == "1234123456" ); 57777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 57877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* 57977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This is the test for the template replace method. 58077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 58177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "123456"; 58277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::iterator b = s.begin() + 4; 58377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::iterator e = s.end(); 58477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::const_iterator rb = s.begin(); 58577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::const_iterator re = s.end(); 58677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.replace(b, e, rb, re); 58777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s == "1234123456" ); 58877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 58977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "123456"; 59077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.replace(s.begin() + 4, s.end(), s.begin(), s.end()); 59177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s == "1234123456" ); 59277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 59377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string strorg("This is test string for string calls"); 59477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str = strorg; 59577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.replace(5, 15, str.c_str(), 10); 59677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == "This This is tefor string calls" ); 59777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 59877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str = strorg; 59977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.replace(5, 5, str.c_str(), 10); 60077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == "This This is test string for string calls" ); 60177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 60277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if (defined (STLPORT) && defined(_STLP_MEMBER_TEMPLATES)) || ( !defined (STLPORT) && !defined(__GNUC__) ) 60377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner deque<char> cdeque; 60477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner cdeque.push_back('I'); 60577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str.replace(str.begin(), str.begin() + 11, cdeque.begin(), cdeque.end()); 60677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str == "Is test string for string calls" ); 60777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 60877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 60977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 61077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::resize() 61177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 61277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s; 61377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 61477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.resize(0); 61577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 61677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *s.c_str() == 0 ); 61777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 61877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "1234567"; 61977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 62077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.resize(0); 62177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *s.c_str() == 0 ); 62277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 62377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "1234567"; 62477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.resize(1); 62577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.size() == 1 ); 62677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *s.c_str() == '1' ); 62777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( *(s.c_str() + 1) == 0 ); 62877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 62977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s = "1234567"; 63077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.resize(10); 63177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.size() == 10 ); 63277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s[6] == '7' ); 63377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s[7] == 0 ); 63477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s[8] == 0 ); 63577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s[9] == 0 ); 63677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 63777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 63877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::find() 63977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 64077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s("one two three one two three"); 64177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.find("one") == 0 ); 64277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.find('t') == 4 ); 64377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.find('t', 5) == 8 ); 64477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //We are trying to get a const reference to the npos string static member to 64577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //force the compiler to allocate memory for this variable. It is used to reveal 64677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //a bug of STLport which was simply declaring npos without instanciating it. 64777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (STLPORT) && defined (_STLP_STATIC_CONST_INIT_BUG) 64877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type const& npos_local = string::npos; 64977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 65077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define npos_local string::npos 65177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 65277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.find("four") == npos_local ); 65377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.find("one", string::npos) == npos_local ); 65477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 65577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.find_first_of("abcde") == 2 ); 65677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 65777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.find_first_not_of("enotw ") == 9 ); 65877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 65977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string empty; 66077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.substr(s.find(empty), empty.size()) == empty ); 66177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 66277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 66377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::bogus_edge_find() 66477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 66577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* ISO/IEC 14882 2003, 21.3.6.1 basic_string::find [lib.string::find] 66677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 66777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * size_type find(const basic_string<charT,traits,Allocator>& str, 66877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * size_type pos = 0) const; 66977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Effects: Determines the lowest position xpos, if possible, such that 67077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * both of the following conditions obtain: 67177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * pos <= xpos and xpos + str.size() <= size(); 67277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * at(xpos+I) == str.at(I) for all elements I of the string controlled by str. 67377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Returns: xpos if the function can determine such a value for xpos. Otherwise, 67477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * returns npos. 67577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Notes: Uses traits::eq(). 67677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 67777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * === 67877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * So, from formal point of view 67977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * string s; string::size_type p = s.find( "", 0, 0 ); 68077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * should return 0 in p, i.e. position out-of-bound of string, so 68177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * code like following is bad: 68277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * string s; 68377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 68477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * string::size_type p = s.find( "", 0, 0 ); 68577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 68677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * ... 68777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 68877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * if ( p != string::npos ) { // normal 68977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * char ch = s[p]; // Arghhhhhhhhhh 69077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * } 69177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 69277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * People near Standard commete has opinion opposite to my. Even if it looks 69377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * like bogus behaviour for me, it should be fixed. 69477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 69577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 69677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 69777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s; 69877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type p = s.find( "", 0, 0 ); 69977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 70077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* CPPUNIT_CHECK( p == string::npos ); */ 70177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( p == 0 ); // bogus result, isn't it? 70277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 70377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 70477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "123" ); 70577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type p = s.find( "", 0, 0 ); 70677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 70777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( p == 0 ); 70877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 70977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 71077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "123" ); 71177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type p = s.find( "", 1, 0 ); 71277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 71377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( p == 1 ); 71477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 71577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 71677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "" ); 71777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type p = s.find( "", 1, 0 ); 71877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 71977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( p == string::npos ); 72077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 72177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 72277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "123" ); 72377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type p = s.find( "", 3, 0 ); 72477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 72577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( p == 3 ); // bogus result, isn't it? 72677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 72777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 72877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s; 72977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type p = s.rfind( "", 0, 0 ); 73077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 73177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* CPPUNIT_CHECK( p == string::npos ); */ 73277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( p == 0 ); // bogus result, isn't it? 73377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 73477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 73577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "123" ); 73677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type p = s.rfind( "", 0, 0 ); 73777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 73877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( p == 0 ); 73977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 74077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 74177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "123" ); 74277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type p = s.rfind( "", 1, 0 ); 74377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 74477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( p == 1 ); 74577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 74677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 74777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "" ); 74877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type p = s.rfind( "", 1, 0 ); 74977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 75077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( p == 0 ); // bogus result, isn't it? 75177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 75277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 75377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s( "123" ); 75477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::size_type p = s.rfind( "", 3, 0 ); 75577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 75677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( p == 3 ); // bogus result, isn't it? 75777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 75877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 75977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 76077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::rfind() 76177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 76277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 21.3.6.2 76377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s("one two three one two three"); 76477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 76577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.rfind("two") == 18 ); 76677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.rfind("two", 0) == string::npos ); 76777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.rfind("two", 11) == 4 ); 76877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.rfind('w') == 19 ); 76977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 77077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string test( "aba" ); 77177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 77277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.rfind( "a", 2, 1 ) == 2 ); 77377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.rfind( "a", 1, 1 ) == 0 ); 77477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.rfind( "a", 0, 1 ) == 0 ); 77577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 77677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.rfind( 'a', 2 ) == 2 ); 77777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.rfind( 'a', 1 ) == 0 ); 77877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.rfind( 'a', 0 ) == 0 ); 77977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 78077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 78177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::find_last_of() 78277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 78377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 21.3.6.4 78477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s("one two three one two three"); 78577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 78677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.find_last_of("abcde") == 26 ); 78777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 78877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string test( "aba" ); 78977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 79077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( "a", 2, 1 ) == 2 ); 79177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( "a", 1, 1 ) == 0 ); 79277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( "a", 0, 1 ) == 0 ); 79377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 79477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( 'a', 2 ) == 2 ); 79577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( 'a', 1 ) == 0 ); 79677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( 'a', 0 ) == 0 ); 79777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 79877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 79977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::find_last_not_of() 80077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 80177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // 21.3.6.6 80277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s("one two three one two three"); 80377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 80477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s.find_last_not_of("ehortw ") == 15 ); 80577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 80677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string test( "aba" ); 80777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 80877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "a", 2, 1 ) == 1 ); 80977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "b", 2, 1 ) == 2 ); 81077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "a", 1, 1 ) == 1 ); 81177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "b", 1, 1 ) == 0 ); 81277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "a", 0, 1 ) == string::npos ); 81377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "b", 0, 1 ) == 0 ); 81477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 81577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'a', 2 ) == 1 ); 81677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'b', 2 ) == 2 ); 81777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'a', 1 ) == 1 ); 81877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'b', 1 ) == 0 ); 81977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'a', 0 ) == string::npos ); 82077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'b', 0 ) == 0 ); 82177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 82277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 82377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::copy() 82477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 82577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s("foo"); 82677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char dest[4]; 82777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner dest[0] = dest[1] = dest[2] = dest[3] = 1; 82877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.copy(dest, 4); 82977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int pos = 0; 83077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 'f' ); 83177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 'o' ); 83277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 'o' ); 83377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 1 ); 83477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 83577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner dest[0] = dest[1] = dest[2] = dest[3] = 1; 83677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.copy(dest, 4, 2); 83777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner pos = 0; 83877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 'o' ); 83977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 1 ); 84077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 84177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 84277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 84377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.copy(dest, 4, 5); 84477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 84577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 84677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (out_of_range const&) { 84777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 84877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch ( ... ) { 84977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 85077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 85177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 85277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 85377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 85477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::assign() 85577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 85677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s; 85777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char const* cstr = "test string for assign"; 85877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 85977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.assign(cstr, cstr + 22); 86077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s == "test string for assign" ); 86177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 86277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s2("other test string"); 86377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s.assign(s2); 86477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( s == s2 ); 86577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 86677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static string str1; 86777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static string str2; 86877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 86977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // short string optim: 87077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1 = "123456"; 87177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // longer than short string: 87277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str2 = "1234567890123456789012345678901234567890"; 87377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 87477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(str1[5] == '6'); 87577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(str2[29] == '0'); 87677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 87777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 87877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* This test is to check if string properly supports the short string 87977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * optimization. It has been found out that eMbedded Visual C++ 3.0 and .NET 88077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * compilers for the ARM platform fail to pass structs and classes of certain 88177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * size per value. This seems to be a known compiler bug. For other processors 88277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * (e.g. x86) the error doesn't occur. 88377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * (The ARM compiler creates a temporary object from teststr on the stack, to 88477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * pass it to the helper function. It uses the copy constructor for this. 88577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * After this the temporary object is copied to another place on the stack. 88677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * The result is that the _M_finish pointer then points to the wrong buffer 88777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * end and the size of the short string is incorrectly calculated.) 88877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 88977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::short_string_optim_bug() 89077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 89177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string teststr("shortest"); 89277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 89377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool short_string_optim_bug_helper(string teststr); 89477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 89577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(true == short_string_optim_bug_helper(teststr)); 89677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 89777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 89877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool short_string_optim_bug_helper(string teststr) 89977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 90077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner size_t ss = teststr.size(); 90177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return (ss == 8); 90277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 90377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 90477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::compare() 90577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 90677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str1("abcdef"); 90777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str2; 90877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 90977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str2 = "abcdef"; 91077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(str2) == 0 ); 91177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str2 = "abcde"; 91277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(str2) > 0 ); 91377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str2 = "abcdefg"; 91477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(str2) < 0 ); 91577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 91677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare("abcdef") == 0 ); 91777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare("abcde") > 0 ); 91877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare("abcdefg") < 0 ); 91977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 92077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str2 = "cde"; 92177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2) == 0 ); 92277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str2 = "cd"; 92377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2) > 0 ); 92477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str2 = "cdef"; 92577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2) < 0 ); 92677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 92777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str2 = "abcdef"; 92877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2, 2, 3) == 0 ); 92977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2, 2, 2) > 0 ); 93077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2, 2, 4) < 0 ); 93177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 93277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, "cdefgh", 3) == 0 ); 93377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, "cdefgh", 2) > 0 ); 93477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, "cdefgh", 4) < 0 ); 93577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 93677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 93777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 93877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass mystring : public string { 93977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic: 94077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner mystring() {} 94177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner mystring(string const& s) : string(s) {} 94277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 94377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner mystring& operator = (string const& s) { 94477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string::operator = (s); 94577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return *this; 94677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner }; 94777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 94877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner*/ 94977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 95077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::template_expression() 95177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 95277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string one("one"), two("two"), three("three"); 95377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string space(1, ' '); 95477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 95577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // check availability of [un]equality operators 95677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 95777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // string-string 95877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner one == two; 95977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner one != two; 96077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // string-literal 96177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner one == "two"; 96277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner one != "two"; 96377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // literal-string 96477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner "one" == two; 96577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner "one" != two; 96677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // strsum-string 96777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (one + two) == three; 96877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (one + two) != three; 96977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // string-strsum 97077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner one == (two + three); 97177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner one != (two + three); 97277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // strsum-literal 97377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (one + two) == "three"; 97477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (one + two) != "three"; 97577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // literal-strsum 97677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner "one" == (two + three); 97777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner "one" != (two + three); 97877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // strsum-strsum 97977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (one + two) == (two + three); 98077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner (one + two) != (two + three); 98177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 98277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 98377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 98477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string result(one + ' ' + two + ' ' + three); 98577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == "one two three" ); 98677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 98777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 98877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 98977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string result(one + ' ' + two + ' ' + three, 4); 99077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == "two three" ); 99177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 99277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 99377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 99477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string result(one + ' ' + two + ' ' + three, 4, 3); 99577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == "two" ); 99677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 99777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 99877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //2 members expressions: 99977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (' ' + one) == " one" ); 100077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (one + ' ') == "one " ); 100177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (one + " two") == "one two" ); 100277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ("one " + two) == "one two" ); 100377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (one + space) == "one " ); 100477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 100577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //3 members expressions: 100677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ((one + space) + "two") == "one two" ); 100777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ("one" + (space + two)) == "one two" ); 100877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ((one + space) + two) == "one two" ); 100977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (one + (space + two)) == "one two" ); 101077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ((one + space) + 't') == "one t" ); 101177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ('o' + (space + two)) == "o two" ); 101277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 101377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //4 members expressions: 101477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ((one + space) + (two + space)) == "one two " ); 101577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 101677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //special operators 101777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 101877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string result; 101977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result = one + space + two; 102077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == "one two" ); 102177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 102277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result += space + three; 102377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == "one two three" ); 102477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 102577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 102677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //special append method 102777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 102877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string result; 102977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Use reserve to avoid reallocation and really test auto-referencing problems: 103077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.reserve(64); 103177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 103277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.append(one + space + two); 103377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == "one two" ); 103477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 103577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.append(space + result + space + three); 103677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == "one two one two three" ); 103777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 103877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result = "one two"; 103977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.append(space + three, 1, 2); 104077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( result == "one twoth" ); 104177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 104277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.append(space + result); 104377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == "one twoth one twoth" ); 104477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 104577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 104677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //special assign method 104777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 104877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string result; 104977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Use reserve to avoid reallocation and really test auto-referencing problems: 105077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.reserve(64); 105177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 105277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.assign(one + space + two + space + three); 105377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == "one two three" ); 105477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 105577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.assign(one + space + two + space + three, 3, 5); 105677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == " two " ); 105777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 105877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.assign(one + result + three); 105977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == "one two three" ); 106077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 106177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 106277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 106377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( !(one + ' ' + two).empty() ); 106477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 106577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char result = (one + ' ' + two)[3]; 106677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == ' ' ); 106777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 106877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result = (one + ' ' + two).at(3); 106977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == ' ' ); 107077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 107177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 107277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 107377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result = (one + ' ' + two).at(10); 107477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 107577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 107677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (out_of_range const&) { 107777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( result == ' ' ); 107877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 107977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 108077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 108177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 108277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 108377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 108477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 108577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* 108677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner mystring a("ing"); 108777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //gcc failed to compile following expression when template expressions are activated. 108877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //MSVC sees no problem. gcc limitation or MSVC is too cool ?? 108977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner mystring b = "str" + a; 109077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 109177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 109277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 109377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (TE_TMP_TEST_IGNORED) 109477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass superstring 109577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 109677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner public: 109777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner superstring() : 109877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s("super") 109977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner {} 110077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 110177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner superstring( const string& str ) : 110277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s( str ) 110377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner {} 110477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 110577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner superstring operator / (const string& str ) 110677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { return superstring( s + "/" + str ); } 110777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 110877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner superstring operator / (const char* str ) 110977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { return superstring( s + "/" + str ); } 111077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 111177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner private: 111277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s; 111377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 111477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 111577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 111677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::te_tmp() 111777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 111877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (TE_TMP_TEST_IGNORED) 111977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner superstring s; 112077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string more( "more" ); 112177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string less( "less" ); 112277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 112377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner superstring r = s / (more + less); 112477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 112577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 112677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 112777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass mypath 112877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 112977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner public: 113077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner mypath( const string& s ) : 113177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner p( s ) 113277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { } 113377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 113477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const mypath& operator / ( const string& ); 113577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const string& str() const 113677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { return p; } 113777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 113877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner private: 113977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string p; 114077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 114177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 114277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerconst mypath& mypath::operator /( const string& s ) 114377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 114477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner p += '/'; 114577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner p += s; 114677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return *this; 114777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 114877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 114977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::oper_tmp() 115077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 115177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s1( "path1" ); 115277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s2( ".ext" ); 115377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 115477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string& rs1 = s1; 115577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string& rs2 = s2; 115677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 115777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (mypath( string( "/root" ) ) / (rs1 + rs2)).str() == "/root/path1.ext" ); 115877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 115977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 116077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::template_wexpression() 116177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 116277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T) 116377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (__CYGWIN__) || defined (STLPORT) 116477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring one(L"one"), two(L"two"), three(L"three"); 116577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring space(L" "); 116677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 116777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 116877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring result(one + L' ' + two + L' ' + three); 116977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L"one two three" ); 117077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 117177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 117277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 117377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring result(one + L' ' + two + L' ' + three, 4); 117477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L"two three" ); 117577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 117677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 117777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 117877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring result(one + L' ' + two + L' ' + three, 4, 3); 117977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L"two" ); 118077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 118177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 118277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //2 members expressions: 118377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (L' ' + one) == L" one" ); 118477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (one + L' ') == L"one " ); 118577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (one + L" two") == L"one two" ); 118677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (L"one " + two) == L"one two" ); 118777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (one + space) == L"one " ); 118877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 118977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //3 members expressions: 119077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ((one + space) + L"two") == L"one two" ); 119177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (L"one" + (space + two)) == L"one two" ); 119277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ((one + space) + two) == L"one two" ); 119377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (one + (space + two)) == L"one two" ); 119477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ((one + space) + L't') == L"one t" ); 119577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( (L'o' + (space + two)) == L"o two" ); 119677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 119777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //4 members expressions: 119877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( ((one + space) + (two + space)) == L"one two " ); 119977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 120077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //special operators 120177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 120277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring result; 120377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result = one + space + two; 120477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L"one two" ); 120577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 120677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result += space + three; 120777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L"one two three" ); 120877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 120977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 121077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //special append method 121177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 121277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring result; 121377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Use reserve to avoid reallocation and really test auto-referencing problems: 121477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.reserve(64); 121577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 121677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.append(one + space + two); 121777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L"one two" ); 121877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 121977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.append(space + result + space + three); 122077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L"one two one two three" ); 122177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 122277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result = L"one two"; 122377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.append(space + three, 1, 2); 122477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( result == L"one twoth" ); 122577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 122677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.append(space + result); 122777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L"one twoth one twoth" ); 122877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 122977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 123077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //special assign method 123177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 123277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wstring result; 123377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Use reserve to avoid reallocation and really test auto-referencing problems: 123477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.reserve(64); 123577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 123677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.assign(one + space + two + space + three); 123777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L"one two three" ); 123877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 123977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.assign(one + space + two + space + three, 3, 5); 124077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L" two " ); 124177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 124277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result.assign(one + result + three); 124377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L"one two three" ); 124477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 124577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 124677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 124777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( !(one + L' ' + two).empty() ); 124877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 124977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner wchar_t result = (one + L' ' + two)[3]; 125077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L' ' ); 125177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 125277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result = (one + L' ' + two).at(3); 125377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( result == L' ' ); 125477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 125577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 125677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner try { 125777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result = (one + L' ' + two).at(10); 125877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 125977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 126077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (out_of_range const&) { 126177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( result == L' ' ); 126277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 126377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner catch (...) { 126477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_FAIL; 126577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 126677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 126777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 126877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 126977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 127077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 127177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 127277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::io() 127377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 127477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS) 127577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string str("STLport"); 127677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 127777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ostringstream ostr; 127877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ostr << str; 127977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ostr.good() ); 128077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( ostr.str() == str ); 128177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 128277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 128377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner istringstream istr(str); 128477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string istr_content; 128577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner istr >> istr_content; 128677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( !istr.fail() && istr.eof() ); 128777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( istr_content == str ); 128877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 128977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 129077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner istringstream istr(str); 129177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner istr.width(3); 129277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string istr_content; 129377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner istr >> istr_content; 129477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( !istr.fail() && !istr.eof() ); 129577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( istr_content == "STL" ); 129677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 129777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 129877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 129977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 130077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::allocator_with_state() 130177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 130277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !(defined (STLPORT) && defined (_STLP_NO_CUSTOM_IO)) 130377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 130477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf1[1024]; 130577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackAllocator<char> stack1(buf1, buf1 + sizeof(buf1)); 130677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 130777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner char buf2[1024]; 130877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackAllocator<char> stack2(buf2, buf2 + sizeof(buf2)); 130977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 131077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef basic_string<char, char_traits<char>, StackAllocator<char> > StackString; 131177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 131277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str1("string stack1", stack1); 131377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str1Cpy(str1); 131477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 131577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str2("string stack2", stack2); 131677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str2Cpy(str2); 131777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 131877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1.swap(str2); 131977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 132077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator().swaped() ); 132177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator().swaped() ); 132277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 132377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1 == str2Cpy ); 132477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2 == str1Cpy ); 132577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator() == stack2 ); 132677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator() == stack1 ); 132777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 132877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( stack1.ok() ); 132977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( stack2.ok() ); 133077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner stack1.reset(); stack2.reset(); 133177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 133277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 133377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str1("longer string from stack1 allocator instance for dynamic allocation", stack1); 133477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str1Cpy(str1); 133577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 133677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str2("longer string from stack2 allocator instance for dynamic allocation", stack2); 133777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str2Cpy(str2); 133877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 133977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1.swap(str2); 134077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 134177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator().swaped() ); 134277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator().swaped() ); 134377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 134477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1 == str2Cpy ); 134577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2 == str1Cpy ); 134677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator() == stack2 ); 134777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator() == stack1 ); 134877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 134977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( stack1.ok() ); 135077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( stack2.ok() ); 135177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner stack1.reset(); stack2.reset(); 135277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 135377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 135477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 135577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str1("string stack1", stack1); 135677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str1Cpy(str1); 135777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 135877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str2("longer string from stack2 allocator instance for dynamic allocation", stack2); 135977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str2Cpy(str2); 136077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 136177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1.swap(str2); 136277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 136377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator().swaped() ); 136477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator().swaped() ); 136577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 136677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1 == str2Cpy ); 136777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2 == str1Cpy ); 136877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator() == stack2 ); 136977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator() == stack1 ); 137077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 137177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( stack1.ok() ); 137277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( stack2.ok() ); 137377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner stack1.reset(); stack2.reset(); 137477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 137577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 137677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { 137777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str1("longer string from stack1 allocator instance for dynamic allocation", stack1); 137877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str1Cpy(str1); 137977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 138077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str2("string stack2", stack2); 138177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner StackString str2Cpy(str2); 138277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 138377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner str1.swap(str2); 138477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 138577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator().swaped() ); 138677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator().swaped() ); 138777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 138877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1 == str2Cpy ); 138977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2 == str1Cpy ); 139077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator() == stack2 ); 139177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator() == stack1 ); 139277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 139377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( stack1.ok() ); 139477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( stack2.ok() ); 139577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner stack1.reset(); stack2.reset(); 139677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 139777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 139877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 139977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::capacity() 140077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 140177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s; 140277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 140377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s.capacity() > 0 ); 140477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s.capacity() < s.max_size() ); 140577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s.capacity() >= s.size() ); 140677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 140777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_SHORT_STRING_SZ 140877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_SHORT_STRING_SZ 16 // see stlport/stl/_string_base.h 140977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 141077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 141177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner for ( int i = 0; i < _STLP_SHORT_STRING_SZ + 2; ++i ) { 141277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner s += ' '; 141377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s.capacity() > 0 ); 141477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s.capacity() < s.max_size() ); 141577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s.capacity() >= s.size() ); 141677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 141777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 141877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 141977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid StringTest::concat24() 142077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 142177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner string s = string( "123456789012345678901234" ) + string( "123456789012345678901234" ); 142277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 142377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s.length() == 48 ); 142477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s[23] == '4' ); 142577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s[24] == '1' ); 142677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_CHECK( s[47] == '4' ); 142777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 1428