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