1 // 2004-11-29 Paolo Carlini <pcarlini@suse.de> 2 3 // Copyright (C) 2004-2018 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 3, 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 COPYING3. If not see 18 // <http://www.gnu.org/licenses/>. 19 20 // 21.3.3 string capacity 21 22 // { dg-options "-DMAX_SIZE=16" { target simulator } } 23 24 #ifndef MAX_SIZE 25 #define MAX_SIZE 20 26 #endif 27 28 #include <string> 29 #include <testsuite_hooks.h> 30 31 // libstdc++/18654 test01()32void test01() 33 { 34 using namespace std; 35 36 typedef wstring::size_type size_type; 37 38 #if _GLIBCXX_USE_CXX11_ABI 39 // Can't shrink below small string size. 40 const size_type minsize = wstring().capacity() + 1; 41 #else 42 // Exact shrink-to-size and shrink-to-fit 43 const size_type minsize = 2 << 0; 44 #endif 45 const size_type maxsize = 2 << MAX_SIZE; 46 for (size_type i = minsize; i <= maxsize; i *= 2) 47 { 48 wstring str(i, L'x'); 49 str.reserve(3 * i); 50 51 str.reserve(2 * i); 52 VERIFY( str.capacity() == 2 * i ); 53 54 str.reserve(); 55 VERIFY( str.capacity() == i ); 56 } 57 } 58 main()59int main() 60 { 61 test01(); 62 return 0; 63 } 64