| #include <vector> |
| #include <algorithm> |
| #include <functional> |
| |
| #include "cppunit/cppunit_proxy.h" |
| |
| #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) |
| using namespace std; |
| #endif |
| |
| // |
| // TestCase class |
| // |
| class Ptr2Test : public CPPUNIT_NS::TestCase |
| { |
| CPPUNIT_TEST_SUITE(Ptr2Test); |
| CPPUNIT_TEST(ptrbin1); |
| CPPUNIT_TEST(ptrbin2); |
| CPPUNIT_TEST(ptrun1); |
| CPPUNIT_TEST(ptrun2); |
| CPPUNIT_TEST_SUITE_END(); |
| |
| protected: |
| void ptrbin1(); |
| void ptrbin2(); |
| void ptrun1(); |
| void ptrun2(); |
| }; |
| |
| CPPUNIT_TEST_SUITE_REGISTRATION(Ptr2Test); |
| |
| // |
| // tests implementation |
| // |
| static int sum(int x_, int y_) |
| { |
| return x_ + y_; |
| } |
| bool even(int n_) |
| { |
| return(n_ % 2) == 0; |
| } |
| void Ptr2Test::ptrbin1() |
| { |
| int input1 [4] = { 7, 2, 3, 5 }; |
| int input2 [4] = { 1, 5, 5, 8 }; |
| |
| int output [4]; |
| transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, pointer_to_binary_function<int, int, int>(sum)); |
| |
| CPPUNIT_ASSERT(output[0]==8); |
| CPPUNIT_ASSERT(output[1]==7); |
| CPPUNIT_ASSERT(output[2]==8); |
| CPPUNIT_ASSERT(output[3]==13); |
| } |
| void Ptr2Test::ptrbin2() |
| { |
| int input1 [4] = { 7, 2, 3, 5 }; |
| int input2 [4] = { 1, 5, 5, 8 }; |
| |
| int output [4]; |
| transform((int*)input1, (int*)input1 + 4, (int*)input2, (int*)output, ptr_fun(sum)); |
| |
| CPPUNIT_ASSERT(output[0]==8); |
| CPPUNIT_ASSERT(output[1]==7); |
| CPPUNIT_ASSERT(output[2]==8); |
| CPPUNIT_ASSERT(output[3]==13); |
| } |
| void Ptr2Test::ptrun1() |
| { |
| int array [3] = { 1, 2, 3 }; |
| |
| int* p = find_if((int*)array, (int*)array + 3, pointer_to_unary_function<int, bool>(even)); |
| CPPUNIT_ASSERT(p != array+3); |
| CPPUNIT_ASSERT(*p==2); |
| } |
| void Ptr2Test::ptrun2() |
| { |
| int array [3] = { 1, 2, 3 }; |
| |
| int* p = find_if((int*)array, (int*)array + 3, ptr_fun(even)); |
| CPPUNIT_ASSERT(p != array+3); |
| CPPUNIT_ASSERT(*p==2); |
| } |