1 #include <vector> 2 #include <algorithm> 3 #include <functional> 4 #include <numeric> 5 6 #include "iota.h" 7 #include "cppunit/cppunit_proxy.h" 8 9 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 10 using namespace std; 11 #endif 12 13 // 14 // TestCase class 15 // 16 class MergeTest : public CPPUNIT_NS::TestCase 17 { 18 CPPUNIT_TEST_SUITE(MergeTest); 19 CPPUNIT_TEST(merge0); 20 CPPUNIT_TEST(merge1); 21 CPPUNIT_TEST(merge2); 22 CPPUNIT_TEST_SUITE_END(); 23 24 protected: 25 void merge0(); 26 void merge1(); 27 void merge2(); 28 }; 29 30 CPPUNIT_TEST_SUITE_REGISTRATION(MergeTest); 31 32 // 33 // tests implementation 34 // 35 void MergeTest::merge0() 36 { 37 int numbers1[5] = { 1, 6, 13, 25, 101 }; 38 int numbers2[5] = {-5, 26, 36, 46, 99 }; 39 40 int result[10]; 41 merge((int*)numbers1, (int*)numbers1 + 5, (int*)numbers2, (int*)numbers2 + 5, (int*)result); 42 43 CPPUNIT_ASSERT(result[0]==-5); 44 CPPUNIT_ASSERT(result[1]==1); 45 CPPUNIT_ASSERT(result[2]==6); 46 CPPUNIT_ASSERT(result[3]==13); 47 CPPUNIT_ASSERT(result[4]==25); 48 CPPUNIT_ASSERT(result[5]==26); 49 CPPUNIT_ASSERT(result[6]==36); 50 CPPUNIT_ASSERT(result[7]==46); 51 CPPUNIT_ASSERT(result[8]==99); 52 CPPUNIT_ASSERT(result[9]==101); 53 } 54 void MergeTest::merge1() 55 { 56 vector<int> v1(5); 57 vector<int> v2(v1.size()); 58 __iota(v1.begin(), v1.end(), 0); 59 __iota(v2.begin(), v2.end(), 3); 60 61 vector <int> result(v1.size() + v2.size()); 62 merge(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin()); 63 64 CPPUNIT_ASSERT(result[0]==0); 65 CPPUNIT_ASSERT(result[1]==1); 66 CPPUNIT_ASSERT(result[2]==2); 67 CPPUNIT_ASSERT(result[3]==3); 68 CPPUNIT_ASSERT(result[4]==3); 69 CPPUNIT_ASSERT(result[5]==4); 70 CPPUNIT_ASSERT(result[6]==4); 71 CPPUNIT_ASSERT(result[7]==5); 72 CPPUNIT_ASSERT(result[8]==6); 73 CPPUNIT_ASSERT(result[9]==7); 74 75 } 76 void MergeTest::merge2() 77 { 78 vector <int> v1(5); 79 vector <int> v2(v1.size()); 80 for (int i = 0; (size_t)i < v1.size(); ++i) { 81 v1[i] = 10 - i; 82 v2[i] = 7 - i; 83 } 84 vector<int> result(v1.size() + v2.size()); 85 merge(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin(), greater<int>() ); 86 87 CPPUNIT_ASSERT(result[0]==10); 88 CPPUNIT_ASSERT(result[1]==9); 89 CPPUNIT_ASSERT(result[2]==8); 90 CPPUNIT_ASSERT(result[3]==7); 91 CPPUNIT_ASSERT(result[4]==7); 92 CPPUNIT_ASSERT(result[5]==6); 93 CPPUNIT_ASSERT(result[6]==6); 94 CPPUNIT_ASSERT(result[7]==5); 95 CPPUNIT_ASSERT(result[8]==4); 96 CPPUNIT_ASSERT(result[9]==3); 97 } 98