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