1a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <algorithm> 2a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <cstring> 3a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <vector> 4a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <iterator> 5a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 6a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include "cppunit/cppunit_proxy.h" 7a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 8a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 9a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerusing namespace std; 10a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 11a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 12a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 13a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// TestCase class 14a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 15a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass CopyTest : public CPPUNIT_NS::TestCase 16a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 17a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST_SUITE(CopyTest); 18a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(copy_array); 19a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(copy_volatile); 20a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(copy_vector); 21a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(copy_insert); 22a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(copy_back); 23a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(copy_back_array); 24a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST_SUITE_END(); 25a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 26a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerprotected: 27a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void copy_array(); 28a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void copy_volatile(); 29a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void copy_vector(); 30a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void copy_insert(); 31a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void copy_back(); 32a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void copy_back_array(); 33a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 34a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 35a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(CopyTest); 36a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 37a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 38a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// tests implementation 39a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 40a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid CopyTest::copy_array() 41a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 42a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner char string[23] = "A string to be copied."; 43a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner char result[23]; 44a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner copy(string, string + 23, result); 45a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(!strncmp(string, result, 23)); 46a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 47a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 48a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid CopyTest::copy_volatile() 49a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 50a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 51a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int a[] = {0, 1, 2, 3, 4, 5}; 52a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const size_t size = sizeof(a) / sizeof(a[0]); 53a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner volatile int va[size]; 54a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner copy(a, a + size, va); 55a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (size_t i = 0; i != size; ++i) { 56a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( a[i] == va[i] ); 57a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 58a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 59a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 60a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 61a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const int a[] = {0, 1, 2, 3, 4, 5}; 62a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const size_t size = sizeof(a) / sizeof(a[0]); 63a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner volatile int va[size]; 64a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner copy(a, a + size, va); 65a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (size_t i = 0; i != size; ++i) { 66a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( a[i] == va[i] ); 67a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 68a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 69a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 70a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner // Following code can be activated to check that it doesn't compiled 71a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if 0 72a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 73a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int a[] = {0, 1, 2, 3, 4, 5}; 74a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const size_t size = sizeof(a) / sizeof(a[0]); 75a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const volatile int va[size] = {5, 4, 3, 2, 1, 0}; 76a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner copy(a, a + size, va); 77a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (size_t i = 0; i != size; ++i) { 78a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( a[i] == va[i] ); 79a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 80a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 81a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 82a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 83a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 84a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid CopyTest::copy_vector() 85a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 86a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner vector<int> v1(10); 87a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (int i = 0; (size_t)i < v1.size(); ++i) 88a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner v1[i] = i; 89a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 90a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner vector<int> v2(v1.size()); 91a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner copy(v1.begin(), v1.end(), v2.begin()); 92a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 93a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( v2 == v1 ); 94a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 95a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 96a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid CopyTest::copy_insert() { 97a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner vector<int> v1(10); 98a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (int loc = 0; (size_t)loc < v1.size(); ++loc) 99a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner v1[loc] = loc; 100a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner vector<int> v2; 101a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner insert_iterator<vector<int> > i(v2, v2.begin()); 102a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner copy(v1.begin(), v1.end(), i); 103a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 104a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( v2 == v1 ); 105a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 106a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 107a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid CopyTest::copy_back() 108a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 109a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner vector<int> v1(10); 110a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (int i = 0; (size_t)i < v1.size(); ++i) 111a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner v1[i] = i; 112a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner vector<int> v2(v1.size()); 113a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner copy_backward(v1.begin(), v1.end(), v2.end()); 114a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 115a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( v2 == v1 ); 116a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 117a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 118a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid CopyTest::copy_back_array() 119a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 120a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int numbers[5] = { 1, 2, 3, 4, 5 }; 121a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 122a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int result[5]; 123a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner copy_backward(numbers, numbers + 5, (int*)result + 5); 124a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(result[0]==numbers[0]); 125a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(result[1]==numbers[1]); 126a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(result[2]==numbers[2]); 127a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(result[3]==numbers[3]); 128a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(result[4]==numbers[4]); 129a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 130