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) 8using namespace std; 9#endif 10 11// 12// TestCase class 13// 14class 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 23protected: 24 void ptrbin1(); 25 void ptrbin2(); 26 void ptrun1(); 27 void ptrun2(); 28}; 29 30CPPUNIT_TEST_SUITE_REGISTRATION(Ptr2Test); 31 32// 33// tests implementation 34// 35static int sum(int x_, int y_) 36{ 37 return x_ + y_; 38} 39bool even(int n_) 40{ 41 return(n_ % 2) == 0; 42} 43void 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} 56void 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} 69void 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} 77void 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