1a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//To make GLib C++ closer to STLport behavior we need this macro: 2a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//Only mandatory when building unit tests without STLport, do not change 3a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//anything when building with STLport 4a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#define _GLIBCXX_FULLY_DYNAMIC_STRING 5a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 6a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//Has to be first for StackAllocator swap overload to be taken 7a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner//into account (at least using GCC 4.0.1) 8a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include "stack_allocator.h" 9a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 10a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <vector> 11a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <deque> 12a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <string> 13a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <algorithm> 14a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS) 15a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# include <sstream> 16a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 17a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 18a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 19a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# include <stdexcept> 20a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 21a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 22a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_THREADS) 23a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# if defined (STLPORT) && defined (_STLP_PTHREADS) || \ 24a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner defined (__GNUC__) && !defined (__MINGW32__) 25a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# define USE_PTHREAD_API 26a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# include <pthread.h> 27a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# endif 28a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 29a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# if defined (STLPORT) && defined (_STLP_WIN32THREADS) || \ 30a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner defined (__GNUC__) && defined (__MINGW32__) || \ 31a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner defined (_MSC_VER) 32a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# define USE_WINDOWS_API 33a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# include <windows.h> 34a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# endif 35a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 36a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 37a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include "stack_allocator.h" 38a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include "cppunit/cppunit_proxy.h" 39a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 40a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 41a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerusing namespace std; 42a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 43a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 44a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 45a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// TestCase class 46a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 47a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass StringTest : public CPPUNIT_NS::TestCase 48a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 49a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST_SUITE(StringTest); 50a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(constructor); 51a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(trivial_char_compare); 52a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(reserve); 53a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(assign); 54a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(erase); 55a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(data); 56a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(c_str); 57a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(null_char); 58a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(insert); 59a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(replace); 60a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(resize); 61a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(short_string); 62a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(find); 63a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(bogus_edge_find); 64a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(rfind); 65a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(find_last_of); 66a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(find_last_not_of); 67a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(copy); 68a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (USE_PTHREAD_API) && !defined (USE_WINDOWS_API) 69a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_IGNORE; 70a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 71a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(mt); 72a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_STOP_IGNORE; 73a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(short_string_optim_bug); 74a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(compare); 75a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(template_expression); 76a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && ((defined (_STLP_MSVC) && (_STLP_MSVC < 1300)) || \ 77a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (defined(__GNUC__) && defined(_STLP_USE_TEMPLATE_EXPRESSION) && \ 78a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)) ) ) 79a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# define TE_TMP_TEST_IGNORED 80a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_IGNORE; 81a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 82a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(te_tmp); 83a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (TE_TMP_TEST_IGNORED) 84a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_STOP_IGNORE; 85a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 86a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(oper_tmp); 87a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && defined (_STLP_NO_WCHAR_T) 88a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_IGNORE; 89a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 90a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (__CYGWIN__) && !defined (STLPORT) 91a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_IGNORE; 92a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 93a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(template_wexpression); 94a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_STOP_IGNORE; 95a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && defined (_STLP_USE_NO_IOSTREAMS) 96a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_IGNORE; 97a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 98a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(io); 99a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_STOP_IGNORE; 100a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && defined (_STLP_NO_CUSTOM_IO) 101a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_IGNORE; 102a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 103a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(allocator_with_state); 104a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_STOP_IGNORE; 105a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(capacity); 106a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(concat24); 107a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST_SUITE_END(); 108a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 109a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerprotected: 110a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void constructor(); 111a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void trivial_char_compare(); 112a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void reserve(); 113a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void erase(); 114a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void data(); 115a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void c_str(); 116a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void null_char(); 117a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void insert(); 118a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void replace(); 119a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void resize(); 120a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void short_string(); 121a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void find(); 122a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void bogus_edge_find(); 123a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void rfind(); 124a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void find_last_of(); 125a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void find_last_not_of(); 126a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void copy(); 127a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void assign(); 128a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void mt(); 129a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void short_string_optim_bug(); 130a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void compare(); 131a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void template_expression(); 132a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void te_tmp(); 133a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void oper_tmp(); 134a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void template_wexpression(); 135a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void io(); 136a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void allocator_with_state(); 137a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void capacity(); 138a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void concat24(); 139a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 140a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner static string func(const string& par) { 141a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string tmp( par ); 142a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner return tmp; 143a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 144a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 145a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (USE_PTHREAD_API) || defined (USE_WINDOWS_API) 146a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# if defined (USE_PTHREAD_API) 147a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner static void* f(void*) 148a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# else 149a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner static DWORD __stdcall f(void*) 150a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# endif 151a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 152a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "qyweyuewunfkHBUKGYUGL,wehbYGUW^(@T@H!BALWD:h^&@#*@(#:JKHWJ:CND" ); 153a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 154a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for ( int i = 0; i < 2000000; ++i ) { 155a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string sx = func( s ); 156a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 157a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 158a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner return 0; 159a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 160a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 161a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 162a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 163a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 164a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(StringTest); 165a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 166a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 167a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// tests implementation 168a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 169a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::constructor() 170a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 171a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 172a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner try { 173a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s((size_t)-1, 'a'); 174a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 175a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 176a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (length_error const&) { 177a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 178a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (...) { 179a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Expected exception is length_error: 180a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 181a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 182a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 183a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 184a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 185a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::trivial_char_compare() 186a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 187a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "message" ); 188a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 189a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s == "message" ); 190a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( "message" == s ); 191a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 192a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 193a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::reserve() 194a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 195a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s; 196a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 197a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner try { 198a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.reserve(s.max_size() + 1); 199a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 200a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 201a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (length_error const&) { 202a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 203a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (...) { 204a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Expected exception is length_error: 205a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 206a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 207a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 208a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 209a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 210a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::mt() 211a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 212a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (USE_PTHREAD_API) || defined (USE_WINDOWS_API) 213a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const int nth = 2; 214a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# if defined (USE_PTHREAD_API) 215a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner pthread_t t[nth]; 216a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 217a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for ( int i = 0; i < nth; ++i ) { 218a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner pthread_create( &t[i], 0, f, 0 ); 219a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 220a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 221a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for ( int i = 0; i < nth; ++i ) { 222a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner pthread_join( t[i], 0 ); 223a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 224a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# endif // PTHREAD 225a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 226a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# if defined (USE_WINDOWS_API) 227a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //DWORD start = GetTickCount(); 228a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 229a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner HANDLE t[nth]; 230a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 231a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int i; // VC6 not support in-loop scope of cycle var 232a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for ( i = 0; i < nth; ++i ) { 233a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner t[i] = CreateThread(NULL, 0, f, 0, 0, NULL); 234a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 235a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 236a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner if (WaitForMultipleObjects(nth, t, TRUE, INFINITE) == WAIT_FAILED) { 237a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // On some platforms (evc3/evc4) WaitForMultipleObjects() with fWaitAll == TRUE 238a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // is not supported. We then wait with a loop on each thread: 239a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for ( i = 0; i < nth; ++i ) { 240a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner WaitForSingleObject(t[i], INFINITE); 241a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 242a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 243a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 244a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner /* 245a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner DWORD duration = GetTickCount() - start; 246a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ostringstream ostr; 247a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ostr << "Duration: " << duration << endl; 248a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_MESSAGE(ostr.str().c_str()); 249a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */ 250a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# endif 251a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 252a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 253a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 254a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::short_string() 255a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 256a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string const ref_short_str1("str1"), ref_short_str2("str2"); 257a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string short_str1(ref_short_str1), short_str2(ref_short_str2); 258a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string const ref_long_str1("str 1"); 259a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string const ref_long_str2("str 2"); 260a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string long_str1(ref_long_str1), long_str2(ref_long_str2); 261a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 262a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(short_str1 == ref_short_str1); 263a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(long_str1 == ref_long_str1); 264a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 265a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 266a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str1(short_str1); 267a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1 = long_str1; 268a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(str1 == ref_long_str1); 269a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 270a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 271a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 272a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str1(long_str1); 273a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1 = short_str1; 274a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(str1 == ref_short_str1); 275a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 276a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 277a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 278a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner short_str1.swap(short_str2); 279a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT((short_str1 == ref_short_str2) && (short_str2 == ref_short_str1)); 280a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner short_str1.swap(short_str2); 281a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 282a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 283a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 284a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner long_str1.swap(long_str2); 285a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT((long_str1 == ref_long_str2) && (long_str2 == ref_long_str1)); 286a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner long_str1.swap(long_str2); 287a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 288a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 289a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 290a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner short_str1.swap(long_str1); 291a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT((short_str1 == ref_long_str1) && (long_str1 == ref_short_str1)); 292a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner short_str1.swap(long_str1); 293a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 294a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 295a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 296a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner long_str1.swap(short_str1); 297a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT((short_str1 == ref_long_str1) && (long_str1 == ref_short_str1)); 298a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner long_str1.swap(short_str1); 299a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 300a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 301a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 302a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string a(256, 'a'); 303a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string b(256, 'b'); 304a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const char* as = a.c_str(); 305a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const char* bs = b.c_str(); 306a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner swap(a, b); 307a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( a.c_str() == bs ); 308a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( b.c_str() == as ); 309a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 310a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 311a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 312a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //This is to test move constructor 313a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner vector<string> str_vect; 314a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str_vect.push_back(short_str1); 315a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str_vect.push_back(long_str1); 316a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str_vect.push_back(short_str2); 317a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str_vect.push_back(long_str2); 318a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT((str_vect[0] == ref_short_str1) && 319a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (str_vect[1] == ref_long_str1) && 320a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (str_vect[2] == ref_short_str2) && 321a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (str_vect[3] == ref_long_str2)); 322a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 323a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 324a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 325a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::erase() 326a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 327a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner char const* c_str = "Hello, World!"; 328a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str(c_str); 329a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == c_str ); 330a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 331a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.erase(str.begin() + 1, str.end() - 1); // Erase all but first and last. 332a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 333a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner size_t i; 334a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (i = 0; i < str.size(); ++i) { 335a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner switch ( i ) { 336a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner case 0: 337a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str[i] == 'H' ); 338a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner break; 339a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner case 1: 340a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str[i] == '!' ); 341a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner break; 342a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner default: 343a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 344a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 345a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 346a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 347a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.insert(1, c_str); 348a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.erase(str.begin()); // Erase first element. 349a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.erase(str.end() - 1); // Erase last element. 350a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == c_str ); 351a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.clear(); // Erase all. 352a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str.empty() ); 353a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 354a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str = c_str; 355a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == c_str ); 356a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 357a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.erase(1, str.size() - 1); // Erase all but first and last. 358a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (i = 0; i < str.size(); i++) { 359a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner switch ( i ) { 360a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner case 0: 361a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str[i] == 'H' ); 362a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner break; 363a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner case 1: 364a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str[i] == '!' ); 365a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner break; 366a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner default: 367a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 368a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 369a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 370a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 371a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.erase(1); 372a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == "H" ); 373a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 374a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 375a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::data() 376a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 377a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string xx; 378a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 379a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( xx.data() != 0 ); // ISO-IEC-14882:1998(E), 21.3.6, paragraph 3 380a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if 0 381a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner /* This test really not required: in ISO-IEC-14882:1998(E) paragraph 3 stated: 382a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * '... and can have zero added to it', again: 'CAN', but not 'MUST'. 383a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * That's why I am comment this test. But I don't remove it due to I had 384a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * unevident problem with misinterpretation of data() return (i.e. data() 385a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * and c_str() provide different functionality!) and expect that this is 386a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * more-or-less common pitfall. 387a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * - ptr 388a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */ 389a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string low( "2004-01-01" ); 390a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // Blocks A and B should follow each other. 391a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // Block A: 392a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner xx = "123456"; 393a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner xx += low; 394a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner if ( strcmp( xx.data(), "1234562004-01-01" ) != 0 ) { 395a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner return -1; 396a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 397a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // End of block A 398a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 399a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // Block B: 400a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner xx = "1234"; 401a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner xx += ";"; 402a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 403a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner if ( strcmp( xx.data(), "1234;" ) != 0 ) { 404a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner return -1; 405a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 406a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // End of block B 407a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 408a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 409a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 410a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::c_str() 411a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 412a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string low( "2004-01-01" ); 413a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string xx; 414a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string yy; 415a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 416a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *(yy.c_str()) == '\0' ); // ISO-IEC-14882:1998(E), 21.3.6, paragraph 1 417a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 418a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // Blocks A and B should follow each other. 419a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // Block A: 420a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner xx = "123456"; 421a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner xx += low; 422a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( strcmp( xx.c_str(), "1234562004-01-01" ) == 0 ); 423a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // End of block A 424a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 425a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // Block B: 426a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner xx = "1234"; 427a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner xx += ";"; 428a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( strcmp( xx.c_str(), "1234;" ) == 0 ); 429a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // End of block B 430a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 431a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 432a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::null_char() 433a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 434a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // ISO/IEC 14882:1998(E), ISO/IEC 14882:2003(E), 21.3.4 ('... the const version') 435a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const string s( "123456" ); 436a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 437a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s[s.size()] == '\0' ); 438a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 439a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 440a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner try { 441a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Check is only here to avoid warning about value of expression not used 442a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s.at(s.size()) == '\0' ); 443a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 444a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 445a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (out_of_range const&) { 446a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( true ); 447a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 448a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch ( ... ) { 449a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 450a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 451a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 452a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 453a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 454a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::insert() 455a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 456a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string strorg = "This is test string for string calls"; 457a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str; 458a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner /* 459a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * In case of reallocation there is no auto reference problem 460a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * so we reserve a big enough string to be sure to test this 461a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * particular point. 462a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */ 463a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.reserve(100); 464a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str = strorg; 465a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 466a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //test self insertion: 467a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.insert(10, str.c_str() + 5, 15); 468a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == "This is teis test string st string for string calls" ); 469a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 470a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str = strorg; 471a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.insert(15, str.c_str() + 5, 25); 472a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == "This is test stis test string for stringring for string calls" ); 473a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 474a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str = strorg; 475a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.insert(0, str.c_str() + str.size() - 4, 4); 476a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == "allsThis is test string for string calls" ); 477a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 478a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str = strorg; 479a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.insert(0, str.c_str() + str.size() / 2 - 1, str.size() / 2 + 1); 480a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == "ng for string callsThis is test string for string calls" ); 481a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 482a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str = strorg; 483a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::iterator b = str.begin(); 484a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::const_iterator s = str.begin() + str.size() / 2 - 1; 485a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::const_iterator e = str.end(); 486a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.insert( b, s, e ); 487a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == "ng for string callsThis is test string for string calls" ); 488a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 489a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str = strorg; 490a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.insert(str.begin(), str.begin() + str.size() / 2 - 1, str.end()); 491a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == "ng for string callsThis is test string for string calls" ); 492a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 493a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#ifdef _STLP_MEMBER_TEMPLATES 494a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner vector<int> int_vect; 495a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Just a compile time test: 496a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.insert(str.end(), int_vect.begin(), int_vect.end()); 497a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 498a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 499a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str0; 500a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str0.insert(str0.begin(), 5, '0'); 501a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str0 == "00000" ); 502a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 503a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str1; 504a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 505a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type pos = 0, nb = 2; 506a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1.insert(pos, nb, '1'); 507a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 508a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1 == "11" ); 509a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 510a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str0.insert(0, str1); 511a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str0 == "1100000" ); 512a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 513a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str2("2345"); 514a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str0.insert(str0.size(), str2, 1, 2); 515a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str0 == "110000034" ); 516a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 517a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1.insert(str1.begin() + 1, 2, '2'); 518a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1 == "1221" ); 519a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 520a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1.insert(2, "333333", 3); 521a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1 == "1233321" ); 522a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 523a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1.insert(4, "4444"); 524a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1 == "12334444321" ); 525a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 526a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1.insert(str1.begin() + 6, '5'); 527a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1 == "123344544321" ); 528a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 529a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 530a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::replace() 531a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 532a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner /* 533a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * This test case is for the non template basic_string::replace method, 534a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * this is why we play with the const iterators and reference to guaranty 535a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * that the right method is called. 536a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */ 537a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const string v( "78" ); 538a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "123456" ); 539a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string const& cs = s; 540a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 541a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::iterator i = s.begin() + 1; 542a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.replace(i, i + 3, v.begin(), v.end()); 543a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s == "17856" ); 544a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 545a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "123456"; 546a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner i = s.begin() + 1; 547a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.replace(i, i + 1, v.begin(), v.end()); 548a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s == "1783456" ); 549a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 550a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "123456"; 551a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner i = s.begin() + 1; 552a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::const_iterator ci = s.begin() + 1; 553a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.replace(i, i + 3, ci + 3, cs.end()); 554a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s == "15656" ); 555a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 556a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "123456"; 557a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner i = s.begin() + 1; 558a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ci = s.begin() + 1; 559a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.replace(i, i + 3, ci, ci + 2); 560a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s == "12356" ); 561a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 562a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "123456"; 563a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner i = s.begin() + 1; 564a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ci = s.begin() + 1; 565a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.replace(i, i + 3, ci + 1, cs.end()); 566a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s == "1345656" ); 567a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 568a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "123456"; 569a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner i = s.begin(); 570a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ci = s.begin() + 1; 571a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.replace(i, i, ci, ci + 1); 572a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s == "2123456" ); 573a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 574a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "123456"; 575a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.replace(s.begin() + 4, s.end(), cs.begin(), cs.end()); 576a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s == "1234123456" ); 577a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 578a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner /* 579a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * This is the test for the template replace method. 580a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */ 581a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "123456"; 582a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::iterator b = s.begin() + 4; 583a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::iterator e = s.end(); 584a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::const_iterator rb = s.begin(); 585a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::const_iterator re = s.end(); 586a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.replace(b, e, rb, re); 587a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s == "1234123456" ); 588a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 589a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "123456"; 590a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.replace(s.begin() + 4, s.end(), s.begin(), s.end()); 591a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s == "1234123456" ); 592a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 593a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string strorg("This is test string for string calls"); 594a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str = strorg; 595a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.replace(5, 15, str.c_str(), 10); 596a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == "This This is tefor string calls" ); 597a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 598a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str = strorg; 599a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.replace(5, 5, str.c_str(), 10); 600a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == "This This is test string for string calls" ); 601a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 602a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if (defined (STLPORT) && defined(_STLP_MEMBER_TEMPLATES)) || ( !defined (STLPORT) && !defined(__GNUC__) ) 603a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner deque<char> cdeque; 604a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner cdeque.push_back('I'); 605a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str.replace(str.begin(), str.begin() + 11, cdeque.begin(), cdeque.end()); 606a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str == "Is test string for string calls" ); 607a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 608a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 609a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 610a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::resize() 611a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 612a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s; 613a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 614a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.resize(0); 615a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 616a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *s.c_str() == 0 ); 617a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 618a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "1234567"; 619a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 620a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.resize(0); 621a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *s.c_str() == 0 ); 622a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 623a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "1234567"; 624a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.resize(1); 625a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.size() == 1 ); 626a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *s.c_str() == '1' ); 627a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( *(s.c_str() + 1) == 0 ); 628a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 629a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s = "1234567"; 630a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.resize(10); 631a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.size() == 10 ); 632a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s[6] == '7' ); 633a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s[7] == 0 ); 634a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s[8] == 0 ); 635a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s[9] == 0 ); 636a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 637a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 638a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::find() 639a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 640a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s("one two three one two three"); 641a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.find("one") == 0 ); 642a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.find('t') == 4 ); 643a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.find('t', 5) == 8 ); 644a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //We are trying to get a const reference to the npos string static member to 645a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //force the compiler to allocate memory for this variable. It is used to reveal 646a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //a bug of STLport which was simply declaring npos without instanciating it. 647a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && defined (_STLP_STATIC_CONST_INIT_BUG) 648a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type const& npos_local = string::npos; 649a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#else 650a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# define npos_local string::npos 651a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 652a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.find("four") == npos_local ); 653a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.find("one", string::npos) == npos_local ); 654a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 655a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.find_first_of("abcde") == 2 ); 656a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 657a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.find_first_not_of("enotw ") == 9 ); 658a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 659a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string empty; 660a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.substr(s.find(empty), empty.size()) == empty ); 661a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 662a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 663a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::bogus_edge_find() 664a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 665a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner /* ISO/IEC 14882 2003, 21.3.6.1 basic_string::find [lib.string::find] 666a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * 667a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * size_type find(const basic_string<charT,traits,Allocator>& str, 668a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * size_type pos = 0) const; 669a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * Effects: Determines the lowest position xpos, if possible, such that 670a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * both of the following conditions obtain: 671a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * pos <= xpos and xpos + str.size() <= size(); 672a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * at(xpos+I) == str.at(I) for all elements I of the string controlled by str. 673a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * Returns: xpos if the function can determine such a value for xpos. Otherwise, 674a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * returns npos. 675a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * Notes: Uses traits::eq(). 676a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * 677a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * === 678a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * So, from formal point of view 679a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * string s; string::size_type p = s.find( "", 0, 0 ); 680a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * should return 0 in p, i.e. position out-of-bound of string, so 681a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * code like following is bad: 682a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * string s; 683a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * 684a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * string::size_type p = s.find( "", 0, 0 ); 685a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * 686a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * ... 687a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * 688a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * if ( p != string::npos ) { // normal 689a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * char ch = s[p]; // Arghhhhhhhhhh 690a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * } 691a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * 692a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * People near Standard commete has opinion opposite to my. Even if it looks 693a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * like bogus behaviour for me, it should be fixed. 694a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */ 695a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 696a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 697a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s; 698a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type p = s.find( "", 0, 0 ); 699a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 700a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner /* CPPUNIT_CHECK( p == string::npos ); */ 701a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( p == 0 ); // bogus result, isn't it? 702a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 703a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 704a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "123" ); 705a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type p = s.find( "", 0, 0 ); 706a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 707a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( p == 0 ); 708a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 709a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 710a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "123" ); 711a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type p = s.find( "", 1, 0 ); 712a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 713a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( p == 1 ); 714a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 715a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 716a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "" ); 717a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type p = s.find( "", 1, 0 ); 718a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 719a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( p == string::npos ); 720a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 721a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 722a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "123" ); 723a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type p = s.find( "", 3, 0 ); 724a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 725a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( p == 3 ); // bogus result, isn't it? 726a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 727a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 728a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s; 729a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type p = s.rfind( "", 0, 0 ); 730a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 731a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner /* CPPUNIT_CHECK( p == string::npos ); */ 732a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( p == 0 ); // bogus result, isn't it? 733a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 734a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 735a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "123" ); 736a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type p = s.rfind( "", 0, 0 ); 737a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 738a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( p == 0 ); 739a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 740a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 741a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "123" ); 742a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type p = s.rfind( "", 1, 0 ); 743a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 744a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( p == 1 ); 745a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 746a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 747a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "" ); 748a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type p = s.rfind( "", 1, 0 ); 749a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 750a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( p == 0 ); // bogus result, isn't it? 751a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 752a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 753a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s( "123" ); 754a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::size_type p = s.rfind( "", 3, 0 ); 755a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 756a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( p == 3 ); // bogus result, isn't it? 757a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 758a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 759a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 760a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::rfind() 761a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 762a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // 21.3.6.2 763a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s("one two three one two three"); 764a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 765a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.rfind("two") == 18 ); 766a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.rfind("two", 0) == string::npos ); 767a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.rfind("two", 11) == 4 ); 768a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.rfind('w') == 19 ); 769a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 770a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string test( "aba" ); 771a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 772a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.rfind( "a", 2, 1 ) == 2 ); 773a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.rfind( "a", 1, 1 ) == 0 ); 774a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.rfind( "a", 0, 1 ) == 0 ); 775a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 776a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.rfind( 'a', 2 ) == 2 ); 777a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.rfind( 'a', 1 ) == 0 ); 778a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.rfind( 'a', 0 ) == 0 ); 779a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 780a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 781a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::find_last_of() 782a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 783a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // 21.3.6.4 784a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s("one two three one two three"); 785a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 786a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.find_last_of("abcde") == 26 ); 787a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 788a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string test( "aba" ); 789a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 790a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( "a", 2, 1 ) == 2 ); 791a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( "a", 1, 1 ) == 0 ); 792a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( "a", 0, 1 ) == 0 ); 793a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 794a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( 'a', 2 ) == 2 ); 795a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( 'a', 1 ) == 0 ); 796a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_of( 'a', 0 ) == 0 ); 797a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 798a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 799a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::find_last_not_of() 800a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 801a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // 21.3.6.6 802a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s("one two three one two three"); 803a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 804a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s.find_last_not_of("ehortw ") == 15 ); 805a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 806a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string test( "aba" ); 807a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 808a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "a", 2, 1 ) == 1 ); 809a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "b", 2, 1 ) == 2 ); 810a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "a", 1, 1 ) == 1 ); 811a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "b", 1, 1 ) == 0 ); 812a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "a", 0, 1 ) == string::npos ); 813a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( "b", 0, 1 ) == 0 ); 814a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 815a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'a', 2 ) == 1 ); 816a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'b', 2 ) == 2 ); 817a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'a', 1 ) == 1 ); 818a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'b', 1 ) == 0 ); 819a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'a', 0 ) == string::npos ); 820a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( test.find_last_not_of( 'b', 0 ) == 0 ); 821a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 822a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 823a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::copy() 824a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 825a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s("foo"); 826a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner char dest[4]; 827a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dest[0] = dest[1] = dest[2] = dest[3] = 1; 828a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.copy(dest, 4); 829a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int pos = 0; 830a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 'f' ); 831a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 'o' ); 832a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 'o' ); 833a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 1 ); 834a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 835a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner dest[0] = dest[1] = dest[2] = dest[3] = 1; 836a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.copy(dest, 4, 2); 837a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner pos = 0; 838a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 'o' ); 839a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( dest[pos++] == 1 ); 840a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 841a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 842a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner try { 843a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.copy(dest, 4, 5); 844a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 845a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 846a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (out_of_range const&) { 847a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 848a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch ( ... ) { 849a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 850a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 851a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 852a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 853a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 854a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::assign() 855a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 856a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s; 857a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner char const* cstr = "test string for assign"; 858a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 859a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.assign(cstr, cstr + 22); 860a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s == "test string for assign" ); 861a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 862a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s2("other test string"); 863a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.assign(s2); 864a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( s == s2 ); 865a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 866a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner static string str1; 867a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner static string str2; 868a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 869a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // short string optim: 870a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1 = "123456"; 871a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // longer than short string: 872a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str2 = "1234567890123456789012345678901234567890"; 873a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 874a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(str1[5] == '6'); 875a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(str2[29] == '0'); 876a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 877a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 878a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner/* This test is to check if string properly supports the short string 879a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * optimization. It has been found out that eMbedded Visual C++ 3.0 and .NET 880a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * compilers for the ARM platform fail to pass structs and classes of certain 881a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * size per value. This seems to be a known compiler bug. For other processors 882a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * (e.g. x86) the error doesn't occur. 883a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * (The ARM compiler creates a temporary object from teststr on the stack, to 884a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * pass it to the helper function. It uses the copy constructor for this. 885a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * After this the temporary object is copied to another place on the stack. 886a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * The result is that the _M_finish pointer then points to the wrong buffer 887a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner * end and the size of the short string is incorrectly calculated.) 888a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */ 889a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::short_string_optim_bug() 890a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 891a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string teststr("shortest"); 892a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 893a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner bool short_string_optim_bug_helper(string teststr); 894a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 895a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(true == short_string_optim_bug_helper(teststr)); 896a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 897a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 898a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerbool short_string_optim_bug_helper(string teststr) 899a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 900a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner size_t ss = teststr.size(); 901a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner return (ss == 8); 902a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 903a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 904a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::compare() 905a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 906a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str1("abcdef"); 907a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str2; 908a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 909a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str2 = "abcdef"; 910a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(str2) == 0 ); 911a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str2 = "abcde"; 912a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(str2) > 0 ); 913a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str2 = "abcdefg"; 914a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(str2) < 0 ); 915a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 916a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare("abcdef") == 0 ); 917a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare("abcde") > 0 ); 918a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare("abcdefg") < 0 ); 919a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 920a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str2 = "cde"; 921a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2) == 0 ); 922a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str2 = "cd"; 923a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2) > 0 ); 924a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str2 = "cdef"; 925a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2) < 0 ); 926a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 927a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str2 = "abcdef"; 928a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2, 2, 3) == 0 ); 929a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2, 2, 2) > 0 ); 930a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, str2, 2, 4) < 0 ); 931a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 932a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, "cdefgh", 3) == 0 ); 933a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, "cdefgh", 2) > 0 ); 934a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.compare(2, 3, "cdefgh", 4) < 0 ); 935a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 936a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 937a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner/* 938a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass mystring : public string { 939a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerpublic: 940a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mystring() {} 941a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mystring(string const& s) : string(s) {} 942a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 943a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mystring& operator = (string const& s) { 944a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string::operator = (s); 945a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner return *this; 946a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner }; 947a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 948a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner*/ 949a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 950a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::template_expression() 951a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 952a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string one("one"), two("two"), three("three"); 953a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string space(1, ' '); 954a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 955a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // check availability of [un]equality operators 956a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 957a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // string-string 958a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner one == two; 959a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner one != two; 960a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // string-literal 961a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner one == "two"; 962a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner one != "two"; 963a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // literal-string 964a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner "one" == two; 965a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner "one" != two; 966a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // strsum-string 967a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (one + two) == three; 968a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (one + two) != three; 969a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // string-strsum 970a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner one == (two + three); 971a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner one != (two + three); 972a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // strsum-literal 973a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (one + two) == "three"; 974a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (one + two) != "three"; 975a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // literal-strsum 976a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner "one" == (two + three); 977a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner "one" != (two + three); 978a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // strsum-strsum 979a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (one + two) == (two + three); 980a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner (one + two) != (two + three); 981a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 982a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 983a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 984a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string result(one + ' ' + two + ' ' + three); 985a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == "one two three" ); 986a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 987a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 988a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 989a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string result(one + ' ' + two + ' ' + three, 4); 990a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == "two three" ); 991a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 992a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 993a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 994a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string result(one + ' ' + two + ' ' + three, 4, 3); 995a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == "two" ); 996a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 997a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 998a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //2 members expressions: 999a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (' ' + one) == " one" ); 1000a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (one + ' ') == "one " ); 1001a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (one + " two") == "one two" ); 1002a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ("one " + two) == "one two" ); 1003a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (one + space) == "one " ); 1004a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1005a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //3 members expressions: 1006a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ((one + space) + "two") == "one two" ); 1007a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ("one" + (space + two)) == "one two" ); 1008a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ((one + space) + two) == "one two" ); 1009a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (one + (space + two)) == "one two" ); 1010a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ((one + space) + 't') == "one t" ); 1011a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ('o' + (space + two)) == "o two" ); 1012a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1013a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //4 members expressions: 1014a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ((one + space) + (two + space)) == "one two " ); 1015a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1016a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //special operators 1017a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1018a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string result; 1019a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result = one + space + two; 1020a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == "one two" ); 1021a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1022a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result += space + three; 1023a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == "one two three" ); 1024a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1025a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1026a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //special append method 1027a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1028a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string result; 1029a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Use reserve to avoid reallocation and really test auto-referencing problems: 1030a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.reserve(64); 1031a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1032a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.append(one + space + two); 1033a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == "one two" ); 1034a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1035a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.append(space + result + space + three); 1036a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == "one two one two three" ); 1037a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1038a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result = "one two"; 1039a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.append(space + three, 1, 2); 1040a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( result == "one twoth" ); 1041a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1042a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.append(space + result); 1043a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == "one twoth one twoth" ); 1044a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1045a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1046a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //special assign method 1047a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1048a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string result; 1049a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Use reserve to avoid reallocation and really test auto-referencing problems: 1050a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.reserve(64); 1051a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1052a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.assign(one + space + two + space + three); 1053a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == "one two three" ); 1054a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1055a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.assign(one + space + two + space + three, 3, 5); 1056a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == " two " ); 1057a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1058a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.assign(one + result + three); 1059a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == "one two three" ); 1060a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1061a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1062a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1063a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( !(one + ' ' + two).empty() ); 1064a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1065a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner char result = (one + ' ' + two)[3]; 1066a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == ' ' ); 1067a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1068a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result = (one + ' ' + two).at(3); 1069a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == ' ' ); 1070a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1071a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 1072a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner try { 1073a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result = (one + ' ' + two).at(10); 1074a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 1075a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1076a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (out_of_range const&) { 1077a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( result == ' ' ); 1078a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1079a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (...) { 1080a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 1081a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1082a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 1083a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1084a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1085a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner /* 1086a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mystring a("ing"); 1087a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //gcc failed to compile following expression when template expressions are activated. 1088a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //MSVC sees no problem. gcc limitation or MSVC is too cool ?? 1089a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mystring b = "str" + a; 1090a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner */ 1091a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 1092a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1093a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (TE_TMP_TEST_IGNORED) 1094a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass superstring 1095a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 1096a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner public: 1097a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner superstring() : 1098a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s("super") 1099a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner {} 1100a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1101a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner superstring( const string& str ) : 1102a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s( str ) 1103a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner {} 1104a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1105a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner superstring operator / (const string& str ) 1106a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { return superstring( s + "/" + str ); } 1107a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1108a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner superstring operator / (const char* str ) 1109a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { return superstring( s + "/" + str ); } 1110a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1111a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner private: 1112a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s; 1113a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 1114a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 1115a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1116a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::te_tmp() 1117a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 1118a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (TE_TMP_TEST_IGNORED) 1119a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner superstring s; 1120a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string more( "more" ); 1121a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string less( "less" ); 1122a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1123a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner superstring r = s / (more + less); 1124a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 1125a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 1126a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1127a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass mypath 1128a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 1129a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner public: 1130a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mypath( const string& s ) : 1131a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner p( s ) 1132a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { } 1133a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1134a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const mypath& operator / ( const string& ); 1135a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const string& str() const 1136a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { return p; } 1137a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1138a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner private: 1139a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string p; 1140a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 1141a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1142a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerconst mypath& mypath::operator /( const string& s ) 1143a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 1144a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner p += '/'; 1145a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner p += s; 1146a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner return *this; 1147a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 1148a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1149a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::oper_tmp() 1150a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 1151a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s1( "path1" ); 1152a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s2( ".ext" ); 1153a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1154a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string& rs1 = s1; 1155a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string& rs2 = s2; 1156a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1157a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (mypath( string( "/root" ) ) / (rs1 + rs2)).str() == "/root/path1.ext" ); 1158a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 1159a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1160a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::template_wexpression() 1161a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 1162a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_NO_WCHAR_T) 1163a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# if !defined (__CYGWIN__) || defined (STLPORT) 1164a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner wstring one(L"one"), two(L"two"), three(L"three"); 1165a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner wstring space(L" "); 1166a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1167a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1168a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner wstring result(one + L' ' + two + L' ' + three); 1169a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L"one two three" ); 1170a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1171a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1172a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1173a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner wstring result(one + L' ' + two + L' ' + three, 4); 1174a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L"two three" ); 1175a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1176a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1177a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1178a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner wstring result(one + L' ' + two + L' ' + three, 4, 3); 1179a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L"two" ); 1180a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1181a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1182a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //2 members expressions: 1183a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (L' ' + one) == L" one" ); 1184a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (one + L' ') == L"one " ); 1185a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (one + L" two") == L"one two" ); 1186a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (L"one " + two) == L"one two" ); 1187a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (one + space) == L"one " ); 1188a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1189a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //3 members expressions: 1190a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ((one + space) + L"two") == L"one two" ); 1191a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (L"one" + (space + two)) == L"one two" ); 1192a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ((one + space) + two) == L"one two" ); 1193a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (one + (space + two)) == L"one two" ); 1194a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ((one + space) + L't') == L"one t" ); 1195a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( (L'o' + (space + two)) == L"o two" ); 1196a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1197a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //4 members expressions: 1198a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( ((one + space) + (two + space)) == L"one two " ); 1199a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1200a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //special operators 1201a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1202a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner wstring result; 1203a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result = one + space + two; 1204a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L"one two" ); 1205a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1206a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result += space + three; 1207a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L"one two three" ); 1208a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1209a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1210a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //special append method 1211a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1212a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner wstring result; 1213a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Use reserve to avoid reallocation and really test auto-referencing problems: 1214a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.reserve(64); 1215a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1216a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.append(one + space + two); 1217a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L"one two" ); 1218a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1219a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.append(space + result + space + three); 1220a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L"one two one two three" ); 1221a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1222a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result = L"one two"; 1223a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.append(space + three, 1, 2); 1224a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( result == L"one twoth" ); 1225a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1226a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.append(space + result); 1227a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L"one twoth one twoth" ); 1228a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1229a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1230a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //special assign method 1231a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1232a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner wstring result; 1233a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Use reserve to avoid reallocation and really test auto-referencing problems: 1234a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.reserve(64); 1235a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1236a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.assign(one + space + two + space + three); 1237a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L"one two three" ); 1238a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1239a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.assign(one + space + two + space + three, 3, 5); 1240a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L" two " ); 1241a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1242a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result.assign(one + result + three); 1243a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L"one two three" ); 1244a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1245a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1246a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1247a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( !(one + L' ' + two).empty() ); 1248a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1249a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner wchar_t result = (one + L' ' + two)[3]; 1250a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L' ' ); 1251a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1252a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result = (one + L' ' + two).at(3); 1253a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( result == L' ' ); 1254a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1255a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS) 1256a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner try { 1257a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner result = (one + L' ' + two).at(10); 1258a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 1259a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1260a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (out_of_range const&) { 1261a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( result == L' ' ); 1262a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1263a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner catch (...) { 1264a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_FAIL; 1265a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1266a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# endif 1267a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1268a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# endif 1269a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 1270a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 1271a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1272a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::io() 1273a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 1274a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS) 1275a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string str("STLport"); 1276a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1277a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ostringstream ostr; 1278a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ostr << str; 1279a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( ostr.good() ); 1280a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( ostr.str() == str ); 1281a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1282a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1283a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner istringstream istr(str); 1284a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string istr_content; 1285a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner istr >> istr_content; 1286a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( !istr.fail() && istr.eof() ); 1287a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( istr_content == str ); 1288a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1289a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1290a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner istringstream istr(str); 1291a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner istr.width(3); 1292a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string istr_content; 1293a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner istr >> istr_content; 1294a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( !istr.fail() && !istr.eof() ); 1295a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( istr_content == "STL" ); 1296a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1297a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 1298a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 1299a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1300a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::allocator_with_state() 1301a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 1302a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !(defined (STLPORT) && defined (_STLP_NO_CUSTOM_IO)) 1303a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1304a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner char buf1[1024]; 1305a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackAllocator<char> stack1(buf1, buf1 + sizeof(buf1)); 1306a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1307a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner char buf2[1024]; 1308a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackAllocator<char> stack2(buf2, buf2 + sizeof(buf2)); 1309a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1310a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef basic_string<char, char_traits<char>, StackAllocator<char> > StackString; 1311a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1312a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str1("string stack1", stack1); 1313a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str1Cpy(str1); 1314a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1315a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str2("string stack2", stack2); 1316a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str2Cpy(str2); 1317a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1318a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1.swap(str2); 1319a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1320a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator().swaped() ); 1321a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator().swaped() ); 1322a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1323a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1 == str2Cpy ); 1324a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2 == str1Cpy ); 1325a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator() == stack2 ); 1326a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator() == stack1 ); 1327a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1328a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( stack1.ok() ); 1329a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( stack2.ok() ); 1330a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner stack1.reset(); stack2.reset(); 1331a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1332a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1333a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str1("longer string from stack1 allocator instance for dynamic allocation", stack1); 1334a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str1Cpy(str1); 1335a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1336a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str2("longer string from stack2 allocator instance for dynamic allocation", stack2); 1337a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str2Cpy(str2); 1338a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1339a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1.swap(str2); 1340a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1341a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator().swaped() ); 1342a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator().swaped() ); 1343a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1344a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1 == str2Cpy ); 1345a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2 == str1Cpy ); 1346a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator() == stack2 ); 1347a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator() == stack1 ); 1348a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1349a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( stack1.ok() ); 1350a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( stack2.ok() ); 1351a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner stack1.reset(); stack2.reset(); 1352a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1353a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1354a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1355a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str1("string stack1", stack1); 1356a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str1Cpy(str1); 1357a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1358a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str2("longer string from stack2 allocator instance for dynamic allocation", stack2); 1359a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str2Cpy(str2); 1360a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1361a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1.swap(str2); 1362a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1363a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator().swaped() ); 1364a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator().swaped() ); 1365a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1366a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1 == str2Cpy ); 1367a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2 == str1Cpy ); 1368a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator() == stack2 ); 1369a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator() == stack1 ); 1370a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1371a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( stack1.ok() ); 1372a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( stack2.ok() ); 1373a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner stack1.reset(); stack2.reset(); 1374a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1375a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1376a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 1377a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str1("longer string from stack1 allocator instance for dynamic allocation", stack1); 1378a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str1Cpy(str1); 1379a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1380a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str2("string stack2", stack2); 1381a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner StackString str2Cpy(str2); 1382a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1383a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner str1.swap(str2); 1384a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1385a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator().swaped() ); 1386a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator().swaped() ); 1387a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1388a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1 == str2Cpy ); 1389a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2 == str1Cpy ); 1390a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str1.get_allocator() == stack2 ); 1391a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( str2.get_allocator() == stack1 ); 1392a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1393a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( stack1.ok() ); 1394a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( stack2.ok() ); 1395a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner stack1.reset(); stack2.reset(); 1396a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 1397a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 1398a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1399a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::capacity() 1400a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 1401a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s; 1402a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1403a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s.capacity() > 0 ); 1404a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s.capacity() < s.max_size() ); 1405a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s.capacity() >= s.size() ); 1406a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1407a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#ifndef _STLP_SHORT_STRING_SZ 1408a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner# define _STLP_SHORT_STRING_SZ 16 // see stlport/stl/_string_base.h 1409a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 1410a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1411a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for ( int i = 0; i < _STLP_SHORT_STRING_SZ + 2; ++i ) { 1412a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s += ' '; 1413a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s.capacity() > 0 ); 1414a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s.capacity() < s.max_size() ); 1415a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s.capacity() >= s.size() ); 1416a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 1417a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 1418a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1419a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid StringTest::concat24() 1420a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 1421a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner string s = string( "123456789012345678901234" ) + string( "123456789012345678901234" ); 1422a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 1423a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s.length() == 48 ); 1424a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s[23] == '4' ); 1425a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s[24] == '1' ); 1426a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_CHECK( s[47] == '4' ); 1427a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 1428