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