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