os/ossrv/genericopenlibs/cppstdlib/stl/test/unit/perm_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 #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 }