1// 2004-11-29 Paolo Carlini <pcarlini@suse.de> 2 3// Copyright (C) 2004-2015 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 32void test01() 33{ 34 using namespace std; 35 bool test __attribute__((unused)) = true; 36 37 typedef wstring::size_type size_type; 38 39#if _GLIBCXX_USE_CXX11_ABI 40 // Can't shrink below small string size. 41 const size_type minsize = 2 << 1; 42#else 43 // Exact shrink-to-size and shrink-to-fit 44 const size_type minsize = 2 << 0; 45#endif 46 const size_type maxsize = 2 << MAX_SIZE; 47 for (size_type i = minsize; i <= maxsize; i *= 2) 48 { 49 wstring str(i, L'x'); 50 str.reserve(3 * i); 51 52 str.reserve(2 * i); 53 VERIFY( str.capacity() == 2 * i ); 54 55 str.reserve(); 56 VERIFY( str.capacity() == i ); 57 } 58} 59 60int main() 61{ 62 test01(); 63 return 0; 64} 65