summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable2.cc
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable2.cc
downloadcbb-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/moveable2.cc')
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/inplace_merge/moveable2.cc102
1 files changed, 102 insertions, 0 deletions
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;
+}