1// Copyright (C) 2005, 2009 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 3, 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 even 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 COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// 25.2.4 replace_copy_if 19 20#include <algorithm> 21#include <testsuite_hooks.h> 22#include <testsuite_iterators.h> 23 24using __gnu_test::test_container; 25using __gnu_test::input_iterator_wrapper; 26using __gnu_test::output_iterator_wrapper; 27 28typedef test_container<int, input_iterator_wrapper> Icontainer; 29typedef test_container<int, output_iterator_wrapper> Ocontainer; 30int array[] = {0, 0, 0, 1, 0, 1}; 31 32bool 33pred(int i) 34{ return i == 1; } 35 36void 37test1() 38{ 39 int out[1]; 40 Icontainer in_con(array, array); 41 Ocontainer out_con(out, out); 42 VERIFY(std::replace_copy_if(in_con.begin(), in_con.end(), 43 out_con.begin(), pred, 1).ptr == out); 44} 45 46void 47test2() 48{ 49 int out[1]; 50 Icontainer in_con(array, array + 1); 51 Ocontainer out_con(out, out + 1); 52 VERIFY(std::replace_copy_if(in_con.begin(), in_con.end(), 53 out_con.begin(), pred, 2).ptr == out + 1); 54 VERIFY(out[0] == 0); 55} 56 57void 58test3() 59{ 60 int out[6]; 61 Icontainer in_con(array, array + 6); 62 Ocontainer out_con(out, out + 6); 63 VERIFY(std::replace_copy_if(in_con.begin(), in_con.end(), 64 out_con.begin(), pred, 2).ptr == out + 6); 65 VERIFY(out[0] == 0 && out[1] == 0 && out[2] == 0 && 66 out[3] == 2 && out[4] == 0 && out[5] == 2); 67} 68 69int 70main() 71{ 72 test1(); 73 test2(); 74 test3(); 75} 76