os/ossrv/genericopenlibs/cppstdlib/stl/test/unit/rm_cp_test.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     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 }