Home | History | Annotate | Download | only in unit
      1 #include <numeric>
      2 #include <vector>
      3 #include <algorithm>
      4 
      5 #include "iota.h"
      6 #include "cppunit/cppunit_proxy.h"
      7 
      8 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
      9 using namespace std;
     10 #endif
     11 
     12 //
     13 // TestCase class
     14 //
     15 class RotateTest : public CPPUNIT_NS::TestCase
     16 {
     17   CPPUNIT_TEST_SUITE(RotateTest);
     18   CPPUNIT_TEST(rotate0);
     19   CPPUNIT_TEST(rotate1);
     20   CPPUNIT_TEST(rotcopy0);
     21   CPPUNIT_TEST(rotcopy1);
     22   CPPUNIT_TEST_SUITE_END();
     23 
     24 protected:
     25   void rotate0();
     26   void rotate1();
     27   void rotcopy0();
     28   void rotcopy1();
     29 };
     30 
     31 CPPUNIT_TEST_SUITE_REGISTRATION(RotateTest);
     32 
     33 //
     34 // tests implementation
     35 //
     36 void RotateTest::rotate0()
     37 {
     38   int numbers[6] = { 0, 1, 2, 3, 4, 5 };
     39   // 3 4 5 0 1 2
     40   rotate((int*)numbers, numbers + 3, numbers + 6);
     41   CPPUNIT_ASSERT(numbers[0]==3);
     42   CPPUNIT_ASSERT(numbers[1]==4);
     43   CPPUNIT_ASSERT(numbers[2]==5);
     44   CPPUNIT_ASSERT(numbers[3]==0);
     45   CPPUNIT_ASSERT(numbers[4]==1);
     46   CPPUNIT_ASSERT(numbers[5]==2);
     47 }
     48 void RotateTest::rotate1()
     49 {
     50   vector <int> v1(10);
     51   __iota(v1.begin(), v1.end(), 0);
     52 
     53   rotate(v1.begin(), v1.begin()+1, v1.end());
     54   CPPUNIT_ASSERT(v1[0]==1);
     55   CPPUNIT_ASSERT(v1[1]==2);
     56   CPPUNIT_ASSERT(v1[2]==3);
     57   CPPUNIT_ASSERT(v1[3]==4);
     58   CPPUNIT_ASSERT(v1[4]==5);
     59   CPPUNIT_ASSERT(v1[5]==6);
     60   CPPUNIT_ASSERT(v1[6]==7);
     61   CPPUNIT_ASSERT(v1[7]==8);
     62   CPPUNIT_ASSERT(v1[8]==9);
     63   CPPUNIT_ASSERT(v1[9]==0);
     64 
     65   rotate(v1.begin(), v1.begin()+2, v1.end());
     66   CPPUNIT_ASSERT(v1[0]==3);
     67   CPPUNIT_ASSERT(v1[1]==4);
     68   CPPUNIT_ASSERT(v1[2]==5);
     69   CPPUNIT_ASSERT(v1[3]==6);
     70   CPPUNIT_ASSERT(v1[4]==7);
     71   CPPUNIT_ASSERT(v1[5]==8);
     72   CPPUNIT_ASSERT(v1[6]==9);
     73   CPPUNIT_ASSERT(v1[7]==0);
     74   CPPUNIT_ASSERT(v1[8]==1);
     75   CPPUNIT_ASSERT(v1[9]==2);
     76 
     77   rotate(v1.begin(), v1.begin()+7, v1.end());
     78   CPPUNIT_ASSERT(v1[0]==0);
     79   CPPUNIT_ASSERT(v1[1]==1);
     80   CPPUNIT_ASSERT(v1[2]==2);
     81   CPPUNIT_ASSERT(v1[3]==3);
     82   CPPUNIT_ASSERT(v1[4]==4);
     83   CPPUNIT_ASSERT(v1[5]==5);
     84   CPPUNIT_ASSERT(v1[6]==6);
     85   CPPUNIT_ASSERT(v1[7]==7);
     86   CPPUNIT_ASSERT(v1[8]==8);
     87   CPPUNIT_ASSERT(v1[9]==9);
     88 
     89 }
     90 void RotateTest::rotcopy0()
     91 {
     92   int numbers[6] = { 0, 1, 2, 3, 4, 5 };
     93 
     94   int result[6];
     95   rotate_copy((int*)numbers, (int*)numbers + 3, (int*)numbers + 6, (int*)result);
     96   // 3 4 5 0 1 2
     97   CPPUNIT_ASSERT(result[0]==3);
     98   CPPUNIT_ASSERT(result[1]==4);
     99   CPPUNIT_ASSERT(result[2]==5);
    100   CPPUNIT_ASSERT(result[3]==0);
    101   CPPUNIT_ASSERT(result[4]==1);
    102   CPPUNIT_ASSERT(result[5]==2);
    103 }
    104 void RotateTest::rotcopy1()
    105 {
    106   vector <int> v1(10);
    107   __iota(v1.begin(), v1.end(), 0);
    108   vector <int> v2(v1.size());
    109 
    110   rotate_copy(v1.begin(), v1.begin()+1, v1.end(), v2.begin());
    111   CPPUNIT_ASSERT(v2[0]==1);
    112   CPPUNIT_ASSERT(v2[1]==2);
    113   CPPUNIT_ASSERT(v2[2]==3);
    114   CPPUNIT_ASSERT(v2[3]==4);
    115   CPPUNIT_ASSERT(v2[4]==5);
    116   CPPUNIT_ASSERT(v2[5]==6);
    117   CPPUNIT_ASSERT(v2[6]==7);
    118   CPPUNIT_ASSERT(v2[7]==8);
    119   CPPUNIT_ASSERT(v2[8]==9);
    120   CPPUNIT_ASSERT(v2[9]==0);
    121 
    122   rotate_copy(v1.begin(), v1.begin()+3, v1.end(), v2.begin());
    123   CPPUNIT_ASSERT(v2[0]==3);
    124   CPPUNIT_ASSERT(v2[1]==4);
    125   CPPUNIT_ASSERT(v2[2]==5);
    126   CPPUNIT_ASSERT(v2[3]==6);
    127   CPPUNIT_ASSERT(v2[4]==7);
    128   CPPUNIT_ASSERT(v2[5]==8);
    129   CPPUNIT_ASSERT(v2[6]==9);
    130   CPPUNIT_ASSERT(v2[7]==0);
    131   CPPUNIT_ASSERT(v2[8]==1);
    132   CPPUNIT_ASSERT(v2[9]==2);
    133 }
    134