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, Predicate<auto, Iter::value_type> Pred>
13//   requires CopyConstructible<Pred>
14//   Iter::difference_type
15//   count_if(Iter first, Iter last, Pred pred);
16
17#include <algorithm>
18#include <functional>
19#include <cassert>
20
21#include "test_iterators.h"
22
23int main()
24{
25    int ia[] = {0, 1, 2, 2, 0, 1, 2, 3};
26    const unsigned sa = sizeof(ia)/sizeof(ia[0]);
27    assert(std::count_if(input_iterator<const int*>(ia),
28                         input_iterator<const int*>(ia + sa),
29                         std::bind2nd(std::equal_to<int>(),2)) == 3);
30    assert(std::count_if(input_iterator<const int*>(ia),
31                         input_iterator<const int*>(ia + sa),
32                         std::bind2nd(std::equal_to<int>(),7)) == 0);
33    assert(std::count_if(input_iterator<const int*>(ia),
34                         input_iterator<const int*>(ia),
35                         std::bind2nd(std::equal_to<int>(),2)) == 0);
36}
37