1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <vector>
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "unary.h"
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <algorithm>
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h"
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std;
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass UnaryTest : public CPPUNIT_NS::TestCase
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE(UnaryTest);
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined (_STLP_NO_EXTENSIONS)
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_IGNORE;
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(ucompos1);
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(ucompos2);
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_STOP_IGNORE;
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(unegate1);
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(unegate2);
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_IGNORE;
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(unegate3);
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE_END();
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected:
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void ucompos1();
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void ucompos2();
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void unegate1();
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void unegate2();
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void unegate3();
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(UnaryTest);
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid UnaryTest::unegate1()
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int array [3] = { 1, 2, 3 };
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //unary_negate<odd>::argument_type arg_val = 0;
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int* p = find_if((int*)array, (int*)array + 3, unary_negate<odd>(odd()));
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT((p != array + 3));
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(*p==2);
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid UnaryTest::unegate2()
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int array [3] = { 1, 2, 3 };
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int* p = find_if((int*)array, (int*)array + 3, not1(odd()));
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(p != array + 3);
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(*p==2);
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottbool test_func(int param) {
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return param < 3;
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid UnaryTest::unegate3()
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int array [3] = { 1, 2, 3 };
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int* p = find_if((int*)array, (int*)array + 3, not1(ptr_fun(test_func)));
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(p != array + 3);
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(*p==3);
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid UnaryTest::ucompos1()
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int input [3] = { -1, -4, -16 };
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  double output[3];
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  transform((int*)input, (int*)input + 3, output, unary_compose<square_root, negate<int> >(square_root(), negate<int>()));
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(output[0]==1);
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(output[1]==2);
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(output[2]==4);
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid UnaryTest::ucompos2()
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int input [3] = { -1, -4, -16 };
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  double output [3];
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  transform((int*)input, (int*)input + 3, output, compose1(square_root(), negate<int>()));
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(output[0]==1);
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(output[1]==2);
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(output[2]==4);
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
99