#include <vector>
#include "unary.h"
#include <algorithm>
#include "cppunit/cppunit_proxy.h"
#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
using namespace std;
#endif
//
// TestCase class
//
class UnaryTest : public CPPUNIT_NS::TestCase
{
CPPUNIT_TEST_SUITE(UnaryTest);
#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS)
CPPUNIT_IGNORE;
#endif
CPPUNIT_TEST(ucompos1);
CPPUNIT_TEST(ucompos2);
CPPUNIT_STOP_IGNORE;
CPPUNIT_TEST(unegate1);
CPPUNIT_TEST(unegate2);
#if defined (STLPORT) && !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
CPPUNIT_IGNORE;
#endif
CPPUNIT_TEST(unegate3);
CPPUNIT_TEST_SUITE_END();
protected:
void ucompos1();
void ucompos2();
void unegate1();
void unegate2();
void unegate3();
};
CPPUNIT_TEST_SUITE_REGISTRATION(UnaryTest);
//
// tests implementation
//
void UnaryTest::unegate1()
{
int array [3] = { 1, 2, 3 };
//unary_negate<odd>::argument_type arg_val = 0;
int* p = find_if((int*)array, (int*)array + 3, unary_negate<odd>(odd()));
CPPUNIT_ASSERT((p != array + 3));
CPPUNIT_ASSERT(*p==2);
}
void UnaryTest::unegate2()
{
int array [3] = { 1, 2, 3 };
int* p = find_if((int*)array, (int*)array + 3, not1(odd()));
CPPUNIT_ASSERT(p != array + 3);
CPPUNIT_ASSERT(*p==2);
}
bool test_func(int param) {
return param < 3;
}
void UnaryTest::unegate3()
{
#if !defined (STLPORT) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
int array [3] = { 1, 2, 3 };
int* p = find_if((int*)array, (int*)array + 3, not1(ptr_fun(test_func)));
CPPUNIT_ASSERT(p != array + 3);
CPPUNIT_ASSERT(*p==3);
#endif
}
void UnaryTest::ucompos1()
{
#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
int input [3] = { -1, -4, -16 };
double output[3];
transform((int*)input, (int*)input + 3, output, unary_compose<square_root, negate<int> >(square_root(), negate<int>()));
CPPUNIT_ASSERT(output[0]==1);
CPPUNIT_ASSERT(output[1]==2);
CPPUNIT_ASSERT(output[2]==4);
#endif
}
void UnaryTest::ucompos2()
{
#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
int input [3] = { -1, -4, -16 };
double output [3];
transform((int*)input, (int*)input + 3, output, compose1(square_root(), negate<int>()));
CPPUNIT_ASSERT(output[0]==1);
CPPUNIT_ASSERT(output[1]==2);
CPPUNIT_ASSERT(output[2]==4);
#endif
}