Home | History | Annotate | Download | only in unit
      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 }
    229