1#include <algorithm>
2#include <vector>
3#include "cppunit/cppunit_proxy.h"
4
5#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
6using namespace std;
7#endif
8
9//
10// TestCase class
11//
12class CountTest : public CPPUNIT_NS::TestCase
13{
14  CPPUNIT_TEST_SUITE(CountTest);
15  CPPUNIT_TEST(count0);
16  CPPUNIT_TEST(count1);
17  CPPUNIT_TEST(countif1);
18  CPPUNIT_TEST_SUITE_END();
19
20protected:
21  void count0();
22  void count1();
23  void countif1();
24  static int odd(int a_);
25};
26
27CPPUNIT_TEST_SUITE_REGISTRATION(CountTest);
28
29//
30// tests implementation
31//
32void CountTest::count0()
33{
34  int numbers[10] = { 1, 2, 4, 1, 2, 4, 1, 2, 4, 1 };
35
36  int result = count(numbers, numbers + 10, 1);
37  CPPUNIT_ASSERT(result==4);
38#if defined (STLPORT) && !defined (_STLP_NO_ANACHRONISMS)
39  result = 0;
40  count(numbers, numbers + 10, 1, result);
41  CPPUNIT_ASSERT(result==4);
42#endif
43}
44void CountTest::count1()
45{
46  vector <int> numbers(100);
47  for(int i = 0; i < 100; i++)
48  numbers[i] = i % 3;
49  int elements = count(numbers.begin(), numbers.end(), 2);
50  CPPUNIT_ASSERT(elements==33);
51#if defined (STLPORT) && !defined (_STLP_NO_ANACHRONISMS)
52  elements = 0;
53  count(numbers.begin(), numbers.end(), 2, elements);
54  CPPUNIT_ASSERT(elements==33);
55#endif
56}
57void CountTest::countif1()
58{
59  vector <int> numbers(100);
60  for(int i = 0; i < 100; i++)
61    numbers[i] = i % 3;
62  int elements = count_if(numbers.begin(), numbers.end(), odd);
63  CPPUNIT_ASSERT(elements==33);
64#if defined (STLPORT) && !defined (_STLP_NO_ANACHRONISMS)
65  elements = 0;
66  count_if(numbers.begin(), numbers.end(), odd, elements);
67  CPPUNIT_ASSERT(elements==33);
68#endif
69}
70int CountTest::odd(int a_)
71{
72  return a_ % 2;
73}
74