1// 1999-06-08 bkoz 2 3// Copyright (C) 1999 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 2, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING. If not, write to the Free 18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 19// USA. 20 21// 21.3.4 basic_string element access 22 23#include <string> 24#include <stdexcept> 25#include <testsuite_hooks.h> 26 27bool test01(void) 28{ 29 bool test = true; 30 typedef std::string::size_type csize_type; 31 typedef std::string::const_reference cref; 32 typedef std::string::reference ref; 33 csize_type npos = std::string::npos; 34 csize_type csz01, csz02; 35 36 const std::string str01("tamarindo, costa rica"); 37 std::string str02("41st street beach, capitola, california"); 38 std::string str03; 39 40 // const_reference operator[] (size_type pos) const; 41 csz01 = str01.size(); 42 cref cref1 = str01[csz01 - 1]; 43 VERIFY( cref1 == 'a' ); 44 cref cref2 = str01[csz01]; 45 VERIFY( cref2 == char() ); 46 47 // reference operator[] (size_type pos); 48 csz02 = str02.size(); 49 ref ref1 = str02[csz02 - 1]; 50 VERIFY( ref1 == 'a' ); 51 ref ref2 = str02[1]; 52 VERIFY( ref2 == '1' ); 53 54 // const_reference at(size_type pos) const; 55 csz01 = str01.size(); 56 cref cref3 = str01.at(csz01 - 1); 57 VERIFY( cref3 == 'a' ); 58 try { 59 cref cref4 = str01.at(csz01); 60 VERIFY( false ); // Should not get here, as exception thrown. 61 } 62 catch(std::out_of_range& fail) { 63 VERIFY( true ); 64 } 65 catch(...) { 66 VERIFY( false ); 67 } 68 69 // reference at(size_type pos); 70 csz01 = str02.size(); 71 ref ref3 = str02.at(csz02 - 1); 72 VERIFY( ref3 == 'a' ); 73 try { 74 ref ref4 = str02.at(csz02); 75 VERIFY( false ); // Should not get here, as exception thrown. 76 } 77 catch(std::out_of_range& fail) { 78 VERIFY( true ); 79 } 80 catch(...) { 81 VERIFY( false ); 82 } 83 84#ifdef DEBUG_ASSERT 85 assert(test); 86#endif 87 return test; 88} 89 90int main() 91{ 92 test01(); 93 return 0; 94} 95