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