This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] improve string find algorithm


On 06/01/17 20:32 +0000, Jonathan Wakely wrote:
On 06/01/17 13:35 +0000, Jonathan Wakely wrote:
I'm surprised we don't have any tests for this case, but apparently we
don't, as your patch passes all our tests.

My bad, we do have tests that FAIL with this patch, but only after a
'make clean' (otherwise the explicit instantiation definitions in the
library don't get rebuilt after applying the patch, so the tests use
the old code).

FAIL: 21_strings/basic_string/operations/find/char/1.cc execution test
FAIL: 21_strings/basic_string/operations/find/wchar_t/1.cc execution test

These fail on assert(s.find(s, 1) == std::string::npos) which gives
the wrong answer as explained in my previous mail.

The infinite loop caused by this patch isn't caught by any existing
tests, so I'll add a check for that.

Committed to trunk.

commit b81b226d9eb336f205e5ac91fb8ab4bbbfaf2cb8
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Fri Jan 6 21:20:57 2017 +0000

    Add more tests for std::basic_string::find
    
    	* testsuite/21_strings/basic_string/operations/find/char/6.cc: New.
    	* testsuite/21_strings/basic_string/operations/find/wchar_t/6.cc: New.

diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/6.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/6.cc
new file mode 100644
index 0000000..6925fbb
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/find/char/6.cc
@@ -0,0 +1,41 @@
+// 2017-01-06  Jonathan Wakely  <jwakely@redhat.com>
+
+// Copyright (C) 2017 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/>.
+
+// C++11 21.4.7.2 [string::find] basic_string find
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// https://gcc.gnu.org/ml/libstdc++/2017-01/msg00021.html
+void test01()
+{
+  typedef std::string string_type;
+  string_type::size_type npos = string_type::npos;
+
+  string_type use = "aaa";
+  string_type::size_type pos1 = use.find("ab");
+
+  VERIFY( pos1 == npos );
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/6.cc b/libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/6.cc
new file mode 100644
index 0000000..eb3463d
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/operations/find/wchar_t/6.cc
@@ -0,0 +1,41 @@
+// 2017-01-06  Jonathan Wakely  <jwakely@redhat.com>
+
+// Copyright (C) 2017 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/>.
+
+// C++11 21.4.7.2 [string::find] basic_string find
+
+#include <string>
+#include <testsuite_hooks.h>
+
+// https://gcc.gnu.org/ml/libstdc++/2017-01/msg00021.html
+void test01()
+{
+  typedef std::wstring string_type;
+  string_type::size_type npos = string_type::npos;
+
+  string_type use = L"aaa";
+  string_type::size_type pos1 = use.find(L"ab");
+
+  VERIFY( pos1 == npos );
+}
+
+int main()
+{
+  test01();
+  return 0;
+}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]