1 #include <vector>
2 #include <algorithm>
3 #include <functional>
4
5 #include "cppunit/cppunit_proxy.h"
6
7 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
8 using namespace std;
9 #endif
10
11 //
12 // TestCase class
13 //
14 class Ptr2Test : public CPPUNIT_NS::TestCase
15 {
16 CPPUNIT_TEST_SUITE(Ptr2Test);
17 CPPUNIT_TEST(ptrbin1);
18 CPPUNIT_TEST(ptrbin2);
19 CPPUNIT_TEST(ptrun1);
20 CPPUNIT_TEST(ptrun2);
21 CPPUNIT_TEST_SUITE_END();
22
23 protected:
24 void ptrbin1();
25 void ptrbin2();
26 void ptrun1();
27 void ptrun2();
28 };
29
30 CPPUNIT_TEST_SUITE_REGISTRATION(Ptr2Test);
31
32 //
33 // tests implementation
34 //
sum(int x_,int y_)35 static int sum(int x_, int y_)
36 {
37 return x_ + y_;
38 }
even(int n_)39 bool even(int n_)
40 {
41 return(n_ % 2) == 0;
42 }
ptrbin1()43 void Ptr2Test::ptrbin1()
44 {
45 int input1 [4] = { 7, 2, 3, 5 };
46 int input2 [4] = { 1, 5, 5, 8 };
47
48 int output [4];
49 transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, pointer_to_binary_function<int, int, int>(sum));
50
51 CPPUNIT_ASSERT(output[0]==8);
52 CPPUNIT_ASSERT(output[1]==7);
53 CPPUNIT_ASSERT(output[2]==8);
54 CPPUNIT_ASSERT(output[3]==13);
55 }
ptrbin2()56 void Ptr2Test::ptrbin2()
57 {
58 int input1 [4] = { 7, 2, 3, 5 };
59 int input2 [4] = { 1, 5, 5, 8 };
60
61 int output [4];
62 transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, ptr_fun(sum));
63
64 CPPUNIT_ASSERT(output[0]==8);
65 CPPUNIT_ASSERT(output[1]==7);
66 CPPUNIT_ASSERT(output[2]==8);
67 CPPUNIT_ASSERT(output[3]==13);
68 }
ptrun1()69 void Ptr2Test::ptrun1()
70 {
71 int array [3] = { 1, 2, 3 };
72
73 int* p = find_if((int*)array, (int*)array + 3, pointer_to_unary_function<int, bool>(even));
74 CPPUNIT_ASSERT(p != array+3);
75 CPPUNIT_ASSERT(*p==2);
76 }
ptrun2()77 void Ptr2Test::ptrun2()
78 {
79 int array [3] = { 1, 2, 3 };
80
81 int* p = find_if((int*)array, (int*)array + 3, ptr_fun(even));
82 CPPUNIT_ASSERT(p != array+3);
83 CPPUNIT_ASSERT(*p==2);
84 }
85