rotate_test.cpp revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
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)
9using namespace std;
10#endif
11
12//
13// TestCase class
14//
15class 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
24protected:
25  void rotate0();
26  void rotate1();
27  void rotcopy0();
28  void rotcopy1();
29};
30
31CPPUNIT_TEST_SUITE_REGISTRATION(RotateTest);
32
33//
34// tests implementation
35//
36void 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}
48void 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}
90void 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}
104void 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