#include <vector> #include <algorithm> #include <functional> #include <numeric> #include "iota.h" #include "cppunit/cppunit_proxy.h" #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) using namespace std; #endif // // TestCase class // class MergeTest : public CPPUNIT_NS::TestCase { CPPUNIT_TEST_SUITE(MergeTest); CPPUNIT_TEST(merge0); CPPUNIT_TEST(merge1); CPPUNIT_TEST(merge2); CPPUNIT_TEST_SUITE_END(); protected: void merge0(); void merge1(); void merge2(); }; CPPUNIT_TEST_SUITE_REGISTRATION(MergeTest); // // tests implementation // void MergeTest::merge0() { int numbers1[5] = { 1, 6, 13, 25, 101 }; int numbers2[5] = {-5, 26, 36, 46, 99 }; int result[10]; merge((int*)numbers1, (int*)numbers1 + 5, (int*)numbers2, (int*)numbers2 + 5, (int*)result); CPPUNIT_ASSERT(result[0]==-5); CPPUNIT_ASSERT(result[1]==1); CPPUNIT_ASSERT(result[2]==6); CPPUNIT_ASSERT(result[3]==13); CPPUNIT_ASSERT(result[4]==25); CPPUNIT_ASSERT(result[5]==26); CPPUNIT_ASSERT(result[6]==36); CPPUNIT_ASSERT(result[7]==46); CPPUNIT_ASSERT(result[8]==99); CPPUNIT_ASSERT(result[9]==101); } void MergeTest::merge1() { vector<int> v1(5); vector<int> v2(v1.size()); __iota(v1.begin(), v1.end(), 0); __iota(v2.begin(), v2.end(), 3); vector <int> result(v1.size() + v2.size()); merge(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin()); CPPUNIT_ASSERT(result[0]==0); CPPUNIT_ASSERT(result[1]==1); CPPUNIT_ASSERT(result[2]==2); CPPUNIT_ASSERT(result[3]==3); CPPUNIT_ASSERT(result[4]==3); CPPUNIT_ASSERT(result[5]==4); CPPUNIT_ASSERT(result[6]==4); CPPUNIT_ASSERT(result[7]==5); CPPUNIT_ASSERT(result[8]==6); CPPUNIT_ASSERT(result[9]==7); } void MergeTest::merge2() { vector <int> v1(5); vector <int> v2(v1.size()); for (int i = 0; (size_t)i < v1.size(); ++i) { v1[i] = 10 - i; v2[i] = 7 - i; } vector<int> result(v1.size() + v2.size()); merge(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin(), greater<int>() ); CPPUNIT_ASSERT(result[0]==10); CPPUNIT_ASSERT(result[1]==9); CPPUNIT_ASSERT(result[2]==8); CPPUNIT_ASSERT(result[3]==7); CPPUNIT_ASSERT(result[4]==7); CPPUNIT_ASSERT(result[5]==6); CPPUNIT_ASSERT(result[6]==6); CPPUNIT_ASSERT(result[7]==5); CPPUNIT_ASSERT(result[8]==4); CPPUNIT_ASSERT(result[9]==3); }