innerprod_test.cpp revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
1#include <vector>
2#include <algorithm>
3#include <numeric>
4
5#include "cppunit/cppunit_proxy.h"
6
7#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
8using namespace std;
9#endif
10
11//
12// TestCase class
13//
14class InnerprodTest : public CPPUNIT_NS::TestCase
15{
16  CPPUNIT_TEST_SUITE(InnerprodTest);
17  CPPUNIT_TEST(inprod0);
18  CPPUNIT_TEST(inprod1);
19  CPPUNIT_TEST(inprod2);
20  CPPUNIT_TEST_SUITE_END();
21
22protected:
23  void inprod0();
24  void inprod1();
25  void inprod2();
26
27  static size_t add(size_t a_, size_t b_) {
28    return a_ + b_;
29  }
30
31  static size_t mult(size_t a_, size_t b_) {
32    return a_ * b_;
33  }
34};
35
36CPPUNIT_TEST_SUITE_REGISTRATION(InnerprodTest);
37
38//
39// tests implementation
40//
41void InnerprodTest::inprod0()
42{
43  int vector1[5] = { 1, 2, 3, 4, 5 };
44  int vector2[5] = { 1, 2, 3, 4, 5 };
45
46  int result;
47  result = inner_product(vector1, vector1 + 5, vector2, 0);
48  CPPUNIT_ASSERT(result==55);
49}
50void InnerprodTest::inprod1()
51{
52  vector<size_t> v1(3);
53  vector<size_t> v2(v1.size());
54  for (size_t i = 0; i < v1.size(); ++i) {
55    v1[i] = i + 1;
56    v2[i] = v1.size() - i;
57  }
58  size_t result = inner_product(v1.begin(), v1.end(), v2.begin(), (size_t)0);
59  CPPUNIT_ASSERT(result == 10);
60}
61void InnerprodTest::inprod2()
62{
63  vector<size_t> v1(3);
64  vector<size_t> v2(v1.size());
65  for(size_t i = 0; i < v1.size(); ++i) {
66    v1[i] = i + 1;
67    v2[i] = v1.size() - i;
68  }
69  size_t result=inner_product(v1.begin(), v1.end(), v2.begin(), (size_t)1, mult, add);
70
71  CPPUNIT_ASSERT(result == 64);
72}
73