1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector>
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <numeric>
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h"
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std;
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass AccumTest : public CPPUNIT_NS::TestCase
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE(AccumTest);
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(accum1);
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(accum2);
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE_END();
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected:
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void accum1();
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void accum2();
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static int mult(int initial_, int element_);
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(AccumTest);
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid AccumTest::accum1()
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  vector<int> v(5);
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for(int i = 0; (size_t)i < v.size(); ++i)
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    v[i] = i + 1;
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int sum = accumulate(v.begin(), v.end(), 0);
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(sum==15);
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid AccumTest::accum2()
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  vector<int> v(5);
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  for(int i = 0; (size_t)i < v.size(); ++i)
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    v[i] = i + 1;
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int prod = accumulate(v.begin(), v.end(), 1, mult);
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(prod==120);
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottint AccumTest::mult(int initial_, int element_)
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return initial_ * element_;
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
51