1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <algorithm> 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "cppunit/cppunit_proxy.h" 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing namespace std; 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// TestCase class 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass UniqueTest : public CPPUNIT_NS::TestCase 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen{ 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_TEST_SUITE(UniqueTest); 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_TEST(uniqcpy1); 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_TEST(uniqcpy2); 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_TEST(unique1); 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_TEST(unique2); 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_TEST_SUITE_END(); 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenprotected: 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void uniqcpy1(); 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void uniqcpy2(); 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void unique1(); 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void unique2(); 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenCPPUNIT_TEST_SUITE_REGISTRATION(UniqueTest); 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstatic bool str_equal(const char* a_, const char* b_) 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen{ return *a_ == *b_; } 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// tests implementation 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid UniqueTest::unique1() 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen{ 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int numbers[8] = { 0, 1, 1, 2, 2, 2, 3, 4 }; 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen unique((int*)numbers, (int*)numbers + 8); 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // 0 1 2 3 4 2 3 4 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(numbers[0]==0); 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(numbers[1]==1); 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(numbers[2]==2); 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(numbers[3]==3); 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(numbers[4]==4); 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(numbers[5]==2); 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(numbers[6]==3); 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(numbers[7]==4); 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid UniqueTest::unique2() 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen{ 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* labels[] = {"Q", "Q", "W", "W", "E", "E", "R", "T", "T", "Y", "Y"}; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const unsigned count = sizeof(labels) / sizeof(labels[0]); 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen unique((const char**)labels, (const char**)labels + count, str_equal); 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // QWERTY 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*labels[0] == 'Q'); 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*labels[1] == 'W'); 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*labels[2] == 'E'); 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*labels[3] == 'R'); 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*labels[4] == 'T'); 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*labels[5] == 'Y'); 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid UniqueTest::uniqcpy1() 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen{ 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int numbers[8] = { 0, 1, 1, 2, 2, 2, 3, 4 }; 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int result[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen unique_copy((int*)numbers, (int*)numbers + 8, (int*)result); 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // 0 1 2 3 4 0 0 0 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(result[0]==0); 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(result[1]==1); 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(result[2]==2); 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(result[3]==3); 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(result[4]==4); 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(result[5]==0); 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(result[6]==0); 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(result[7]==0); 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid UniqueTest::uniqcpy2() 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen{ 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* labels[] = {"Q", "Q", "W", "W", "E", "E", "R", "T", "T", "Y", "Y"}; 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char **plabels = (const char**)labels; 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const size_t count = sizeof(labels) / sizeof(labels[0]); 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* uCopy[count]; 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char **puCopy = &uCopy[0]; 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen fill(puCopy, puCopy + count, ""); 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen unique_copy(plabels, plabels + count, puCopy, str_equal); 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen //QWERTY 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*uCopy[0] == 'Q'); 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*uCopy[1] == 'W'); 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*uCopy[2] == 'E'); 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*uCopy[3] == 'R'); 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*uCopy[4] == 'T'); 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CPPUNIT_ASSERT(*uCopy[5] == 'Y'); 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen