]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Add __gnu_debug::basic_string<>::compare overloads
authorFrançois Dumont <fdumont@gcc.gnu.org>
Wed, 10 Aug 2022 17:35:41 +0000 (19:35 +0200)
committerFrançois Dumont <fdumont@gcc.gnu.org>
Wed, 12 Oct 2022 19:50:21 +0000 (21:50 +0200)
Rather than adding those implementations we are adding a:
using _Base::compare;

so that any compare method not implemented at __gnu_debug::basic_string
level are injected from the base class.

Also review how __gnu_debug::basic_string is tested. Now require to define
_GLIBCXX_TEST_DEBUG_STRING when running 'make check-debug'.

libstdc++-v3/ChangeLog

* include/debug/string: Add using _Base::compare.
(__gnu_debug::basic_string<>::compare(const basic_string<>&)): Remove.
(__gnu_debug::basic_string<>::compare(size_type, size_type, const basic_string<>&)):
Remove.
(__gnu_debug::basic_string<>::compare(size_type, size_type, const basic_string<>&,
size_type, size_type)): Remove.
* testsuite/util/testsuite_string.h [_GLIBCXX_TEST_DEBUG_STRING]: Include <debug/string>.
* testsuite/21_strings/basic_string/operations/compare/char/1.cc: Include testsuite_string.h
and use __gnu_test::string.
* testsuite/21_strings/basic_string/operations/compare/char/13650.cc: Likewise.
* testsuite/21_strings/basic_string/operations/compare/char/2.cc: Likewise.
* testsuite/21_strings/basic_string/operations/rfind/char/1.cc: Likewise.
* testsuite/21_strings/basic_string/operations/rfind/char/2.cc: Likewise.
* testsuite/21_strings/basic_string/operations/rfind/char/3.cc: Likewise.
* testsuite/21_strings/basic_string/operations/compare/wchar_t/1.cc:
Include testsuite_string.h
and use __gnu_test::wstring.
* testsuite/21_strings/basic_string/operations/compare/wchar_t/13650.cc: Likewise.
* testsuite/21_strings/basic_string/operations/compare/wchar_t/2.cc: Likewise.

libstdc++-v3/include/debug/string
libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/1.cc
libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/13650.cc
libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/2.cc
libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/1.cc
libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/13650.cc
libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/2.cc
libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/1.cc
libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/2.cc
libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/3.cc
libstdc++-v3/testsuite/util/testsuite_string.h

index c16751c891b9eec9b9bed15a25c5149d1d2a8264..574a78e3daca3bd1a8a3cfdfc277a1875c7ff6cc 100644 (file)
@@ -1023,22 +1023,11 @@ namespace __gnu_debug
       substr(size_type __pos = 0, size_type __n = _Base::npos) const
       { return basic_string(_Base::substr(__pos, __n)); }
 
-      int
-      compare(const basic_string& __str) const
-      { return _Base::compare(__str); }
-
-      int
-      compare(size_type __pos1, size_type __n1,
-             const basic_string& __str) const
-      { return _Base::compare(__pos1, __n1, __str); }
-
-      int
-      compare(size_type __pos1, size_type __n1, const basic_string& __str,
-             size_type __pos2, size_type __n2) const
-      { return _Base::compare(__pos1, __n1, __str, __pos2, __n2); }
+      using _Base::compare;
 
+      _GLIBCXX20_CONSTEXPR
       int
-      compare(const _CharT* __s) const
+      compare(const _CharT* __s) const _GLIBCXX_NOEXCEPT
       {
        __glibcxx_check_string(__s);
        return _Base::compare(__s);
@@ -1046,6 +1035,7 @@ namespace __gnu_debug
 
       //  _GLIBCXX_RESOLVE_LIB_DEFECTS
       //  5. string::compare specification questionable
+      _GLIBCXX20_CONSTEXPR
       int
       compare(size_type __pos1, size_type __n1, const _CharT* __s) const
       {
@@ -1055,6 +1045,7 @@ namespace __gnu_debug
 
       //  _GLIBCXX_RESOLVE_LIB_DEFECTS
       //  5. string::compare specification questionable
+      _GLIBCXX20_CONSTEXPR
       int
       compare(size_type __pos1, size_type __n1,const _CharT* __s,
              size_type __n2) const
index 0bef0d2dd3d7ba2c2fc3b39c5d0754dde0150972..c04b83c48961df763835937db6a366ae045f5383 100644 (file)
@@ -29,7 +29,7 @@
 // NB compare should be thought of as a lexographical compare, ie how
 // things would be sorted in a dictionary.
 
-#include <string>
+#include <testsuite_string.h>
 #include <cstring>
 #include <testsuite_hooks.h>
 
@@ -67,7 +67,7 @@ test_value(int result, want_value expected)
 int 
 test01()
 {
-  using namespace std;
+  using namespace __gnu_test;
 
   string       str_0("costa rica");
   string       str_1("costa marbella");
index 96fd2f14b33fcc730a76b5f43055bf5b9cbdcd7f..ce956235f83fbed78561aa6b24c98706f3b3f6ef 100644 (file)
 
 // 21.3.6.8 basic_string::compare [lib.string::compare]
 
-#include <string>
+#include <testsuite_string.h>
 #include <testsuite_hooks.h>
 
 // libstdc++/13650
 void test01()
 {
-  using namespace std;
+  using namespace __gnu_test;
 
   const char lit_01[] = { 'w', 'e', '\0', 'r', 'd' };
   const char lit_02[] = { 'w', 'e', 'i', '\0', 'd' };
index 17e87526c262350b86108cac1167363afd258cb7..fca154355ffe1dd9bf005833ac0b05fa471511ac 100644 (file)
 
 // [string::compare]
 
-#include <string>
+#include <testsuite_string.h>
 #include <testsuite_hooks.h>
 
 void
 test03()
 {
   std::string_view str1("foobar");
-  std::string str2("foobar");
+  __gnu_test::string str2("foobar");
 
   auto x = str2.compare(str1);
   VERIFY (x == 0);
@@ -52,7 +52,7 @@ test03()
 void
 test04()
 {
-  const std::string str("a");
+  const __gnu_test::string str("a");
   char c = 'a';
   int res = str.compare(0, 1, &c, 1);
   VERIFY ( !res );
index 97a873a55cff5d86b6b0081bdedde018d47f7183..aa5c1680045b23413ee42c545ff4087a4bf5b872 100644 (file)
@@ -29,7 +29,7 @@
 // NB compare should be thought of as a lexographical compare, ie how
 // things would be sorted in a dictionary.
 
-#include <string>
+#include <testsuite_string.h>
 #include <testsuite_hooks.h>
 
 enum want_value {lt=0, z=1, gt=2};
@@ -67,7 +67,7 @@ test_value(int result, want_value expected)
 int 
 test01()
 {
-  using namespace std;
+  using namespace __gnu_test;
 
   wstring      str_0(L"costa rica");
   wstring      str_1(L"costa marbella");
index 1825c6b3b3078efbc8badbadbab5c11d1ab5b6e5..f3dd4ebaf43b0db5b79104dec06dfb47f3cb6f74 100644 (file)
 
 // 21.3.6.8 basic_string::compare [lib.string::compare]
 
-#include <string>
+#include <testsuite_string.h>
 #include <testsuite_hooks.h>
 
 // libstdc++/13650
 void test01()
 {
-  using namespace std;
+  using namespace __gnu_test;
 
   const wchar_t lit_01[] = { L'w', L'e', L'\0', L'r', L'd' };
   const wchar_t lit_02[] = { L'w', L'e', L'i', L'\0', L'd' };
index dd703c198685004a78319031212564b6f0d54fb9..c6d219a42ecf07802c53bdd8cebf05960953bcfe 100644 (file)
 
 // [string::compare]
 
-#include <string>
+#include <testsuite_string.h>
 #include <testsuite_hooks.h>
 
 void
 test03()
 {
   std::wstring_view str1(L"foobar");
-  std::wstring str2(L"foobar");
+  __gnu_test::wstring str2(L"foobar");
 
   auto x = str2.compare(str1);
   VERIFY (x == 0);
@@ -52,7 +52,7 @@ test03()
 void
 test04()
 {
-  const std::wstring str(L"a");
+  const __gnu_test::wstring str(L"a");
 
   wchar_t c = L'a';
   int res = str.compare(0, 1, &c, 1);
index 73843b03a9ac9597849d86e067a87dbd2d57077f..76fcb0791179ea5b7f89898930d9bc2b9a6121e2 100644 (file)
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <string>
+#include <testsuite_string.h>
 #include <testsuite_hooks.h>
 
 // 21.3.6.2 basic_string rfind
 void test01(void)
 {
-  typedef std::string::size_type csize_type;
-  typedef std::string::const_reference cref;
-  typedef std::string::reference ref;
-  csize_type npos = std::string::npos;
+  typedef __gnu_test::string::size_type csize_type;
+  typedef __gnu_test::string::const_reference cref;
+  typedef __gnu_test::string::reference ref;
+  csize_type npos = __gnu_test::string::npos;
   csize_type csz01, csz02;
 
   const char str_lit01[] = "mave";
-  const std::string str01("mavericks, santa cruz");
-  std::string str02(str_lit01);
-  std::string str03("s, s");
-  std::string str04;
+  const __gnu_test::string str01("mavericks, santa cruz");
+  __gnu_test::string str02(str_lit01);
+  __gnu_test::string str03("s, s");
+  __gnu_test::string str04;
 
   // size_type rfind(const string&, size_type pos = 0) const;
   csz01 = str01.rfind(str01);
index 587965505d5e9568ed26d7e617b7c77d93035818..9fecfcf80f14642bf0b3f4d92ea44e0b3e2b27ed 100644 (file)
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <string>
+#include <testsuite_string.h>
 #include <testsuite_hooks.h>
 
 // 21.3.6.4 basic_string::find_last_of
 void test02()
 {
-  std::string z("ab");
-  std::string::size_type pos;
+  __gnu_test::string z("ab");
+  __gnu_test::string::size_type pos;
   pos = z.find_last_of("ab");
   VERIFY( pos == 1 );
   pos = z.find_last_of("Xa");
@@ -32,13 +32,13 @@ void test02()
   pos = z.find_last_of("Xb");
   VERIFY( pos == 1 );
   pos = z.find_last_of("XYZ");
-  VERIFY( pos == std::string::npos );
+  VERIFY( pos == __gnu_test::string::npos );
   pos = z.find_last_of('a');
   VERIFY( pos == 0 );
   pos = z.find_last_of('b');
   VERIFY( pos == 1 );
   pos = z.find_last_of('X');
-  VERIFY( pos == std::string::npos );
+  VERIFY( pos == __gnu_test::string::npos );
 }
 
 int main()
index 1ff9c94ba5b6351c8bf7dccc547d30000b173b4d..69471e67bf1f4dedd626c102a8ec2921047c4d4b 100644 (file)
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <string>
+#include <testsuite_string.h>
 #include <testsuite_hooks.h>
 
 // 21.3.6.6 basic_string::find_last_not_of
 void test03()
 {
-  typedef std::string::size_type csize_type;
-  std::string::size_type pos;
-  csize_type npos = std::string::npos;
+  typedef __gnu_test::string::size_type csize_type;
+  __gnu_test::string::size_type pos;
+  csize_type npos = __gnu_test::string::npos;
 
-  std::string x;
+  __gnu_test::string x;
   pos = x.find_last_not_of('X');
   VERIFY( pos == npos );
   pos = x.find_last_not_of("XYZ");
   VERIFY( pos == npos );
 
-  std::string y("a");
+  __gnu_test::string y("a");
   pos = y.find_last_not_of('X');
   VERIFY( pos == 0 );
   pos = y.find_last_not_of('a');
@@ -43,7 +43,7 @@ void test03()
   pos = y.find_last_not_of("a");
   VERIFY( pos == npos );
 
-  std::string z("ab");
+  __gnu_test::string z("ab");
   pos = z.find_last_not_of('X');
   VERIFY( pos == 1 );
   pos = z.find_last_not_of("XYZ");
index 7121ff8ec6d5b9d268f5a692a9abc9fe6e05ec1c..7e61d984bdb00e760b89994ea54ab71b7bd88449 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef _GLIBCXX_TESTSUITE_STRING_H
 #define _GLIBCXX_TESTSUITE_STRING_H
 
-#ifdef _GLIBCXX_DEBUG
+#if defined(_GLIBCXX_DEBUG) && defined(_GLIBCXX_TEST_DEBUG_STRING)
 # include <debug/string>
 namespace __gnu_test
 {