diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t | |
download | cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2 cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t')
10 files changed, 760 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/1.cc new file mode 100644 index 000000000..a98201f67 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/1.cc @@ -0,0 +1,165 @@ +// 1999-07-01 bkoz + +// Copyright (C) 1999, 2000, 2001, 2002, 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 +// <http://www.gnu.org/licenses/>. + +// 21.3.7.9 inserters and extractors + +// NB: This file is predicated on sstreams, istreams, and ostreams +// working, not to mention other major details like char_traits, and +// all of the string class. + +#include <string> +#include <stdexcept> +#include <sstream> +#include <fstream> +#include <iostream> +#include <testsuite_hooks.h> + +bool test01(void) +{ + bool test __attribute__((unused)) = true; + typedef std::wstring::size_type csize_type; + typedef std::wstring::const_reference cref; + typedef std::wstring::reference ref; + + const std::wstring str01(L"sailing grand traverse bay\n" + L"\t\t\t from Elk Rapids to the point reminds me of miles"); + const std::wstring str02(L"sailing"); + const std::wstring str03(L"grand"); + const std::wstring str04(L"traverse"); + const std::wstring str05; + std::wstring str10; + + // istream& operator>>(istream&, string&) + std::wistringstream istrs01(str01); + istrs01 >> str10; + VERIFY( str10 == str02 ); + try + { + std::wistringstream::int_type i01 = istrs01.peek(); //a-boo + VERIFY( std::wistringstream::traits_type::to_char_type(i01) == L' ' ); + } + catch(std::exception& fail) + { + VERIFY( false ); // shouldn't throw + } + + istrs01.clear(); + istrs01 >> str10; + VERIFY( str10 == str03 ); + istrs01.clear(); + istrs01 >> str10; + VERIFY( str10 == str04 ); // sentry picks out the white spaces. . + + std::wistringstream istrs02(str05); // empty + istrs02 >> str10; + VERIFY( str10 == str04 ); + + // istream& getline(istream&, string&, char) + // istream& getline(istream&, string&) + try + { + istrs01.clear(); + getline(istrs01, str10); + VERIFY( !istrs01.fail() ); + VERIFY( !istrs01.eof() ); + VERIFY( istrs01.good() ); + VERIFY( str10 == L" bay" ); + } + catch(std::exception& fail) + { + VERIFY( false ); // shouldn't throw + } + + try + { + istrs01.clear(); + getline(istrs01, str10, L'\t'); + VERIFY( !istrs01.fail() ); + VERIFY( !istrs01.eof() ); + VERIFY( istrs01.good() ); + VERIFY( str10 == str05 ); + } + catch(std::exception& fail) + { + VERIFY( false ); // shouldn't throw + } + + try + { + istrs01.clear(); + getline(istrs01, str10, L'\t'); + VERIFY( !istrs01.fail() ); + VERIFY( !istrs01.eof() ); + VERIFY( istrs01.good() ); + VERIFY( str10 == str05 ); + } + catch(std::exception& fail) + { + VERIFY( false ); // shouldn't throw + } + + try + { + istrs01.clear(); + getline(istrs01, str10, L'.'); + VERIFY( !istrs01.fail() ); + VERIFY( istrs01.eof() ); + VERIFY( !istrs01.good() ); + VERIFY( str10 == L"\t from Elk Rapids to the point reminds me of miles" ); + } + catch(std::exception& fail) + { + VERIFY( false ); // shouldn't throw + } + + try + { + getline(istrs02, str10); + VERIFY( istrs02.fail() ); + VERIFY( istrs02.eof() ); + VERIFY( str10 == L"\t from Elk Rapids to the point reminds me of miles" ); + } + catch(std::exception& fail) + { + VERIFY( false ); // shouldn't throw + } + + // ostream& operator<<(ostream&, const basic_string&) + std::wostringstream ostrs01; + try + { + ostrs01 << str01; + VERIFY( ostrs01.str() == str01 ); + } + catch(std::exception& fail) + { + VERIFY( false ); + } + + std::wstring hello_world; + std::wcout << hello_world; + return test; +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc new file mode 100644 index 000000000..0883e13c3 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/10.cc @@ -0,0 +1,84 @@ +// Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation +// +// 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 +// <http://www.gnu.org/licenses/>. + +// 21.3.7.9 inserters and extractors + +#include <istream> +#include <string> +#include <fstream> +#include <cstdlib> +#include <testsuite_hooks.h> + +using namespace std; + +wstring prepare(wstring::size_type len, unsigned nchunks, wchar_t delim) +{ + wstring ret; + for (unsigned i = 0; i < nchunks; ++i) + { + for (wstring::size_type j = 0; j < len; ++j) + ret.push_back(L'a' + rand() % 26); + len *= 2; + ret.push_back(delim); + } + return ret; +} + +void check(wistream& stream, const wstring& str, unsigned nchunks, wchar_t delim) +{ + bool test __attribute__((unused)) = true; + + wstring chunk; + wstring::size_type index = 0, index_new = 0; + unsigned n = 0; + + while (getline(stream, chunk, delim)) + { + index_new = str.find(delim, index); + VERIFY( !str.compare(index, index_new - index, chunk) ); + index = index_new + 1; + ++n; + } + VERIFY( stream.eof() ); + VERIFY( n == nchunks ); +} + +// istream& getline(istream&, string&, char) +void test01() +{ + const char filename[] = "inserters_extractors-2.txt"; + + const wchar_t delim = L'|'; + const unsigned nchunks = 10; + const wstring data = prepare(777, nchunks, delim); + + wofstream ofstrm; + ofstrm.open(filename); + ofstrm.write(data.data(), data.size()); + ofstrm.close(); + + wifstream ifstrm; + ifstrm.open(filename); + check(ifstrm, data, nchunks, delim); + ifstrm.close(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/11.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/11.cc new file mode 100644 index 000000000..2f174cad4 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/11.cc @@ -0,0 +1,83 @@ +// Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation +// +// 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 +// <http://www.gnu.org/licenses/>. + +// 21.3.7.9 inserters and extractors + +#include <istream> +#include <string> +#include <fstream> +#include <cstdlib> +#include <testsuite_hooks.h> + +using namespace std; + +wstring prepare(wstring::size_type len, unsigned nchunks) +{ + wstring ret; + for (unsigned i = 0; i < nchunks; ++i) + { + for (wstring::size_type j = 0; j < len; ++j) + ret.push_back(L'a' + rand() % 26); + len *= 2; + ret.push_back(L' '); + } + return ret; +} + +void check(wistream& stream, const wstring& str, unsigned nchunks) +{ + bool test __attribute__((unused)) = true; + + wstring chunk; + wstring::size_type index = 0, index_new = 0; + unsigned n = 0; + + while (stream >> chunk) + { + index_new = str.find(L' ', index); + VERIFY( !str.compare(index, index_new - index, chunk) ); + index = index_new + 1; + ++n; + } + VERIFY( stream.eof() ); + VERIFY( n == nchunks ); +} + +// istream& operator>>(istream&, string&) +void test01() +{ + const char filename[] = "inserters_extractors-3.txt"; + + const unsigned nchunks = 10; + const wstring data = prepare(666, nchunks); + + wofstream ofstrm; + ofstrm.open(filename); + ofstrm.write(data.data(), data.size()); + ofstrm.close(); + + wifstream ifstrm; + ifstrm.open(filename); + check(ifstrm, data, nchunks); + ifstrm.close(); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/28277.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/28277.cc new file mode 100644 index 000000000..51c26fd80 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/28277.cc @@ -0,0 +1,54 @@ +// 2006-10-12 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation +// +// 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 +// <http://www.gnu.org/licenses/>. + +// { dg-options "-DWIDTH=500000" { target simulator } } + +// 21.3.7.9 inserters and extractors + +#include <ostream> +#include <sstream> +#include <testsuite_hooks.h> + +#ifndef WIDTH +#define WIDTH 50000000 +#endif + +// libstdc++/28277 +void test01() +{ + using namespace std; + bool test __attribute__((unused)) = true; + + wostringstream oss_01; + const wstring str_01(50, L'a'); + + oss_01.width(WIDTH); + const streamsize width = oss_01.width(); + + oss_01 << str_01; + + VERIFY( oss_01.good() ); + VERIFY( oss_01.str().size() == wstring::size_type(width) ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/4.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/4.cc new file mode 100644 index 000000000..78bdf5132 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/4.cc @@ -0,0 +1,65 @@ +// 1999-07-01 bkoz + +// Copyright (C) 1999, 2000, 2001, 2002, 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 +// <http://www.gnu.org/licenses/>. + +// 21.3.7.9 inserters and extractors + +// NB: This file is predicated on sstreams, istreams, and ostreams +// working, not to mention other major details like char_traits, and +// all of the string class. + +#include <string> +#include <sstream> +#include <testsuite_hooks.h> + +// testing basic_stringbuf::xsputn via stress testing with large strings +// based on a bug report libstdc++ 9 +void test04(std::size_t size) +{ + bool test __attribute__((unused)) = true; + std::wstring str(size, L's'); + std::size_t expected_size = 2 * (size + 1); + std::wostringstream oss(str); + + // sanity checks + VERIFY( str.size() == size ); + VERIFY( oss.good() ); + + // stress test + oss << str << std::endl; + if (!oss.good()) + test = false; + + oss << str << std::endl; + if (!oss.good()) + test = false; + + VERIFY( str.size() == size ); + VERIFY( oss.good() ); + std::wstring str_tmp = oss.str(); + VERIFY( str_tmp.size() == expected_size ); +} + +int main() +{ + test04(1); // expected_size == 4 + test04(1000); // expected_size == 2002 + test04(10000); // expected_size == 20002 + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/5.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/5.cc new file mode 100644 index 000000000..d9657a4c7 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/5.cc @@ -0,0 +1,86 @@ +// 1999-07-01 bkoz + +// Copyright (C) 1999, 2000, 2001, 2002, 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 +// <http://www.gnu.org/licenses/>. + +// 21.3.7.9 inserters and extractors + +// NB: This file is predicated on sstreams, istreams, and ostreams +// working, not to mention other major details like char_traits, and +// all of the string class. + +#include <string> +#include <fstream> +#include <iostream> +#include <testsuite_hooks.h> + +// testing basic_filebuf::xsputn via stress testing with large strings +// based on a bug report libstdc++ 9 +// mode == out +void test05(std::size_t size) +{ + bool test __attribute__((unused)) = true; + const char filename[] = "inserters_extractors-1.txt"; + const wchar_t fillc = L'f'; + std::wofstream ofs(filename); + std::wstring str(size, fillc); + + // sanity checks + VERIFY( str.size() == size ); + VERIFY( ofs.good() ); + + // stress test + ofs << str << std::endl; + if (!ofs.good()) + test = false; + + ofs << str << std::endl; + if (!ofs.good()) + test = false; + + VERIFY( str.size() == size ); + VERIFY( ofs.good() ); + + ofs.close(); + + // sanity check on the written file + std::wifstream ifs(filename); + std::size_t count = 0; + wchar_t c; + while (count <= (2 * size) + 4) + { + ifs >> c; + if (ifs.good() && c == fillc) + { + ++count; + c = '0'; + } + else + break; + } + + VERIFY( count == 2 * size ); +} + +int main() +{ + test05(1); + test05(1000); + test05(10000); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/6.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/6.cc new file mode 100644 index 000000000..e49f61fb0 --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/6.cc @@ -0,0 +1,61 @@ +// 1999-07-01 bkoz + +// Copyright (C) 1999, 2000, 2001, 2002, 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 +// <http://www.gnu.org/licenses/>. + +// 21.3.7.9 inserters and extractors + +// NB: This file is predicated on sstreams, istreams, and ostreams +// working, not to mention other major details like char_traits, and +// all of the string class. + +#include <string> +#include <sstream> +#include <testsuite_hooks.h> + +// istringstream/stringbuf extractor properly size buffer based on +// actual, not allocated contents (string.size() vs. string.capacity()). +// http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00049.html +void test06(void) +{ + bool test __attribute__((unused)) = true; + + typedef std::wstring::size_type size_type; + std::wstring str01(L"@silent"); + size_type i01 = str01.size(); + size_type i02 = str01.capacity(); + str01.erase(0, 1); + size_type i03 = str01.size(); + size_type i04 = str01.capacity(); + VERIFY( i01 - 1 == i03 ); + VERIFY( i02 >= i04 ); + + std::wistringstream is(str01); + std::wstring str02; + is >> str02 >> std::ws; + size_type i05 = str02.size(); + size_type i06 = str02.capacity(); + VERIFY( i05 == i03 ); + VERIFY( i06 <= i04 ); +} + +int main() +{ + test06(); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/7.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/7.cc new file mode 100644 index 000000000..4032e389d --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/7.cc @@ -0,0 +1,53 @@ +// 1999-07-01 bkoz + +// Copyright (C) 1999, 2000, 2001, 2002, 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 +// <http://www.gnu.org/licenses/>. + +// 21.3.7.9 inserters and extractors + +// NB: This file is predicated on sstreams, istreams, and ostreams +// working, not to mention other major details like char_traits, and +// all of the string class. + +#include <string> +#include <sstream> +#include <testsuite_hooks.h> + +// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00085.html +// istream::operator>>(string) +// sets failbit +// NB: this is a defect in the standard. +void test07(void) +{ + bool test __attribute__((unused)) = true; + const std::wstring name(L"z6.cc"); + std::wistringstream iss(name); + int i = 0; + std::wstring s; + while (iss >> s) + ++i; + + VERIFY( i < 3 ); + VERIFY( static_cast<bool>(iss.rdstate() & std::ios_base::failbit) ); +} + +int main() +{ + test07(); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/8.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/8.cc new file mode 100644 index 000000000..58dc00eca --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/8.cc @@ -0,0 +1,53 @@ +// 1999-07-01 bkoz + +// Copyright (C) 1999, 2000, 2001, 2002, 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 +// <http://www.gnu.org/licenses/>. + +// 21.3.7.9 inserters and extractors + +// NB: This file is predicated on sstreams, istreams, and ostreams +// working, not to mention other major details like char_traits, and +// all of the string class. + +#include <string> +#include <sstream> +#include <iomanip> +#include <testsuite_hooks.h> + +// libstdc++/1019 +void test08() +{ + using namespace std; + + bool test __attribute__((unused)) = true; + wistringstream istrm(L"enero:2001"); + int year; + wchar_t sep; + wstring month; + + istrm >> setw(5) >> month >> sep >> year; + VERIFY( month.size() == 5 ); + VERIFY( sep == ':' ); + VERIFY( year == 2001 ); +} + +int main() +{ + test08(); + return 0; +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/9.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/9.cc new file mode 100644 index 000000000..d7fa9467d --- /dev/null +++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/9.cc @@ -0,0 +1,56 @@ +// 1999-07-01 bkoz + +// Copyright (C) 1999, 2000, 2001, 2002, 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 +// <http://www.gnu.org/licenses/>. + +// 21.3.7.9 inserters and extractors + +// NB: This file is predicated on sstreams, istreams, and ostreams +// working, not to mention other major details like char_traits, and +// all of the string class. + +#include <string> +#include <sstream> +#include <iomanip> +#include <testsuite_hooks.h> + +// libstdc++/2830 +void test09() +{ + bool test __attribute__((unused)) = true; + std::wstring blanks(3, L'\0'); + std::wstring foo = L"peace"; + foo += blanks; + foo += L"& love"; + + std::wostringstream oss1; + oss1 << foo; + VERIFY( oss1.str() == foo ); + + std::wostringstream oss2; + oss2.width(20); + oss2 << foo; + VERIFY( oss2.str() != foo ); + VERIFY( oss2.str().size() == 20 ); +} + +int main() +{ + test09(); + return 0; +} |