1a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <vector> 2a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <algorithm> 3a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 4a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include "cppunit/cppunit_proxy.h" 5a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 6a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 7a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerusing namespace std; 8a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 9a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 10a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 11a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// TestCase class 12a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 13a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass MaxTest : public CPPUNIT_NS::TestCase 14a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 15a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST_SUITE(MaxTest); 16a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(max1); 17a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(max2); 18a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(maxelem1); 19a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(maxelem2); 20a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST_SUITE_END(); 21a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 22a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerprotected: 23a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void max1(); 24a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void max2(); 25a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void maxelem1(); 26a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void maxelem2(); 27a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 28a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner static bool str_compare(const char* a_, const char* b_) 29a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { return strcmp(a_, b_) < 0 ? 1 : 0; } 30a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 31a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 32a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(MaxTest); 33a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 34a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 35a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// tests implementation 36a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 37a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid MaxTest::max1() 38a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 39a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int r = max(42, 100); 40a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( r == 100 ); 41a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 42a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int t = max(++r, 0); 43a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT( t == 101 ); 44a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 45a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid MaxTest::max2() 46a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 47a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const char* r = max((const char*)"shoe", (const char*)"shine", str_compare); 48a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(!strcmp(r, "shoe")); 49a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 50a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid MaxTest::maxelem1() 51a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 52a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int numbers[6] = { 4, 10, 56, 11, -42, 19 }; 53a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 54a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int* r = max_element((int*)numbers, (int*)numbers + 6); 55a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*r==56); 56a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 57a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid MaxTest::maxelem2() 58a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 59a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const char* names[] = { "Brett", "Graham", "Jack", "Mike", "Todd" }; 60a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 61a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const unsigned namesCt = sizeof(names) / sizeof(names[0]); 62a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner const char** r = max_element((const char**)names, (const char**)names + namesCt, str_compare); 63a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(!strcmp(*r, "Todd")); 64a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 65