genericopenlibs/cppstdlib/stl/test/unit/rm_cp_test.cpp
changeset 0 e4d67989cc36
child 18 47c74d1534e1
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 #include <vector>
       
     2 #include <algorithm>
       
     3 
       
     4 #include "cppunit/cppunit_proxy.h"
       
     5 
       
     6 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
       
     7 using namespace std;
       
     8 #endif
       
     9 
       
    10 //
       
    11 // TestCase class
       
    12 //
       
    13 class RmCpTest : public CPPUNIT_NS::TestCase
       
    14 {
       
    15   CPPUNIT_TEST_SUITE(RmCpTest);
       
    16   CPPUNIT_TEST(remcopy1);
       
    17   CPPUNIT_TEST(remcpif1);
       
    18   CPPUNIT_TEST(remif1);
       
    19   CPPUNIT_TEST(remove1);
       
    20   CPPUNIT_TEST(repcpif1);
       
    21   CPPUNIT_TEST(replace0);
       
    22   CPPUNIT_TEST(replace1);
       
    23   CPPUNIT_TEST(replcpy1);
       
    24   CPPUNIT_TEST(replif1);
       
    25   CPPUNIT_TEST(revcopy1);
       
    26   CPPUNIT_TEST(reverse1);
       
    27   CPPUNIT_TEST_SUITE_END();
       
    28 
       
    29 protected:
       
    30   void remcopy1();
       
    31   void remcpif1();
       
    32   void remif1();
       
    33   void remove1();
       
    34   void repcpif1();
       
    35   void replace0();
       
    36   void replace1();
       
    37   void replcpy1();
       
    38   void replif1();
       
    39   void revcopy1();
       
    40   void reverse1();
       
    41 
       
    42 };
       
    43 
       
    44 CPPUNIT_TEST_SUITE_REGISTRATION(RmCpTest);
       
    45 
       
    46 static bool odd(int a_)
       
    47 {
       
    48   return (a_ % 2) != 0;
       
    49 }
       
    50 //
       
    51 // tests implementation
       
    52 //
       
    53 
       
    54 void RmCpTest::reverse1()
       
    55 {
       
    56   int numbers[6] = { 0, 1, 2, 3, 4, 5 };
       
    57 
       
    58   reverse(numbers, numbers + 6);
       
    59   CPPUNIT_ASSERT(numbers[0]==5);
       
    60   CPPUNIT_ASSERT(numbers[1]==4);
       
    61   CPPUNIT_ASSERT(numbers[2]==3);
       
    62   CPPUNIT_ASSERT(numbers[3]==2);
       
    63   CPPUNIT_ASSERT(numbers[4]==1);
       
    64   CPPUNIT_ASSERT(numbers[5]==0);
       
    65 }
       
    66 
       
    67 void RmCpTest::revcopy1()
       
    68 {
       
    69   int numbers[6] = { 0, 1, 2, 3, 4, 5 };
       
    70 
       
    71   int result[6];
       
    72   reverse_copy((int*)numbers, (int*)numbers + 6, (int*)result);
       
    73   // 5 4 3 2 1 0
       
    74   CPPUNIT_ASSERT(result[0]==5);
       
    75   CPPUNIT_ASSERT(result[1]==4);
       
    76   CPPUNIT_ASSERT(result[2]==3);
       
    77   CPPUNIT_ASSERT(result[3]==2);
       
    78   CPPUNIT_ASSERT(result[4]==1);
       
    79   CPPUNIT_ASSERT(result[5]==0);
       
    80 }
       
    81 
       
    82 void RmCpTest::replif1()
       
    83 {
       
    84   vector <int> v1(10);
       
    85   for (int i = 0; (size_t)i < v1.size(); ++i)
       
    86     v1[i] = i % 5;
       
    87 
       
    88   replace_if(v1.begin(), v1.end(), odd, 42);
       
    89 
       
    90   // 0 42 2 42 4 0 42 2 42 4
       
    91   CPPUNIT_ASSERT(v1[0]==0);
       
    92   CPPUNIT_ASSERT(v1[1]==42);
       
    93   CPPUNIT_ASSERT(v1[2]==2);
       
    94   CPPUNIT_ASSERT(v1[3]==42);
       
    95   CPPUNIT_ASSERT(v1[4]==4);
       
    96   CPPUNIT_ASSERT(v1[5]==0);
       
    97   CPPUNIT_ASSERT(v1[6]==42);
       
    98   CPPUNIT_ASSERT(v1[7]==2);
       
    99   CPPUNIT_ASSERT(v1[8]==42);
       
   100   CPPUNIT_ASSERT(v1[9]==4);
       
   101 }
       
   102 
       
   103 void RmCpTest::replcpy1()
       
   104 {
       
   105   int numbers[6] = { 0, 1, 2, 0, 1, 2 };
       
   106   int result[6] = { 0, 0, 0, 0, 0, 0 };
       
   107 
       
   108   replace_copy((int*)numbers, (int*)numbers + 6, (int*)result, 2, 42);
       
   109   CPPUNIT_ASSERT(result[0]==0);
       
   110   CPPUNIT_ASSERT(result[1]==1);
       
   111   CPPUNIT_ASSERT(result[2]==42);
       
   112   CPPUNIT_ASSERT(result[3]==0);
       
   113   CPPUNIT_ASSERT(result[4]==1);
       
   114   CPPUNIT_ASSERT(result[5]==42);
       
   115 }
       
   116 
       
   117 void RmCpTest::replace0()
       
   118 {
       
   119   int numbers[6] = { 0, 1, 2, 0, 1, 2 };
       
   120 
       
   121   replace(numbers, numbers + 6, 2, 42);
       
   122 
       
   123   // 0 1 42 0 1 42
       
   124   CPPUNIT_ASSERT(numbers[0]==0);
       
   125   CPPUNIT_ASSERT(numbers[1]==1);
       
   126   CPPUNIT_ASSERT(numbers[2]==42);
       
   127   CPPUNIT_ASSERT(numbers[3]==0);
       
   128   CPPUNIT_ASSERT(numbers[4]==1);
       
   129   CPPUNIT_ASSERT(numbers[5]==42);
       
   130 }
       
   131 
       
   132 void RmCpTest::replace1()
       
   133 {
       
   134   vector <int> v1(10);
       
   135   for (int i = 0; (size_t)i < v1.size(); ++i)
       
   136     v1[i] = i % 5;
       
   137   replace(v1.begin(), v1.end(), 2, 42);
       
   138 
       
   139   // 0 1 2 3 4 0 1 2 3 4
       
   140   // 0 1 42 3 4 0 1 42 3 4
       
   141   CPPUNIT_ASSERT(v1[0]==0);
       
   142   CPPUNIT_ASSERT(v1[1]==1);
       
   143   CPPUNIT_ASSERT(v1[2]==42);
       
   144   CPPUNIT_ASSERT(v1[3]==3);
       
   145   CPPUNIT_ASSERT(v1[4]==4);
       
   146   CPPUNIT_ASSERT(v1[5]==0);
       
   147   CPPUNIT_ASSERT(v1[6]==1);
       
   148   CPPUNIT_ASSERT(v1[7]==42);
       
   149   CPPUNIT_ASSERT(v1[8]==3);
       
   150   CPPUNIT_ASSERT(v1[9]==4);
       
   151 }
       
   152 
       
   153 void RmCpTest::repcpif1()
       
   154 {
       
   155   vector <int> v1(10);
       
   156   for (int i = 0; (size_t)i < v1.size(); ++i)
       
   157     v1[i] = i % 5;
       
   158   vector <int> v2(v1.size());
       
   159 
       
   160   // 0 1 2 3 4 0 1 2 3 4
       
   161   // 0 1 2 3 4 0 1 2 3 4
       
   162   // 0 42 2 42 4 0 42 2 42 4
       
   163   replace_copy_if(v1.begin(), v1.end(), v2.begin(), odd, 42);
       
   164   CPPUNIT_ASSERT(v1[0]==0);
       
   165   CPPUNIT_ASSERT(v1[1]==1);
       
   166   CPPUNIT_ASSERT(v1[2]==2);
       
   167   CPPUNIT_ASSERT(v1[3]==3);
       
   168   CPPUNIT_ASSERT(v1[4]==4);
       
   169   CPPUNIT_ASSERT(v1[5]==0);
       
   170   CPPUNIT_ASSERT(v1[6]==1);
       
   171   CPPUNIT_ASSERT(v1[7]==2);
       
   172   CPPUNIT_ASSERT(v1[8]==3);
       
   173   CPPUNIT_ASSERT(v1[9]==4);
       
   174 
       
   175   CPPUNIT_ASSERT(v2[0]==0);
       
   176   CPPUNIT_ASSERT(v2[1]==42);
       
   177   CPPUNIT_ASSERT(v2[2]==2);
       
   178   CPPUNIT_ASSERT(v2[3]==42);
       
   179   CPPUNIT_ASSERT(v2[4]==4);
       
   180   CPPUNIT_ASSERT(v2[5]==0);
       
   181   CPPUNIT_ASSERT(v2[6]==42);
       
   182   CPPUNIT_ASSERT(v2[7]==2);
       
   183   CPPUNIT_ASSERT(v2[8]==42);
       
   184   CPPUNIT_ASSERT(v2[9]==4);
       
   185 }
       
   186 
       
   187 void RmCpTest::remove1()
       
   188 {
       
   189   int numbers[6] = { 1, 2, 3, 1, 2, 3 };
       
   190   remove((int*)numbers, (int*)numbers + 6, 1);
       
   191 
       
   192   // 2 3 2 3 2 3
       
   193   CPPUNIT_ASSERT(numbers[0]==2);
       
   194   CPPUNIT_ASSERT(numbers[1]==3);
       
   195   CPPUNIT_ASSERT(numbers[2]==2);
       
   196   CPPUNIT_ASSERT(numbers[3]==3);
       
   197   CPPUNIT_ASSERT(numbers[4]==2);
       
   198   CPPUNIT_ASSERT(numbers[5]==3);
       
   199 }
       
   200 
       
   201 void RmCpTest::remif1()
       
   202 {
       
   203   int numbers[6] = { 0, 0, 1, 1, 2, 2 };
       
   204 
       
   205   remove_if((int*)numbers, (int*)numbers + 6, odd);
       
   206 
       
   207   // 0 0 2 2 2 2
       
   208   CPPUNIT_ASSERT(numbers[0]==0);
       
   209   CPPUNIT_ASSERT(numbers[1]==0);
       
   210   CPPUNIT_ASSERT(numbers[2]==2);
       
   211   CPPUNIT_ASSERT(numbers[3]==2);
       
   212   CPPUNIT_ASSERT(numbers[4]==2);
       
   213   CPPUNIT_ASSERT(numbers[5]==2);
       
   214 }
       
   215 
       
   216 void RmCpTest::remcopy1()
       
   217 {
       
   218   int numbers[6] = { 1, 2, 3, 1, 2, 3 };
       
   219   int result[6] = { 0, 0, 0, 0, 0, 0 };
       
   220 
       
   221   remove_copy((int*)numbers, (int*)numbers + 6, (int*)result, 2);
       
   222 
       
   223   CPPUNIT_ASSERT(result[0]==1);
       
   224   CPPUNIT_ASSERT(result[1]==3);
       
   225   CPPUNIT_ASSERT(result[2]==1);
       
   226   CPPUNIT_ASSERT(result[3]==3);
       
   227   CPPUNIT_ASSERT(result[4]==0);
       
   228   CPPUNIT_ASSERT(result[5]==0);
       
   229 }
       
   230 
       
   231 void RmCpTest::remcpif1()
       
   232 {
       
   233   int numbers[6] = { 1, 2, 3, 1, 2, 3 };
       
   234   int result[6] = { 0, 0, 0, 0, 0, 0 };
       
   235 
       
   236   remove_copy_if((int*)numbers, (int*)numbers + 6, (int*)result, odd);
       
   237 
       
   238   // 2 2 0 0 0 0
       
   239   CPPUNIT_ASSERT(result[0]==2);
       
   240   CPPUNIT_ASSERT(result[1]==2);
       
   241   CPPUNIT_ASSERT(result[2]==0);
       
   242   CPPUNIT_ASSERT(result[3]==0);
       
   243   CPPUNIT_ASSERT(result[4]==0);
       
   244   CPPUNIT_ASSERT(result[5]==0);
       
   245 }