1// Copyright (C) 2001 Free Software Foundation, Inc. 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 2, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without Pred the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING. If not, write to the Free 16// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 17// USA. 18 19// 25.2.12 [lib.alg.partitions] Partitions. 20 21#include <algorithm> 22#include <functional> 23#include <testsuite_hooks.h> 24 25bool test = true; 26 27const int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}; 28const int B[] = {2, 4, 6, 8, 10, 12, 14, 16, 1, 3, 5, 7, 9, 11, 13, 15, 17}; 29const int N = sizeof(A) / sizeof(int); 30 31struct Pred 32{ 33 bool 34 operator()(const int& x) const 35 { return (x % 2) == 0; } 36}; 37 38// 25.2.12 partition() 39void 40test01() 41{ 42 using std::partition; 43 44 int s1[N]; 45 std::copy(A, A + N, s1); 46 47 Pred pred; 48 int* m = partition(s1, s1 + N, pred); 49 for (const int* i = s1; i < m; ++i) VERIFY(pred(*i)); 50 for (const int* i = m; i < s1 + N; ++i) VERIFY(!pred(*i)); 51} 52 53// 25.2.12 stable_partition() 54void 55test02() 56{ 57 using std::stable_partition; 58 59 int s1[N]; 60 std::copy(A, A + N, s1); 61 62 stable_partition(s1, s1 + N, Pred()); 63 VERIFY(std::equal(s1, s1 + N, B)); 64} 65 66int 67main(int argc, char* argv[]) 68{ 69 test01(); 70 test02(); 71 72 return !test; 73} 74