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) 8 using namespace std; 9 #endif 10 11 // 12 // TestCase class 13 // 14 class 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 22 protected: 23 void nthelem0(); 24 void nthelem1(); 25 void nthelem2(); 26 }; 27 28 CPPUNIT_TEST_SUITE_REGISTRATION(NthElemTest); 29 30 // 31 // tests implementation 32 // 33 void 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 } 45 void 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 } 65 void 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