1#include <vector> 2#include <algorithm> 3#include <functional> 4 5#include "cppunit/cppunit_proxy.h" 6 7#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 8using namespace std; 9#endif 10 11// 12// TestCase class 13// 14class NthElemTest : public CPPUNIT_NS::TestCase 15{ 16 CPPUNIT_TEST_SUITE(NthElemTest); 17 CPPUNIT_TEST(nthelem0); 18 CPPUNIT_TEST(nthelem1); 19 CPPUNIT_TEST(nthelem2); 20 CPPUNIT_TEST_SUITE_END(); 21 22protected: 23 void nthelem0(); 24 void nthelem1(); 25 void nthelem2(); 26}; 27 28CPPUNIT_TEST_SUITE_REGISTRATION(NthElemTest); 29 30// 31// tests implementation 32// 33void NthElemTest::nthelem0() 34{ 35 int numbers[7] = { 5, 2, 4, 1, 0, 3 ,77}; 36 nth_element(numbers, numbers + 3, numbers + 6); 37 38 CPPUNIT_ASSERT(numbers[0]==1); 39 CPPUNIT_ASSERT(numbers[1]==0); 40 CPPUNIT_ASSERT(numbers[2]==2); 41 CPPUNIT_ASSERT(numbers[3]==3); 42 CPPUNIT_ASSERT(numbers[4]==4); 43 CPPUNIT_ASSERT(numbers[5]==5); 44} 45void NthElemTest::nthelem1() 46{ 47 //6 8 5 1 7 4 1 5 2 6 48 //1 1 4 2 5 5 6 7 8 6 49 int numbers[10] = { 6, 8, 5, 1, 7, 4, 1, 5, 2, 6 }; 50 51 vector <int> v1(numbers, numbers+10); 52 nth_element(v1.begin(), v1.begin() + v1.size() / 2, v1.end()); 53 54 CPPUNIT_ASSERT(v1[0]==1); 55 CPPUNIT_ASSERT(v1[1]==1); 56 CPPUNIT_ASSERT(v1[2]==4); 57 CPPUNIT_ASSERT(v1[3]==2); 58 CPPUNIT_ASSERT(v1[4]==5); 59 CPPUNIT_ASSERT(v1[5]==5); 60 CPPUNIT_ASSERT(v1[6]==6); 61 CPPUNIT_ASSERT(v1[7]==7); 62 CPPUNIT_ASSERT(v1[8]==8); 63 CPPUNIT_ASSERT(v1[9]==6); 64} 65void NthElemTest::nthelem2() 66{ 67 //4 5 4 2 1 7 4 3 1 6 68 //6 7 4 4 5 4 3 2 1 1 69 70 int numbers[10] = { 4, 5, 4, 2, 1, 7, 4, 3, 1, 6 }; 71 vector <int> v1(numbers, numbers+10); 72 nth_element(v1.begin(), v1.begin() + v1.size() / 2, v1.end(), greater<int>()); 73 74 CPPUNIT_ASSERT(v1[0]==6); 75 CPPUNIT_ASSERT(v1[1]==7); 76 CPPUNIT_ASSERT(v1[2]==4); 77 CPPUNIT_ASSERT(v1[3]==4); 78 CPPUNIT_ASSERT(v1[4]==5); 79 CPPUNIT_ASSERT(v1[5]==4); 80 CPPUNIT_ASSERT(v1[6]==3); 81 CPPUNIT_ASSERT(v1[7]==2); 82 CPPUNIT_ASSERT(v1[8]==1); 83 CPPUNIT_ASSERT(v1[9]==1); 84} 85