test.pass.cpp revision 83e2c4d877fe2d7793868b1c6a5d9525a7c4d431
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <algorithm>
11
12// template<InputIterator Iter, Callable<auto, Iter::reference> Function>
13//   requires CopyConstructible<Function>
14//   Function
15//   for_each(Iter first, Iter last, Function f);
16
17#include <algorithm>
18#include <cassert>
19
20#include "test_iterators.h"
21
22struct for_each_test
23{
24    for_each_test(int c) : count(c) {}
25    int count;
26    void operator()(int& i) {++i; ++count;}
27};
28
29int main()
30{
31    int ia[] = {0, 1, 2, 3, 4, 5};
32    const unsigned s = sizeof(ia)/sizeof(ia[0]);
33    for_each_test f = std::for_each(input_iterator<int*>(ia),
34                                    input_iterator<int*>(ia+s),
35                                    for_each_test(0));
36    assert(f.count == s);
37    for (unsigned i = 0; i < s; ++i)
38        assert(ia[i] == i+1);
39}
40