X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=libstdc%2B%2B-v3%2Ftestsuite%2F21_strings%2Fbasic_string%2Felement_access%2Fchar%2F3.cc;fp=libstdc%2B%2B-v3%2Ftestsuite%2F21_strings%2Fbasic_string%2Felement_access%2Fchar%2F3.cc;h=385ef28babaa3c0588175ac6a43783b71855cf15;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=0000000000000000000000000000000000000000;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc new file mode 100644 index 00000000..385ef28b --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/element_access/char/3.cc @@ -0,0 +1,83 @@ +// 1999-06-08 bkoz + +// Copyright (C) 1999, 2003, 2009 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// 21.3 template class basic_string + +#include +#include +#include + +// Do another sanity check, this time for member functions that return +// iterators, namely insert and erase. +bool test02(void) +{ + bool test __attribute__((unused)) = true; + typedef std::string::size_type csize_type; + typedef std::string::iterator siterator; + typedef std::string::reverse_iterator sriterator; + siterator it1; + sriterator rit1; + + const std::string str01("its beach, santa cruz"); + + std::string str02 = str01; + std::string str05 = str02; // optional, so that begin below causes a mutate + std::string::iterator p = str02.insert(str02.begin(), ' '); + std::string str03 = str02; + VERIFY( str03 == str02 ); + *p = '!'; + VERIFY( *str03.c_str() == ' ' ); + str03[0] = '@'; + VERIFY( str02[0] == '!' ); + VERIFY( *p == '!' ); + VERIFY( str02 != str05 ); + VERIFY( str02 != str03 ); + + std::string str10 = str01; + std::string::iterator p2 = str10.insert(str10.begin(), 'a'); + std::string str11 = str10; + *p2 = 'e'; + VERIFY( str11 != str10 ); + + std::string str06 = str01; + std::string str07 = str06; // optional, so that begin below causes a mutate + p = str06.erase(str06.begin()); + std::string str08 = str06; + VERIFY( str08 == str06 ); + *p = '!'; + VERIFY( *str08.c_str() == 't' ); + str08[0] = '@'; + VERIFY( str06[0] == '!' ); + VERIFY( *p == '!' ); + VERIFY( str06 != str07 ); + VERIFY( str06 != str08 ); + + std::string str12 = str01; + p2 = str12.erase(str12.begin(), str12.begin() + str12.size() - 1); + std::string str13 = str12; + *p2 = 'e'; + VERIFY( str12 != str13 ); + return test; +} + +int main() +{ + test02(); + return 0; +}