diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /libstdc++-v3/testsuite/25_algorithms/inplace_merge | |
download | cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2 cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'libstdc++-v3/testsuite/25_algorithms/inplace_merge')
7 files changed, 489 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/25_algorithms/inplace_merge/1.cc b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/1.cc new file mode 100644 index 000000000..d4da753b6 --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/1.cc @@ -0,0 +1,89 @@ +// Copyright (C) 2005, 2009 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/>. + +// 25.3.4 [lib.alg.merge] + +#include <algorithm> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> + +using __gnu_test::test_container; +using __gnu_test::bidirectional_iterator_wrapper; +using std::inplace_merge; + +typedef test_container<int, bidirectional_iterator_wrapper> container; + +void +test1() +{ + int array[] = { 1 }; + container con1(array, array); + inplace_merge(con1.begin(), con1.end(), con1.end()); + container con2(array, array + 1); + inplace_merge(con2.begin(), con2.end(), con2.end()); + inplace_merge(con2.begin(), con2.begin(), con2.end()); +} + +void +test2() +{ + bool test __attribute__((unused)) = true; + + int array[] = { 0, 2, 4, 1, 3, 5 }; + container con(array, array + 6); + inplace_merge(con.begin(), con.it(3), con.end()); + VERIFY( array[0] == 0 && array[1] == 1 && array[2] == 2 + && array[3] == 3 && array[4] == 4 && array[5] == 5 ); +} + +struct S +{ + int a; + int b; + S(int _a, int _b) : a(_a), b(_b) { } + S() { } + bool + operator<(const S& _s) const + { return a < _s.a; } +}; + +void +test3() +{ + bool test __attribute__((unused)) = true; + + S s[4]; + s[0].a = 0; + s[1].a = 1; + s[2].a = 0; + s[3].a = 1; + s[0].b = 0; + s[1].b = 0; + s[2].b = 1; + s[3].b = 1; + inplace_merge(s, s + 2, s + 4); + VERIFY( s[0].b == 0 && s[1].b == 1 && s[2].b == 0 && s[3].b == 1 ); +} + +int +main() +{ + test1(); + test2(); + test3(); + return 0; +} diff --git a/libstdc++-v3/testsuite/25_algorithms/inplace_merge/49559.cc b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/49559.cc new file mode 100644 index 000000000..8b7b52e3f --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/49559.cc @@ -0,0 +1,72 @@ +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2011 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/>. + +#undef _GLIBCXX_CONCEPT_CHECKS + +// XXX FIXME: parallel-mode should deal correctly with moveable-only types +// per C++0x, at minimum smoothly fall back to serial. +#undef _GLIBCXX_PARALLEL + +#include <algorithm> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> +#include <testsuite_rvalref.h> + +using __gnu_test::test_container; +using __gnu_test::bidirectional_iterator_wrapper; +using __gnu_test::rvalstruct; + +typedef test_container<rvalstruct, bidirectional_iterator_wrapper> Container; + +const int A[] = { 0, 1, 2, 3, 4, 5 }; +const int N = 6; + +bool are_ordered(const rvalstruct& lhs, const rvalstruct& rhs) +{ return lhs < rhs; } + +// libstdc++/49559 +void test01() +{ + bool test __attribute__((unused)) = true; + + rvalstruct s1[6]; + std::copy(A, A + N, s1); + Container con1(s1, s1 + N); + std::inplace_merge(con1.begin(), con1.it(4), con1.end()); + VERIFY( s1[0] == 0 && s1[1] == 1 && s1[2] == 2 + && s1[3] == 3 && s1[4] == 4 && s1[5] == 5 ); + VERIFY( s1[0].valid && s1[1].valid && s1[2].valid + && s1[3].valid && s1[4].valid && s1[5].valid ); + + rvalstruct s2[6]; + std::copy(A, A + N, s2); + Container con2(s2, s2 + N); + std::inplace_merge(con2.begin(), con2.it(4), con2.end(), are_ordered); + VERIFY( s2[0] == 0 && s2[1] == 1 && s2[2] == 2 + && s2[3] == 3 && s2[4] == 4 && s2[5] == 5 ); + VERIFY( s2[0].valid && s2[1].valid && s2[2].valid + && s2[3].valid && s2[4].valid && s2[5].valid ); +} + +int +main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/25_algorithms/inplace_merge/check_type.cc b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/check_type.cc new file mode 100644 index 000000000..d4526a80a --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/check_type.cc @@ -0,0 +1,47 @@ +// Copyright (C) 2005, 2009 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/>. + +// 25.3.4 [lib.alg.merge] + +// { dg-do compile } + +#include <algorithm> +#include <testsuite_iterators.h> + +using __gnu_test::bidirectional_iterator_wrapper; + +struct S { }; + +bool +operator<(const S&, const S&) {return true;} + +struct X { }; + +bool +predicate(const X&, const X&) {return true;} + +void +test1(bidirectional_iterator_wrapper<S>& s) +{ + std::inplace_merge(s, s, s); +} + +void +test2(bidirectional_iterator_wrapper<X>& x) +{ + std::inplace_merge(x, x, x, predicate); +} diff --git a/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable.cc new file mode 100644 index 000000000..6509957da --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable.cc @@ -0,0 +1,102 @@ +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2009, 2010 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/>. + +// 25.3.4 [lib.alg.merge] + +// XXX FIXME: parallel-mode should deal correctly with moveable-only types +// per C++0x, at minimum smoothly fall back to serial. +#undef _GLIBCXX_PARALLEL + +#include <algorithm> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> +#include <testsuite_rvalref.h> + +using __gnu_test::test_container; +using __gnu_test::bidirectional_iterator_wrapper; +using __gnu_test::rvalstruct; + +typedef test_container<rvalstruct, bidirectional_iterator_wrapper> container; + +void +test01() +{ + bool test __attribute__((unused)) = true; + + int array1[]={0,2,4,1,3,5}; + rvalstruct rv_array1[6]; + std::copy(array1, array1 + 6, rv_array1); + container con1(rv_array1, rv_array1 + 6); + std::inplace_merge(con1.begin(), con1.it(3), con1.end()); + VERIFY( rv_array1[0] == 0 && rv_array1[1] == 1 && rv_array1[2] == 2 + && rv_array1[3] == 3 && rv_array1[4] == 4 && rv_array1[5] == 5 ); + + int array2[]={0,2,4,5,1,3}; + rvalstruct rv_array2[6]; + std::copy(array2, array2 + 6, rv_array2); + container con2(rv_array2, rv_array2 + 6); + std::inplace_merge(con2.begin(), con2.it(4), con2.end()); + VERIFY( rv_array2[0] == 0 && rv_array2[1] == 1 && rv_array2[2] == 2 + && rv_array2[3] == 3 && rv_array2[4] == 4 && rv_array2[5] == 5 ); + + int array3[]={1,1,1,2,2,2}; + rvalstruct rv_array3[6]; + std::copy(array3, array3 + 6, rv_array3); + container con3(rv_array3, rv_array3 + 6); + std::inplace_merge(con3.begin(), con3.it(3), con3.end()); + VERIFY( rv_array3[0] == 1 && rv_array3[1] == 1 && rv_array3[2] == 1 + && rv_array3[3] == 2 && rv_array3[4] == 2 && rv_array3[5] == 2 ); + + int array4[]={1,1,1,1,2,2}; + rvalstruct rv_array4[6]; + std::copy(array4, array4 + 6, rv_array4); + container con4(rv_array4, rv_array4 + 6); + std::inplace_merge(con4.begin(), con4.it(4), con4.end()); + VERIFY( rv_array4[0] == 1 && rv_array4[1] == 1 && rv_array4[2] == 1 + && rv_array4[3] == 1 && rv_array4[4] == 2 && rv_array4[5] == 2 ); + + int array5[]={3,3,3,3}; + rvalstruct rv_array5[4]; + std::copy(array5, array5 + 4, rv_array5); + container con5(rv_array5, rv_array5 + 4); + std::inplace_merge(con5.begin(), con5.it(2), con5.end()); + VERIFY( rv_array5[0] == 3 && rv_array5[1] == 3 && rv_array5[2] == 3 + && rv_array5[3] == 3 ); + + int array6[]={3,3,3}; + rvalstruct rv_array6[3]; + std::copy(array6, array6 + 3, rv_array6); + container con6(rv_array6, rv_array6 + 3); + std::inplace_merge(con6.begin(), con6.it(0), con6.end()); + VERIFY( rv_array6[0] == 3 && rv_array6[1] == 3 && rv_array6[2] == 3 ); + + int array7[]={3,3}; + rvalstruct rv_array7[2]; + std::copy(array7, array7 + 2, rv_array7); + container con7(rv_array7, rv_array7 + 2); + std::inplace_merge(con7.begin(), con7.it(2), con7.end()); + VERIFY( rv_array7[0] == 3 && rv_array7[1] == 3 ); +} + +int +main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable2.cc b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable2.cc new file mode 100644 index 000000000..a3a898cd5 --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable2.cc @@ -0,0 +1,102 @@ +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2009, 2010, 2011 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/>. + +// 25.3.4 [lib.alg.merge] + +#include <algorithm> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> +#include <testsuite_rvalref.h> + +using __gnu_test::test_container; +using __gnu_test::bidirectional_iterator_wrapper; +using __gnu_test::rvalstruct; + +typedef test_container<rvalstruct, bidirectional_iterator_wrapper> container; + +bool +are_ordered(const rvalstruct& lhs, const rvalstruct& rhs) +{ return lhs < rhs; } + +void +test01() +{ + bool test __attribute__((unused)) = true; + + int array1[]={0,2,4,1,3,5}; + rvalstruct rv_array1[6]; + std::copy(array1, array1 + 6, rv_array1); + container con1(rv_array1, rv_array1 + 6); + std::inplace_merge(con1.begin(), con1.it(3), con1.end(), are_ordered); + VERIFY( rv_array1[0] == 0 && rv_array1[1] == 1 && rv_array1[2] == 2 + && rv_array1[3] == 3 && rv_array1[4] == 4 && rv_array1[5] == 5 ); + + int array2[]={0,2,4,5,1,3}; + rvalstruct rv_array2[6]; + std::copy(array2, array2 + 6, rv_array2); + container con2(rv_array2, rv_array2 + 6); + std::inplace_merge(con2.begin(), con2.it(4), con2.end(), are_ordered); + VERIFY( rv_array2[0] == 0 && rv_array2[1] == 1 && rv_array2[2] == 2 + && rv_array2[3] == 3 && rv_array2[4] == 4 && rv_array2[5] == 5 ); + + int array3[]={1,1,1,2,2,2}; + rvalstruct rv_array3[6]; + std::copy(array3, array3 + 6, rv_array3); + container con3(rv_array3, rv_array3 + 6); + std::inplace_merge(con3.begin(), con3.it(3), con3.end(), are_ordered); + VERIFY( rv_array3[0] == 1 && rv_array3[1] == 1 && rv_array3[2] == 1 + && rv_array3[3] == 2 && rv_array3[4] == 2 && rv_array3[5] == 2 ); + + int array4[]={1,1,1,1,2,2}; + rvalstruct rv_array4[6]; + std::copy(array4, array4 + 6, rv_array4); + container con4(rv_array4, rv_array4 + 6); + std::inplace_merge(con4.begin(), con4.it(4), con4.end(), are_ordered); + VERIFY( rv_array4[0] == 1 && rv_array4[1] == 1 && rv_array4[2] == 1 + && rv_array4[3] == 1 && rv_array4[4] == 2 && rv_array4[5] == 2 ); + + int array5[]={3,3,3,3}; + rvalstruct rv_array5[4]; + std::copy(array5, array5 + 4, rv_array5); + container con5(rv_array5, rv_array5 + 4); + std::inplace_merge(con5.begin(), con5.it(2), con5.end(), are_ordered); + VERIFY( rv_array5[0] == 3 && rv_array5[1] == 3 && rv_array5[2] == 3 + && rv_array5[3] == 3 ); + + int array6[]={3,3,3}; + rvalstruct rv_array6[3]; + std::copy(array6, array6 + 3, rv_array6); + container con6(rv_array6, rv_array6 + 3); + std::inplace_merge(con6.begin(), con6.it(0), con6.end(), are_ordered); + VERIFY( rv_array6[0] == 3 && rv_array6[1] == 3 && rv_array6[2] == 3 ); + + int array7[]={3,3}; + rvalstruct rv_array7[2]; + std::copy(array7, array7 + 2, rv_array7); + container con7(rv_array7, rv_array7 + 2); + std::inplace_merge(con7.begin(), con7.it(2), con7.end(), are_ordered); + VERIFY( rv_array7[0] == 3 && rv_array7[1] == 3 ); +} + +int +main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/2.cc b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/2.cc new file mode 100644 index 000000000..6cd2f17b4 --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/2.cc @@ -0,0 +1,39 @@ +// { dg-do compile } + +// 2007-09-20 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2007, 2009 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/>. + + +#include <algorithm> +#include <functional> +#include <testsuite_api.h> + +namespace std +{ + using __gnu_test::NonDefaultConstructible; + + typedef NonDefaultConstructible value_type; + typedef value_type* iterator_type; + typedef std::less<value_type> compare_type; + + template void inplace_merge(iterator_type, iterator_type, iterator_type); + + template void inplace_merge(iterator_type, iterator_type, + iterator_type, compare_type); +} diff --git a/libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/pod.cc b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/pod.cc new file mode 100644 index 000000000..95ea9671e --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/inplace_merge/requirements/explicit_instantiation/pod.cc @@ -0,0 +1,38 @@ +// { dg-do compile } + +// 2007-09-20 Benjamin Kosnik <bkoz@redhat.com> + +// Copyright (C) 2007, 2009 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/>. + + +#include <algorithm> +#include <testsuite_character.h> + +namespace std +{ + using __gnu_test::pod_int; + + typedef pod_int value_type; + typedef value_type* iterator_type; + typedef std::less<value_type> compare_type; + + template void inplace_merge(iterator_type, iterator_type, iterator_type); + + template void inplace_merge(iterator_type, iterator_type, + iterator_type, compare_type); +} |