From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; 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. --- .../25_algorithms/prev_permutation/moveable.cc | 125 +++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc (limited to 'libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc') diff --git a/libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc new file mode 100644 index 000000000..5570239b0 --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/prev_permutation/moveable.cc @@ -0,0 +1,125 @@ +// { 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 +// . + +// 25.3.9 [lib.alg.permutation.generators] + +// 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 +#include +#include +#include + +using __gnu_test::test_container; +using __gnu_test::bidirectional_iterator_wrapper; +using __gnu_test::rvalstruct; +using std::prev_permutation; + +typedef test_container Container; + +void +test1() +{ + bool test __attribute__((unused)) = true; + + // Note: The standard is unclear on what should happen in this case. + // This seems the only really sensible behaviour, and what is done. + rvalstruct array[] = {0}; + Container con(array, array); + VERIFY( !prev_permutation(con.begin(), con.end()) ); +} + +void +test2() +{ + bool test __attribute__((unused)) = true; + + rvalstruct array[] = {0}; + Container con(array, array + 1); + VERIFY( !prev_permutation(con.begin(), con.end()) ); +} + +void +test3() +{ + bool test __attribute__((unused)) = true; + + rvalstruct array[] = {3, 0}; + Container con(array, array + 2); + VERIFY( prev_permutation(con.begin(), con.end()) ); + VERIFY( array[0] == 0 && array[1] == 3 ); + VERIFY( !prev_permutation(con.begin(), con.end()) ); + VERIFY( array[0] == 3 && array[1] == 0 ); +} + +void +test4() +{ + bool test __attribute__((unused)) = true; + + int array[6] = {5, 4, 3, 2, 1, 0}; + for(int i = 0 ; i < 719; ++i) + { + rvalstruct temp_array[6]; + std::copy(array, array + 6, temp_array); + Container con(temp_array, temp_array + 6); + VERIFY( prev_permutation(array, array + 6) ); + VERIFY( !std::lexicographical_compare(temp_array, temp_array + 6, + array, array + 6) ); + } + VERIFY( !prev_permutation(array,array + 6)) ; + for(int i = 0; i < 6; ++i) + VERIFY( array[i] == (5 - i) ); +} + +bool +are_ordered(const rvalstruct& lhs, const rvalstruct& rhs) +{ return lhs < rhs; } + +void +test5() +{ + bool test __attribute__((unused)) = true; + + int array[6] = {5, 4, 3, 2, 1, 0}; + for(int i = 0 ; i < 719; ++i) + { + rvalstruct temp_array[6]; + std::copy(array, array + 6, temp_array); + Container con(temp_array, temp_array + 6); + VERIFY( prev_permutation(array, array + 6, are_ordered) ); + VERIFY( !std::lexicographical_compare(temp_array, temp_array + 6, + array, array + 6, are_ordered) ); + } + VERIFY( !prev_permutation(array,array + 6, are_ordered) ); + for(int i = 0; i < 6; ++i) + VERIFY( array[i] == (5 - i) ); +} + +int main() +{ + test1(); + test2(); + test3(); + test4(); + test5(); + return 0; +} -- cgit v1.2.3