diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2018-04-09 13:31:05 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@ericsson.com> | 2018-04-09 14:20:47 -0400 |
commit | fdc116781b03f5d30e93f5013159f39c4c0f3471 (patch) | |
tree | 2ee31f9c22a67f5cef8d33cc6b7e47208bed782f /gdb/unittests/basic_string_view/inserters | |
parent | 8345c4a2670711eafd41c8b6a8726cf8b0771d6e (diff) | |
download | gdb-fdc116781b03f5d30e93f5013159f39c4c0f3471.zip gdb-fdc116781b03f5d30e93f5013159f39c4c0f3471.tar.gz gdb-fdc116781b03f5d30e93f5013159f39c4c0f3471.tar.bz2 |
Copy string_view tests from libstdc++
This patch copies the string_view tests from the gcc repository (commit
02a4441f002c).
${gcc}/libstdc++-v3/testsuite/21_strings/basic_string_view ->
${binutils-gdb}/gdb/unittests/basic_string_view
The local modifications are done in the following patch, so that it's
easier to review them.
gdb/ChangeLog:
* unittests/basic_string_view/capacity/1.cc: New file.
* unittests/basic_string_view/capacity/empty_neg.cc: New file.
* unittests/basic_string_view/cons/char/1.cc: New file.
* unittests/basic_string_view/cons/char/2.cc: New file.
* unittests/basic_string_view/cons/char/3.cc: New file.
* unittests/basic_string_view/cons/wchar_t/1.cc: New file.
* unittests/basic_string_view/cons/wchar_t/2.cc: New file.
* unittests/basic_string_view/cons/wchar_t/3.cc: New file.
* unittests/basic_string_view/element_access/char/1.cc: New file.
* unittests/basic_string_view/element_access/char/2.cc: New file.
* unittests/basic_string_view/element_access/char/empty.cc: New file.
* unittests/basic_string_view/element_access/char/front_back.cc: New file.
* unittests/basic_string_view/element_access/wchar_t/1.cc: New file.
* unittests/basic_string_view/element_access/wchar_t/2.cc: New file.
* unittests/basic_string_view/element_access/wchar_t/empty.cc: New file.
* unittests/basic_string_view/element_access/wchar_t/front_back.cc: New file.
* unittests/basic_string_view/include.cc: New file.
* unittests/basic_string_view/inserters/char/1.cc: New file.
* unittests/basic_string_view/inserters/char/2.cc: New file.
* unittests/basic_string_view/inserters/char/3.cc: New file.
* unittests/basic_string_view/inserters/pod/10081-out.cc: New file.
* unittests/basic_string_view/inserters/wchar_t/1.cc: New file.
* unittests/basic_string_view/inserters/wchar_t/2.cc: New file.
* unittests/basic_string_view/inserters/wchar_t/3.cc: New file.
* unittests/basic_string_view/literals/types.cc: New file.
* unittests/basic_string_view/literals/values.cc: New file.
* unittests/basic_string_view/modifiers/remove_prefix/char/1.cc: New file.
* unittests/basic_string_view/modifiers/remove_prefix/wchar_t/1.cc: New file.
* unittests/basic_string_view/modifiers/remove_suffix/char/1.cc: New file.
* unittests/basic_string_view/modifiers/remove_suffix/wchar_t/1.cc: New file.
* unittests/basic_string_view/modifiers/swap/char/1.cc: New file.
* unittests/basic_string_view/modifiers/swap/wchar_t/1.cc: New file.
* unittests/basic_string_view/operations/compare/char/1.cc: New file.
* unittests/basic_string_view/operations/compare/char/13650.cc: New file.
* unittests/basic_string_view/operations/compare/char/2.cc: New file.
* unittests/basic_string_view/operations/compare/char/70483.cc: New file.
* unittests/basic_string_view/operations/compare/wchar_t/1.cc: New file.
* unittests/basic_string_view/operations/compare/wchar_t/13650.cc: New file.
* unittests/basic_string_view/operations/compare/wchar_t/2.cc: New file.
* unittests/basic_string_view/operations/copy/char/1.cc: New file.
* unittests/basic_string_view/operations/copy/wchar_t/1.cc: New file.
* unittests/basic_string_view/operations/data/char/1.cc: New file.
* unittests/basic_string_view/operations/data/wchar_t/1.cc: New file.
* unittests/basic_string_view/operations/find/char/1.cc: New file.
* unittests/basic_string_view/operations/find/char/2.cc: New file.
* unittests/basic_string_view/operations/find/char/3.cc: New file.
* unittests/basic_string_view/operations/find/char/4.cc: New file.
* unittests/basic_string_view/operations/find/wchar_t/1.cc: New file.
* unittests/basic_string_view/operations/find/wchar_t/2.cc: New file.
* unittests/basic_string_view/operations/find/wchar_t/3.cc: New file.
* unittests/basic_string_view/operations/find/wchar_t/4.cc: New file.
* unittests/basic_string_view/operations/rfind/char/1.cc: New file.
* unittests/basic_string_view/operations/rfind/char/2.cc: New file.
* unittests/basic_string_view/operations/rfind/char/3.cc: New file.
* unittests/basic_string_view/operations/rfind/wchar_t/1.cc: New file.
* unittests/basic_string_view/operations/rfind/wchar_t/2.cc: New file.
* unittests/basic_string_view/operations/rfind/wchar_t/3.cc: New file.
* unittests/basic_string_view/operations/string_conversion/1.cc: New file.
* unittests/basic_string_view/operations/substr/char/1.cc: New file.
* unittests/basic_string_view/operations/substr/wchar_t/1.cc: New file.
* unittests/basic_string_view/operators/char/2.cc: New file.
* unittests/basic_string_view/operators/wchar_t/2.cc: New file.
* unittests/basic_string_view/range_access/char/1.cc: New file.
* unittests/basic_string_view/range_access/wchar_t/1.cc: New file.
* unittests/basic_string_view/requirements/explicit_instantiation/1.cc: New file.
* unittests/basic_string_view/requirements/explicit_instantiation/char/1.cc: New file.
* unittests/basic_string_view/requirements/explicit_instantiation/char16_t/1.cc: New file.
* unittests/basic_string_view/requirements/explicit_instantiation/char32_t/1.cc: New file.
* unittests/basic_string_view/requirements/explicit_instantiation/wchar_t/1.cc: New file.
* unittests/basic_string_view/requirements/typedefs.cc: New file.
* unittests/basic_string_view/typedefs.cc: New file.
* unittests/basic_string_view/types/1.cc: New file.
Diffstat (limited to 'gdb/unittests/basic_string_view/inserters')
7 files changed, 501 insertions, 0 deletions
diff --git a/gdb/unittests/basic_string_view/inserters/char/1.cc b/gdb/unittests/basic_string_view/inserters/char/1.cc new file mode 100644 index 0000000..26bd0fd --- /dev/null +++ b/gdb/unittests/basic_string_view/inserters/char/1.cc @@ -0,0 +1,65 @@ +// { dg-options "-std=gnu++17" } + +// Copyright (C) 2013-2018 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/>. + +// inserters + +// 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_view class. + +#include <string_view> +#include <stdexcept> +#include <sstream> +#include <fstream> +#include <iostream> +#include <testsuite_hooks.h> + +void +test01() +{ + typedef std::string_view::size_type csize_type; + typedef std::string_view::const_reference cref; + typedef std::string_view::reference ref; + + const std::string_view str01("sailing grand traverse bay\n" + "\t\t\t from Elk Rapids to the point reminds me of miles"); + + // ostream& operator<<(ostream&, const basic_string_view&) + std::ostringstream ostrs01; + try + { + ostrs01 << str01; + VERIFY( ostrs01.str() == str01 ); + } + catch(std::exception& fail) + { + VERIFY( false ); + } + + std::string_view hello_world; + std::cout << hello_world; +} + +int +main() +{ + test01(); + + return 0; +} diff --git a/gdb/unittests/basic_string_view/inserters/char/2.cc b/gdb/unittests/basic_string_view/inserters/char/2.cc new file mode 100644 index 0000000..6562d58 --- /dev/null +++ b/gdb/unittests/basic_string_view/inserters/char/2.cc @@ -0,0 +1,93 @@ + +// Copyright (C) 2013-2018 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/>. + +// inserters + +// NB: This file is predicated on sstreams, ostreams +// working, not to mention other major details like char_traits, and +// all of the string_view class. + +// { dg-options "-std=gnu++17" } +// { dg-require-fileio "" } + +#include <string_view> +#include <string> +#include <fstream> +#include <iostream> +#include <testsuite_hooks.h> + +// testing basic_filebuf::xsputn via stress testing with large string_views +// based on a bug report libstdc++ 9 +// mode == out +void +test05(std::size_t size) +{ + bool test = true; + + const char filename[] = "inserters_extractors-2.txt"; + const char fillc = 'f'; + std::ofstream ofs(filename); + std::string str(size, fillc); + std::string_view strv{str}; + + // 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::ifstream ifs(filename); + std::size_t count = 0; + char 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/gdb/unittests/basic_string_view/inserters/char/3.cc b/gdb/unittests/basic_string_view/inserters/char/3.cc new file mode 100644 index 0000000..7905661 --- /dev/null +++ b/gdb/unittests/basic_string_view/inserters/char/3.cc @@ -0,0 +1,54 @@ +// { dg-options "-std=gnu++17" } + +// Copyright (C) 2013-2018 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/>. + +// inserters + +// NB: This file is predicated on sstreams, and ostreams +// working, not to mention other major details like char_traits, and +// all of the string_view class. + +#include <string_view> +#include <sstream> +#include <iomanip> +#include <testsuite_hooks.h> + +// libstdc++/2830 +void +test09() +{ + std::string_view foo{"peace\0\0\0& love"}; + + std::ostringstream oss1; + oss1 << foo; + VERIFY( oss1.str() == foo ); + + std::ostringstream oss2; + oss2.width(20); + oss2 << foo; + VERIFY( oss2.str() != foo ); + VERIFY( oss2.str().size() == 20 ); +} + +int +main() +{ + test09(); + + return 0; +} diff --git a/gdb/unittests/basic_string_view/inserters/pod/10081-out.cc b/gdb/unittests/basic_string_view/inserters/pod/10081-out.cc new file mode 100644 index 0000000..15538a4 --- /dev/null +++ b/gdb/unittests/basic_string_view/inserters/pod/10081-out.cc @@ -0,0 +1,75 @@ +// { dg-options "-std=gnu++17" } + +// Copyright (C) 2013-2018 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/>. + +// class basic_istream::sentry + +#include <string_view> +#include <ostream> +#include <sstream> +#include <locale> +#include <typeinfo> +#include <testsuite_hooks.h> +#include <testsuite_character.h> + +void +test01() +{ + using namespace std; + + using __gnu_test::pod_ushort; + typedef basic_string_view<pod_ushort> string_type; + typedef basic_stringbuf<pod_ushort> stringbuf_type; + typedef basic_ostream<pod_ushort> ostream_type; + + string_type str; + stringbuf_type strbuf01; + ostream_type stream(&strbuf01); + + try + { + stream << str; + } + catch (std::bad_cast& obj) + { + // Ok, throws bad_cast because locale has no ctype facet. + } + catch (...) + { + VERIFY( false ); + } + + const std::locale loc(std::locale::classic(), new std::ctype<pod_ushort>); + stream.imbue(loc); + try + { + stream << str; + } + catch (...) + { + VERIFY( false ); + } +} + +int +main() +{ + test01(); + + return 0; +} diff --git a/gdb/unittests/basic_string_view/inserters/wchar_t/1.cc b/gdb/unittests/basic_string_view/inserters/wchar_t/1.cc new file mode 100644 index 0000000..c5cbdba --- /dev/null +++ b/gdb/unittests/basic_string_view/inserters/wchar_t/1.cc @@ -0,0 +1,70 @@ +// { dg-options "-std=gnu++17" } + +// Copyright (C) 2013-2018 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/>. + +// inserters + +// NB: This file is predicated on sstreams, and ostreams +// working, not to mention other major details like char_traits, and +// all of the string_view class. + +#include <string_view> +#include <stdexcept> +#include <sstream> +#include <fstream> +#include <iostream> +#include <testsuite_hooks.h> + +void +test01() +{ + typedef std::wstring_view::size_type csize_type; + typedef std::wstring_view::const_reference cref; + typedef std::wstring_view::reference ref; + + const std::wstring_view str01(L"sailing grand traverse bay\n" + L"\t\t\t from Elk Rapids to the point reminds me of miles"); + const std::wstring_view str02(L"sailing"); + const std::wstring_view str03(L"grand"); + const std::wstring_view str04(L"traverse"); + const std::wstring_view str05; + std::wstring_view str10; + + // ostream& operator<<(ostream&, const basic_string_view&) + std::wostringstream ostrs01; + try + { + ostrs01 << str01; + VERIFY( ostrs01.str() == str01 ); + } + catch(std::exception& fail) + { + VERIFY( false ); + } + + std::wstring_view hello_world; + std::wcout << hello_world; +} + +int +main() +{ + test01(); + + return 0; +} diff --git a/gdb/unittests/basic_string_view/inserters/wchar_t/2.cc b/gdb/unittests/basic_string_view/inserters/wchar_t/2.cc new file mode 100644 index 0000000..ebb2752 --- /dev/null +++ b/gdb/unittests/basic_string_view/inserters/wchar_t/2.cc @@ -0,0 +1,91 @@ +// { dg-options "-std=gnu++17" } + +// Copyright (C) 2013-2018 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/>. + +// inserters + +// 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_view class. + +#include <string_view> +#include <string> +#include <fstream> +#include <iostream> +#include <testsuite_hooks.h> + +// testing basic_filebuf::xsputn via stress testing with large string_views +// based on a bug report libstdc++ 9 +// mode == out +void +test05(std::size_t size) +{ + bool test = true; + + const char filename[] = "inserters_extractors-2.txt"; + const wchar_t fillc = L'f'; + std::wofstream ofs(filename); + std::wstring str(size, fillc); + std::wstring_view strv(str); + + // 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/gdb/unittests/basic_string_view/inserters/wchar_t/3.cc b/gdb/unittests/basic_string_view/inserters/wchar_t/3.cc new file mode 100644 index 0000000..569c421 --- /dev/null +++ b/gdb/unittests/basic_string_view/inserters/wchar_t/3.cc @@ -0,0 +1,53 @@ +// { dg-options "-std=gnu++17" } + +// Copyright (C) 2013-2018 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/>. + +// inserters + +// 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_view class. + +#include <string_view> +#include <sstream> +#include <iomanip> +#include <testsuite_hooks.h> + +void +test09() +{ + std::wstring_view foo{L"peace\0\0\0& 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; +} |