genericopenlibs/cppstdlib/stl/test/unit/perm_test.cpp
changeset 0 e4d67989cc36
child 18 47c74d1534e1
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 #include <vector>
       
     2 #include <algorithm>
       
     3 #include <numeric>
       
     4 #include <iterator>
       
     5 #include <functional>
       
     6 
       
     7 #include "iota.h"
       
     8 #include "cppunit/cppunit_proxy.h"
       
     9 
       
    10 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
       
    11 using namespace std;
       
    12 #endif
       
    13 
       
    14 //
       
    15 // TestCase class
       
    16 //
       
    17 class PermTest : public CPPUNIT_NS::TestCase
       
    18 {
       
    19   CPPUNIT_TEST_SUITE(PermTest);
       
    20   CPPUNIT_TEST(nextprm0);
       
    21   CPPUNIT_TEST(nextprm1);
       
    22   CPPUNIT_TEST(nextprm2);
       
    23   CPPUNIT_TEST(prevprm0);
       
    24   CPPUNIT_TEST(prevprm1);
       
    25   CPPUNIT_TEST(prevprm2);
       
    26   CPPUNIT_TEST_SUITE_END();
       
    27 
       
    28 protected:
       
    29   void nextprm0();
       
    30   void nextprm1();
       
    31   void nextprm2();
       
    32   void prevprm0();
       
    33   void prevprm1();
       
    34   void prevprm2();
       
    35 };
       
    36 
       
    37 CPPUNIT_TEST_SUITE_REGISTRATION(PermTest);
       
    38 
       
    39 //
       
    40 // tests implementation
       
    41 //
       
    42 void PermTest::prevprm0()
       
    43 {
       
    44   int v1[3] = { 0, 1, 2 };
       
    45   prev_permutation(v1, v1 + 3);
       
    46 
       
    47   CPPUNIT_ASSERT(v1[0]==2);
       
    48   CPPUNIT_ASSERT(v1[1]==1);
       
    49   CPPUNIT_ASSERT(v1[2]==0);
       
    50 }
       
    51 void PermTest::prevprm1()
       
    52 {
       
    53   vector <int> v1(3);
       
    54   __iota(v1.begin(), v1.end(), 0);
       
    55 
       
    56   prev_permutation(v1.begin(), v1.end());
       
    57   CPPUNIT_ASSERT(v1[0]==2);
       
    58   CPPUNIT_ASSERT(v1[1]==1);
       
    59   CPPUNIT_ASSERT(v1[2]==0);
       
    60   prev_permutation(v1.begin(), v1.end());
       
    61   CPPUNIT_ASSERT(v1[0]==2);
       
    62   CPPUNIT_ASSERT(v1[1]==0);
       
    63   CPPUNIT_ASSERT(v1[2]==1);
       
    64   prev_permutation(v1.begin(), v1.end());
       
    65   CPPUNIT_ASSERT(v1[0]==1);
       
    66   CPPUNIT_ASSERT(v1[1]==2);
       
    67   CPPUNIT_ASSERT(v1[2]==0);
       
    68   prev_permutation(v1.begin(), v1.end());
       
    69   CPPUNIT_ASSERT(v1[0]==1);
       
    70   CPPUNIT_ASSERT(v1[1]==0);
       
    71   CPPUNIT_ASSERT(v1[2]==2);
       
    72   prev_permutation(v1.begin(), v1.end());
       
    73   CPPUNIT_ASSERT(v1[0]==0);
       
    74   CPPUNIT_ASSERT(v1[1]==2);//
       
    75   CPPUNIT_ASSERT(v1[2]==1);
       
    76   prev_permutation(v1.begin(), v1.end());
       
    77   CPPUNIT_ASSERT(v1[0]==0);
       
    78   CPPUNIT_ASSERT(v1[1]==1);
       
    79   CPPUNIT_ASSERT(v1[2]==2);
       
    80   prev_permutation(v1.begin(), v1.end());
       
    81   CPPUNIT_ASSERT(v1[0]==2);
       
    82   CPPUNIT_ASSERT(v1[1]==1);
       
    83   CPPUNIT_ASSERT(v1[2]==0);
       
    84   prev_permutation(v1.begin(), v1.end());
       
    85   CPPUNIT_ASSERT(v1[0]==2);
       
    86   CPPUNIT_ASSERT(v1[1]==0);
       
    87   CPPUNIT_ASSERT(v1[2]==1);
       
    88   prev_permutation(v1.begin(), v1.end());
       
    89   CPPUNIT_ASSERT(v1[0]==1);
       
    90   CPPUNIT_ASSERT(v1[1]==2);
       
    91   CPPUNIT_ASSERT(v1[2]==0);
       
    92 }
       
    93 void PermTest::prevprm2()
       
    94 {
       
    95   vector <int> v1(3);
       
    96   __iota(v1.begin(), v1.end(), 0);
       
    97 
       
    98   prev_permutation(v1.begin(), v1.end(), greater<int>());
       
    99   CPPUNIT_ASSERT(v1[0]==0);
       
   100   CPPUNIT_ASSERT(v1[1]==2);
       
   101   CPPUNIT_ASSERT(v1[2]==1);
       
   102   prev_permutation(v1.begin(), v1.end(), greater<int>());
       
   103   CPPUNIT_ASSERT(v1[0]==1);
       
   104   CPPUNIT_ASSERT(v1[1]==0);
       
   105   CPPUNIT_ASSERT(v1[2]==2);
       
   106   prev_permutation(v1.begin(), v1.end(), greater<int>());
       
   107   CPPUNIT_ASSERT(v1[0]==1);
       
   108   CPPUNIT_ASSERT(v1[1]==2);
       
   109   CPPUNIT_ASSERT(v1[2]==0);
       
   110   prev_permutation(v1.begin(), v1.end(), greater<int>());
       
   111   CPPUNIT_ASSERT(v1[0]==2);
       
   112   CPPUNIT_ASSERT(v1[1]==0);
       
   113   CPPUNIT_ASSERT(v1[2]==1);
       
   114   prev_permutation(v1.begin(), v1.end(), greater<int>());
       
   115   CPPUNIT_ASSERT(v1[0]==2);
       
   116   CPPUNIT_ASSERT(v1[1]==1);
       
   117   CPPUNIT_ASSERT(v1[2]==0);
       
   118   prev_permutation(v1.begin(), v1.end(), greater<int>());
       
   119   CPPUNIT_ASSERT(v1[0]==0);
       
   120   CPPUNIT_ASSERT(v1[1]==1);
       
   121   CPPUNIT_ASSERT(v1[2]==2);
       
   122   prev_permutation(v1.begin(), v1.end(), greater<int>());
       
   123   CPPUNIT_ASSERT(v1[0]==0);
       
   124   CPPUNIT_ASSERT(v1[1]==2);
       
   125   CPPUNIT_ASSERT(v1[2]==1);
       
   126   prev_permutation(v1.begin(), v1.end(), greater<int>());
       
   127   CPPUNIT_ASSERT(v1[0]==1);
       
   128   CPPUNIT_ASSERT(v1[1]==0);
       
   129   CPPUNIT_ASSERT(v1[2]==2);
       
   130   prev_permutation(v1.begin(), v1.end(), greater<int>());
       
   131   CPPUNIT_ASSERT(v1[0]==1);
       
   132   CPPUNIT_ASSERT(v1[1]==2);
       
   133   CPPUNIT_ASSERT(v1[2]==0);
       
   134 }
       
   135 void PermTest::nextprm0()
       
   136 {
       
   137   int v1[3] = { 0, 1, 2 };
       
   138   next_permutation(v1, v1 + 3);
       
   139 
       
   140   CPPUNIT_ASSERT(v1[0]==0);
       
   141   CPPUNIT_ASSERT(v1[1]==2);
       
   142   CPPUNIT_ASSERT(v1[2]==1);
       
   143 }
       
   144 void PermTest::nextprm1()
       
   145 {
       
   146   vector <int> v1(3);
       
   147   __iota(v1.begin(), v1.end(), 0);
       
   148 
       
   149   next_permutation(v1.begin(), v1.end());
       
   150   CPPUNIT_ASSERT(v1[0]==0);
       
   151   CPPUNIT_ASSERT(v1[1]==2);
       
   152   CPPUNIT_ASSERT(v1[2]==1);
       
   153   next_permutation(v1.begin(), v1.end());
       
   154   CPPUNIT_ASSERT(v1[0]==1);
       
   155   CPPUNIT_ASSERT(v1[1]==0);
       
   156   CPPUNIT_ASSERT(v1[2]==2);
       
   157   next_permutation(v1.begin(), v1.end());
       
   158   CPPUNIT_ASSERT(v1[0]==1);
       
   159   CPPUNIT_ASSERT(v1[1]==2);
       
   160   CPPUNIT_ASSERT(v1[2]==0);
       
   161   next_permutation(v1.begin(), v1.end());
       
   162   CPPUNIT_ASSERT(v1[0]==2);
       
   163   CPPUNIT_ASSERT(v1[1]==0);
       
   164   CPPUNIT_ASSERT(v1[2]==1);
       
   165   next_permutation(v1.begin(), v1.end());
       
   166   CPPUNIT_ASSERT(v1[0]==2);
       
   167   CPPUNIT_ASSERT(v1[1]==1);
       
   168   CPPUNIT_ASSERT(v1[2]==0);
       
   169   next_permutation(v1.begin(), v1.end());
       
   170   CPPUNIT_ASSERT(v1[0]==0);
       
   171   CPPUNIT_ASSERT(v1[1]==1);
       
   172   CPPUNIT_ASSERT(v1[2]==2);
       
   173   next_permutation(v1.begin(), v1.end());
       
   174   CPPUNIT_ASSERT(v1[0]==0);
       
   175   CPPUNIT_ASSERT(v1[1]==2);
       
   176   CPPUNIT_ASSERT(v1[2]==1);
       
   177   next_permutation(v1.begin(), v1.end());
       
   178   CPPUNIT_ASSERT(v1[0]==1);
       
   179   CPPUNIT_ASSERT(v1[1]==0);
       
   180   CPPUNIT_ASSERT(v1[2]==2);
       
   181   next_permutation(v1.begin(), v1.end());
       
   182   CPPUNIT_ASSERT(v1[0]==1);
       
   183   CPPUNIT_ASSERT(v1[1]==2);
       
   184   CPPUNIT_ASSERT(v1[2]==0);
       
   185 }
       
   186 void PermTest::nextprm2()
       
   187 {
       
   188   vector <char> v1(3);
       
   189   __iota(v1.begin(), v1.end(), 'A');
       
   190 
       
   191   next_permutation(v1.begin(), v1.end(), less<char>());
       
   192   CPPUNIT_ASSERT(v1[0]=='A');
       
   193   CPPUNIT_ASSERT(v1[1]=='C');
       
   194   CPPUNIT_ASSERT(v1[2]=='B');
       
   195   next_permutation(v1.begin(), v1.end(), less<char>());
       
   196   CPPUNIT_ASSERT(v1[0]=='B');
       
   197   CPPUNIT_ASSERT(v1[1]=='A');
       
   198   CPPUNIT_ASSERT(v1[2]=='C');
       
   199   next_permutation(v1.begin(), v1.end(), less<char>());
       
   200   CPPUNIT_ASSERT(v1[0]=='B');
       
   201   CPPUNIT_ASSERT(v1[1]=='C');
       
   202   CPPUNIT_ASSERT(v1[2]=='A');
       
   203   next_permutation(v1.begin(), v1.end(), less<char>());
       
   204   CPPUNIT_ASSERT(v1[0]=='C');
       
   205   CPPUNIT_ASSERT(v1[1]=='A');
       
   206   CPPUNIT_ASSERT(v1[2]=='B');
       
   207   next_permutation(v1.begin(), v1.end(), less<char>());
       
   208   CPPUNIT_ASSERT(v1[0]=='C');
       
   209   CPPUNIT_ASSERT(v1[1]=='B');
       
   210   CPPUNIT_ASSERT(v1[2]=='A');
       
   211   next_permutation(v1.begin(), v1.end(), less<char>());
       
   212   CPPUNIT_ASSERT(v1[0]=='A');
       
   213   CPPUNIT_ASSERT(v1[1]=='B');
       
   214   CPPUNIT_ASSERT(v1[2]=='C');
       
   215   next_permutation(v1.begin(), v1.end(), less<char>());
       
   216   CPPUNIT_ASSERT(v1[0]=='A');
       
   217   CPPUNIT_ASSERT(v1[1]=='C');
       
   218   CPPUNIT_ASSERT(v1[2]=='B');
       
   219   next_permutation(v1.begin(), v1.end(), less<char>());
       
   220   CPPUNIT_ASSERT(v1[0]=='B');
       
   221   CPPUNIT_ASSERT(v1[1]=='A');
       
   222   CPPUNIT_ASSERT(v1[2]=='C');
       
   223   next_permutation(v1.begin(), v1.end(), less<char>());
       
   224   CPPUNIT_ASSERT(v1[0]=='B');
       
   225   CPPUNIT_ASSERT(v1[1]=='C');
       
   226   CPPUNIT_ASSERT(v1[2]=='A');
       
   227 
       
   228 }