public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [v3] 25_algo merge/flatten from libstdcxx_so_7
@ 2007-10-02 16:16 Benjamin Kosnik
  2007-10-03  0:13 ` Benjamin Kosnik
  0 siblings, 1 reply; 4+ messages in thread
From: Benjamin Kosnik @ 2007-10-02 16:16 UTC (permalink / raw)
  To: gcc-patches, libstdc++, chris

[-- Attachment #1: Type: text/plain, Size: 309 bytes --]


I just went through and diffed so_7's testsuite for 25_algo. It looks
like everything is now in mainline (some names and locations have
changed), except for the moveable.cc.

Presumably these will move over when the rest of the library
support for move semantics goes in? Anyway.

tested x86/linux

-benjamin

[-- Attachment #2: p.20071002-1 --]
[-- Type: application/octet-stream, Size: 13230 bytes --]

2007-10-02  Benjamin Kosnik  <bkoz@redhat.com>

	* testsuite/25_algorithms/binary_search/2.cc: Split into...
	* testsuite/25_algorithms/upper_bound/2.cc: ... this.
	* testsuite/25_algorithms/lower_bound/2.cc: ... this.
	* testsuite/25_algorithms/equal_range/2.cc: ... and this.
	* testsuite/25_algorithms/sort/vectorbool.cc: Add from
	libstdcxx_so_7-branch.

Index: testsuite/25_algorithms/binary_search/2.cc
===================================================================
--- testsuite/25_algorithms/binary_search/2.cc	(revision 128957)
+++ testsuite/25_algorithms/binary_search/2.cc	(working copy)
@@ -36,120 +36,6 @@
     { return x > y; }
 };
 
-// Each test performs general-case, bookend, not-found condition,
-// and predicate functional checks.
-
-// 25.3.3.1 lower_bound, with and without comparison predicate
-void
-test01()
-{
-    using std::lower_bound;
-
-    const int first = A[0];
-    const int last = A[N - 1];
-
-    const int* p = lower_bound(A, A + N, 3);
-    VERIFY(p == A + 2);
-
-    const int* q = lower_bound(A, A + N, first);
-    VERIFY(q == A + 0);
-
-    const int* r = lower_bound(A, A + N, last);
-    VERIFY(r == A + N - 1);
-
-    const int* s = lower_bound(A, A + N, 4);
-    VERIFY(s == A + 5);
-
-    const int* t = lower_bound(C, C + N, 3, gt());
-    VERIFY(t == C + 2);
-
-    const int* u = lower_bound(C, C + N, first, gt());
-    VERIFY(u == C + N - 1);
-
-    const int* v = lower_bound(C, C + N, last, gt());
-    VERIFY(v == C + 0);
-
-    const int* w = lower_bound(C, C + N, 4, gt());
-    VERIFY(w == C + 2);
-}
-
-// 25.3.3.2 upper_bound, with and without comparison predicate
-void
-test02()
-{
-    using std::upper_bound;
-
-    const int first = A[0];
-    const int last = A[N - 1];
-
-    const int* p = upper_bound(A, A + N, 3);
-    VERIFY(p == A + 5);
-
-    const int* q = upper_bound(A, A + N, first);
-    VERIFY(q == A + 1);
-
-    const int* r = upper_bound(A, A + N, last);
-    VERIFY(r == A + N);
-
-    const int* s = upper_bound(A, A + N, 4);
-    VERIFY(s == A + 5);
-
-    const int* t = upper_bound(C, C + N, 3, gt());
-    VERIFY(t == C + 5);
-
-    const int* u = upper_bound(C, C + N, first, gt());
-    VERIFY(u == C + N);
-
-    const int* v = upper_bound(C, C + N, last, gt());
-    VERIFY(v == C + 1);
-
-    const int* w = upper_bound(C, C + N, 4, gt());
-    VERIFY(w == C + 2);
-}
-
-// 25.3.3.3 equal_range, with and without comparison predicate
-void
-test03()
-{
-    using std::equal_range;
-    typedef std::pair<const int*, const int*> Ipair;
-    
-    const int first = A[0];
-    const int last = A[N - 1];
-
-    Ipair p = equal_range(A, A + N, 3);
-    VERIFY(p.first == A + 2);
-    VERIFY(p.second == A + 5);
-    
-    Ipair q = equal_range(A, A + N, first);
-    VERIFY(q.first == A + 0);
-    VERIFY(q.second == A + 1);
-    
-    Ipair r = equal_range(A, A + N, last);
-    VERIFY(r.first == A + N - 1);
-    VERIFY(r.second == A + N);
-    
-    Ipair s = equal_range(A, A + N, 4);
-    VERIFY(s.first == A + 5);
-    VERIFY(s.second == A + 5);
-    
-    Ipair t = equal_range(C, C + N, 3, gt());
-    VERIFY(t.first == C + 2);
-    VERIFY(t.second == C + 5);
-    
-    Ipair u = equal_range(C, C + N, first, gt());
-    VERIFY(u.first == C + N - 1);
-    VERIFY(u.second == C + N);
-    
-    Ipair v = equal_range(C, C + N, last, gt());
-    VERIFY(v.first == C + 0);
-    VERIFY(v.second == C + 1);
-    
-    Ipair w = equal_range(C, C + N, 4, gt());
-    VERIFY(w.first == C + 2);
-    VERIFY(w.second == C + 2);
-}
-
 // 25.3.3.4 binary_search, with and without comparison predicate
 void
 test04()
@@ -173,10 +59,6 @@
 int
 main()
 {
-  test01();
-  test02();
-  test03();
-  test04();
-  
+  test04();  
   return 0;
 }
Index: testsuite/25_algorithms/upper_bound/2.cc
===================================================================
--- testsuite/25_algorithms/upper_bound/2.cc	(revision 0)
+++ testsuite/25_algorithms/upper_bound/2.cc	(revision 0)
@@ -0,0 +1,81 @@
+// Copyright (C) 2001 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 2, 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 COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 25.3.3 [lib.alg.binary.search] Binary search algorithms.
+
+#include <algorithm>
+#include <testsuite_hooks.h>
+
+bool test __attribute__((unused)) = true;
+
+const int A[] = {1, 2, 3, 3, 3, 5, 8};
+const int C[] = {8, 5, 3, 3, 3, 2, 1};
+const int N = sizeof(A) / sizeof(int);
+
+// A comparison, equalivalent to std::greater<int> without the
+// dependency on <functional>.
+struct gt
+{
+    bool
+    operator()(const int& x, const int& y) const
+    { return x > y; }
+};
+
+// Each test performs general-case, bookend, not-found condition,
+// and predicate functional checks.
+
+// 25.3.3.2 upper_bound, with and without comparison predicate
+void
+test02()
+{
+    using std::upper_bound;
+
+    const int first = A[0];
+    const int last = A[N - 1];
+
+    const int* p = upper_bound(A, A + N, 3);
+    VERIFY(p == A + 5);
+
+    const int* q = upper_bound(A, A + N, first);
+    VERIFY(q == A + 1);
+
+    const int* r = upper_bound(A, A + N, last);
+    VERIFY(r == A + N);
+
+    const int* s = upper_bound(A, A + N, 4);
+    VERIFY(s == A + 5);
+
+    const int* t = upper_bound(C, C + N, 3, gt());
+    VERIFY(t == C + 5);
+
+    const int* u = upper_bound(C, C + N, first, gt());
+    VERIFY(u == C + N);
+
+    const int* v = upper_bound(C, C + N, last, gt());
+    VERIFY(v == C + 1);
+
+    const int* w = upper_bound(C, C + N, 4, gt());
+    VERIFY(w == C + 2);
+}
+
+int
+main()
+{
+  test02();
+  return 0;
+}
Index: testsuite/25_algorithms/lower_bound/2.cc
===================================================================
--- testsuite/25_algorithms/lower_bound/2.cc	(revision 0)
+++ testsuite/25_algorithms/lower_bound/2.cc	(revision 0)
@@ -0,0 +1,81 @@
+// Copyright (C) 2001 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 2, 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 COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 25.3.3 [lib.alg.binary.search] Binary search algorithms.
+
+#include <algorithm>
+#include <testsuite_hooks.h>
+
+bool test __attribute__((unused)) = true;
+
+const int A[] = {1, 2, 3, 3, 3, 5, 8};
+const int C[] = {8, 5, 3, 3, 3, 2, 1};
+const int N = sizeof(A) / sizeof(int);
+
+// A comparison, equalivalent to std::greater<int> without the
+// dependency on <functional>.
+struct gt
+{
+    bool
+    operator()(const int& x, const int& y) const
+    { return x > y; }
+};
+
+// Each test performs general-case, bookend, not-found condition,
+// and predicate functional checks.
+
+// 25.3.3.1 lower_bound, with and without comparison predicate
+void
+test01()
+{
+    using std::lower_bound;
+
+    const int first = A[0];
+    const int last = A[N - 1];
+
+    const int* p = lower_bound(A, A + N, 3);
+    VERIFY(p == A + 2);
+
+    const int* q = lower_bound(A, A + N, first);
+    VERIFY(q == A + 0);
+
+    const int* r = lower_bound(A, A + N, last);
+    VERIFY(r == A + N - 1);
+
+    const int* s = lower_bound(A, A + N, 4);
+    VERIFY(s == A + 5);
+
+    const int* t = lower_bound(C, C + N, 3, gt());
+    VERIFY(t == C + 2);
+
+    const int* u = lower_bound(C, C + N, first, gt());
+    VERIFY(u == C + N - 1);
+
+    const int* v = lower_bound(C, C + N, last, gt());
+    VERIFY(v == C + 0);
+
+    const int* w = lower_bound(C, C + N, 4, gt());
+    VERIFY(w == C + 2);
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}
Index: testsuite/25_algorithms/equal_range/2.cc
===================================================================
--- testsuite/25_algorithms/equal_range/2.cc	(revision 0)
+++ testsuite/25_algorithms/equal_range/2.cc	(revision 0)
@@ -0,0 +1,90 @@
+// Copyright (C) 2001 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 2, 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 COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 25.3.3 [lib.alg.binary.search] Binary search algorithms.
+
+#include <algorithm>
+#include <testsuite_hooks.h>
+
+bool test __attribute__((unused)) = true;
+
+const int A[] = {1, 2, 3, 3, 3, 5, 8};
+const int C[] = {8, 5, 3, 3, 3, 2, 1};
+const int N = sizeof(A) / sizeof(int);
+
+// A comparison, equalivalent to std::greater<int> without the
+// dependency on <functional>.
+struct gt
+{
+    bool
+    operator()(const int& x, const int& y) const
+    { return x > y; }
+};
+
+// Each test performs general-case, bookend, not-found condition,
+// and predicate functional checks.
+
+// 25.3.3.3 equal_range, with and without comparison predicate
+void
+test03()
+{
+    using std::equal_range;
+    typedef std::pair<const int*, const int*> Ipair;
+    
+    const int first = A[0];
+    const int last = A[N - 1];
+
+    Ipair p = equal_range(A, A + N, 3);
+    VERIFY(p.first == A + 2);
+    VERIFY(p.second == A + 5);
+    
+    Ipair q = equal_range(A, A + N, first);
+    VERIFY(q.first == A + 0);
+    VERIFY(q.second == A + 1);
+    
+    Ipair r = equal_range(A, A + N, last);
+    VERIFY(r.first == A + N - 1);
+    VERIFY(r.second == A + N);
+    
+    Ipair s = equal_range(A, A + N, 4);
+    VERIFY(s.first == A + 5);
+    VERIFY(s.second == A + 5);
+    
+    Ipair t = equal_range(C, C + N, 3, gt());
+    VERIFY(t.first == C + 2);
+    VERIFY(t.second == C + 5);
+    
+    Ipair u = equal_range(C, C + N, first, gt());
+    VERIFY(u.first == C + N - 1);
+    VERIFY(u.second == C + N);
+    
+    Ipair v = equal_range(C, C + N, last, gt());
+    VERIFY(v.first == C + 0);
+    VERIFY(v.second == C + 1);
+    
+    Ipair w = equal_range(C, C + N, 4, gt());
+    VERIFY(w.first == C + 2);
+    VERIFY(w.second == C + 2);
+}
+
+int
+main()
+{
+  test03();
+  return 0;
+}
Index: testsuite/25_algorithms/sort/vectorbool.cc
===================================================================
--- testsuite/25_algorithms/sort/vectorbool.cc	(revision 0)
+++ testsuite/25_algorithms/sort/vectorbool.cc	(revision 0)
@@ -0,0 +1,44 @@
+// Copyright (C) 2005 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 2, 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 COPYING.  If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 25.3.1 algorithms, sort()
+
+#include <algorithm>
+#include <vector>
+#include <testsuite_hooks.h>
+
+void
+test01()
+{
+  bool test __attribute__((unused)) = true;
+
+  std::vector<bool> b;
+  b.push_back(false);
+  b.push_back(true);
+  b.push_back(false);
+  b.push_back(true);
+  std::sort(b.begin(), b.end());
+  VERIFY( b[0] == false && b[1] == false && b[2] == true && b[3] == true );
+}
+
+int
+main()
+{
+  test01();
+  return 0;
+}

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [v3] 25_algo merge/flatten from libstdcxx_so_7
  2007-10-02 16:16 [v3] 25_algo merge/flatten from libstdcxx_so_7 Benjamin Kosnik
@ 2007-10-03  0:13 ` Benjamin Kosnik
  2007-10-03  0:52   ` Paolo Carlini
  0 siblings, 1 reply; 4+ messages in thread
From: Benjamin Kosnik @ 2007-10-03  0:13 UTC (permalink / raw)
  To: chris; +Cc: gcc-patches, libstdc++

[-- Attachment #1: Type: text/plain, Size: 1060 bytes --]


> I just went through and diffed so_7's testsuite for 25_algo. It looks
> like everything is now in mainline (some names and locations have
> changed), except for the moveable.cc.

It looks like I missed some search differences. Ooops.
 
> Presumably these will move over when the rest of the library
> support for move semantics goes in? Anyway.

Actually.... this moves over the rvalrefs/moveable testsuite additions
from libstdcxx_so_7-branch to mainline. Chris, it would be great if you
could look this over, but I'll assume it's ok if I've not heard
anything by Thursday.

This makes all moveable.cc tests dg-require-rvalrefs, which is a bit of
a hokey dependency test for the library components, ie move. This seems
simplest.

Some slight changes to paths, __gnu_cxx::__make_move_iterator to
std::make_move_iterator (and #include <iterator> if necessary),
__gnu_cxx::__move to std::move (and #include <utility> if necessary),
etc. 

Chris, I forgot to add you to the ChangeLog entry on the first patch.
I've corrected that. 

tested x86/linux

-benjamin

[-- Attachment #2: p.20071002-2.bz2 --]
[-- Type: application/x-bzip, Size: 10267 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [v3] 25_algo merge/flatten from libstdcxx_so_7
  2007-10-03  0:13 ` Benjamin Kosnik
@ 2007-10-03  0:52   ` Paolo Carlini
  2007-10-03 17:00     ` Benjamin Kosnik
  0 siblings, 1 reply; 4+ messages in thread
From: Paolo Carlini @ 2007-10-03  0:52 UTC (permalink / raw)
  To: Benjamin Kosnik; +Cc: chris, gcc-patches, libstdc++

Hi all,

>Actually.... this moves over the rvalrefs/moveable testsuite additions
>from libstdcxx_so_7-branch to mainline. Chris, it would be great if you
>could look this over, but I'll assume it's ok if I've not heard
>anything by Thursday.
>  
>
Actually, seems a very good idea to me.

>This makes all moveable.cc tests dg-require-rvalrefs, which is a bit of
>a hokey dependency test for the library components, ie move. This seems
>simplest.
>
>Some slight changes to paths, __gnu_cxx::__make_move_iterator to
>std::make_move_iterator (and #include <iterator> if necessary),
>__gnu_cxx::__move to std::move (and #include <utility> if necessary),
>etc. 
>  
>
I can implement std::move_iterator and std::make_move_iterator in 
<iterator>, completing my previous (bit of) work on std::move &co in 
<utility>...

Paolo.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [v3] 25_algo merge/flatten from libstdcxx_so_7
  2007-10-03  0:52   ` Paolo Carlini
@ 2007-10-03 17:00     ` Benjamin Kosnik
  0 siblings, 0 replies; 4+ messages in thread
From: Benjamin Kosnik @ 2007-10-03 17:00 UTC (permalink / raw)
  To: Paolo Carlini; +Cc: chris, gcc-patches, libstdc++


> >Actually.... this moves over the rvalrefs/moveable testsuite
> >additions from libstdcxx_so_7-branch to mainline. Chris, it would be
> >great if you could look this over, but I'll assume it's ok if I've
> >not heard anything by Thursday.
> >  
> >
> Actually, seems a very good idea to me.

OK, well then. This is in, with the proviso that Chris can tweak the
mainline code if I messed up anything.

With this in, merges or diffs from libstdcxx_so_7-branch to mainline
should be able to ignore testsuite files.
 
> >This makes all moveable.cc tests dg-require-rvalrefs, which is a bit
> >of a hokey dependency test for the library components, ie move. This
> >seems simplest.
> >
> >Some slight changes to paths, __gnu_cxx::__make_move_iterator to
> >std::make_move_iterator (and #include <iterator> if necessary),
> >__gnu_cxx::__move to std::move (and #include <utility> if necessary),
> >etc. 
> >  
> >
> I can implement std::move_iterator and std::make_move_iterator in 
> <iterator>, completing my previous (bit of) work on std::move &co in 
> <utility>...

Sounds cool. FYI so_7's include/bits/moveable.h has most of these two,
although I'm not quite sure what's up with this code... 

Also it looks like there's a move_iterator implementation here:
http://mndfck.org/~pedro.lamarao/projects/c++0x/libstdc++-v3.patch

(as well as a unique_ptr implementation...)

-benjamin

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-10-03 17:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-10-02 16:16 [v3] 25_algo merge/flatten from libstdcxx_so_7 Benjamin Kosnik
2007-10-03  0:13 ` Benjamin Kosnik
2007-10-03  0:52   ` Paolo Carlini
2007-10-03 17:00     ` Benjamin Kosnik

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).