177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <vector> 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <algorithm> 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include "cppunit/cppunit_proxy.h" 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing namespace std; 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// TestCase class 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass MinTest : public CPPUNIT_NS::TestCase 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST_SUITE(MinTest); 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(min1); 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(min2); 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(minelem1); 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST(minelem2); 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_TEST_SUITE_END(); 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected: 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void min1(); 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void min2(); 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void minelem1(); 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void minelem2(); 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static bool str_compare(const char* a_, const char* b_) 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { return strcmp(a_, b_) < 0 ? 1 : 0; } 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(MinTest); 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// tests implementation 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid MinTest::min1() 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int r = min(42, 100); 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( r == 42 ); 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner r = min(--r, r); 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT( r == 41 ); 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid MinTest::min2() 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char* r = min((const char*)"shoe", (const char*)"shine", str_compare); 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(!strcmp(r, "shine")); 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid MinTest::minelem1() 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int numbers[6] = { -10, 15, -100, 36, -242, 42 }; 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner int* r = min_element((int*)numbers, (int*)numbers + 6); 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(*r==-242); 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid MinTest::minelem2() 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char* names[] = { "Brett", "Graham", "Jack", "Mike", "Todd" }; 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const unsigned namesCt = sizeof(names) / sizeof(names[0]); 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const char** r = min_element((const char**)names, (const char**)names + namesCt, str_compare); 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner CPPUNIT_ASSERT(!strcmp(*r, "Brett")); 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 63