public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-3263] libstdc++: Add __gnu_debug::basic_string<>::compare overloads
@ 2022-10-12 19:51 Franथईois Dumont
  0 siblings, 0 replies; only message in thread
From: Franथईois Dumont @ 2022-10-12 19:51 UTC (permalink / raw)
  To: gcc-cvs, libstdc++-cvs

https://gcc.gnu.org/g:f77281b25ca6bb34ba271fa826e1e79a15df95fe

commit r13-3263-gf77281b25ca6bb34ba271fa826e1e79a15df95fe
Author: François Dumont <fdumont@gcc.gnu.org>
Date:   Wed Aug 10 19:35:41 2022 +0200

    libstdc++: Add __gnu_debug::basic_string<>::compare overloads
    
    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.

Diff:
---
 libstdc++-v3/include/debug/string                     | 19 +++++--------------
 .../basic_string/operations/compare/char/1.cc         |  4 ++--
 .../basic_string/operations/compare/char/13650.cc     |  4 ++--
 .../basic_string/operations/compare/char/2.cc         |  6 +++---
 .../basic_string/operations/compare/wchar_t/1.cc      |  4 ++--
 .../basic_string/operations/compare/wchar_t/13650.cc  |  4 ++--
 .../basic_string/operations/compare/wchar_t/2.cc      |  6 +++---
 .../basic_string/operations/rfind/char/1.cc           | 18 +++++++++---------
 .../basic_string/operations/rfind/char/2.cc           | 10 +++++-----
 .../basic_string/operations/rfind/char/3.cc           | 14 +++++++-------
 libstdc++-v3/testsuite/util/testsuite_string.h        |  2 +-
 11 files changed, 41 insertions(+), 50 deletions(-)

diff --git a/libstdc++-v3/include/debug/string b/libstdc++-v3/include/debug/string
index c16751c891b..574a78e3dac 100644
--- a/libstdc++-v3/include/debug/string
+++ b/libstdc++-v3/include/debug/string
@@ -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
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/1.cc
index 0bef0d2dd3d..c04b83c4896 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/1.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/1.cc
@@ -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");
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/13650.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/13650.cc
index 96fd2f14b33..ce956235f83 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/13650.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/13650.cc
@@ -19,13 +19,13 @@
 
 // 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' };
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/2.cc
index 17e87526c26..fca154355ff 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/2.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/2.cc
@@ -19,14 +19,14 @@
 
 // [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 );
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/1.cc
index 97a873a55cf..aa5c1680045 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/1.cc
@@ -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");
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/13650.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/13650.cc
index 1825c6b3b30..f3dd4ebaf43 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/13650.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/13650.cc
@@ -19,13 +19,13 @@
 
 // 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' };
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/2.cc
index dd703c19868..c6d219a42ec 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/wchar_t/2.cc
@@ -19,14 +19,14 @@
 
 // [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);
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/1.cc
index 73843b03a9a..76fcb079117 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/1.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/1.cc
@@ -17,23 +17,23 @@
 // 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);
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/2.cc
index 587965505d5..9fecfcf80f1 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/2.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/2.cc
@@ -17,14 +17,14 @@
 // 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()
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/3.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/3.cc
index 1ff9c94ba5b..69471e67bf1 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/3.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/rfind/char/3.cc
@@ -17,23 +17,23 @@
 // 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");
diff --git a/libstdc++-v3/testsuite/util/testsuite_string.h b/libstdc++-v3/testsuite/util/testsuite_string.h
index 7121ff8ec6d..7e61d984bdb 100644
--- a/libstdc++-v3/testsuite/util/testsuite_string.h
+++ b/libstdc++-v3/testsuite/util/testsuite_string.h
@@ -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
 {

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-10-12 19:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-12 19:51 [gcc r13-3263] libstdc++: Add __gnu_debug::basic_string<>::compare overloads Franथईois Dumont

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).