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 InplaceTest : public CPPUNIT_NS::TestCase
15 {
16 CPPUNIT_TEST_SUITE(InplaceTest);
17 CPPUNIT_TEST(inplmrg1);
18 CPPUNIT_TEST(inplmrg2);
19 CPPUNIT_TEST_SUITE_END();
20
21 protected:
22 void inplmrg1();
23 void inplmrg2();
24 };
25
26 CPPUNIT_TEST_SUITE_REGISTRATION(InplaceTest);
27
28 //
29 // tests implementation
30 //
inplmrg1()31 void InplaceTest::inplmrg1()
32 {
33 int numbers[6] = { 1, 10, 42, 3, 16, 32 };
34 inplace_merge(numbers, numbers + 3, numbers + 6);
35
36 CPPUNIT_ASSERT(numbers[0]==1);
37 CPPUNIT_ASSERT(numbers[1]==3);
38 CPPUNIT_ASSERT(numbers[2]==10);
39 CPPUNIT_ASSERT(numbers[3]==16);
40 CPPUNIT_ASSERT(numbers[4]==32);
41 CPPUNIT_ASSERT(numbers[5]==42);
42 }
inplmrg2()43 void InplaceTest::inplmrg2()
44 {
45 vector<size_t> v1(10);
46 for(size_t i = 0; i < v1.size(); ++i)
47 v1[i] =(v1.size() - i - 1) % 5;
48
49 inplace_merge(v1.begin(), v1.begin() + 5, v1.end(), greater<size_t>());
50
51 CPPUNIT_ASSERT(v1[0]==4);
52 CPPUNIT_ASSERT(v1[1]==4);
53 CPPUNIT_ASSERT(v1[2]==3);
54 CPPUNIT_ASSERT(v1[3]==3);
55 CPPUNIT_ASSERT(v1[4]==2);
56 CPPUNIT_ASSERT(v1[5]==2);
57 CPPUNIT_ASSERT(v1[6]==1);
58 CPPUNIT_ASSERT(v1[7]==1);
59 CPPUNIT_ASSERT(v1[8]==0);
60 CPPUNIT_ASSERT(v1[9]==0);
61 }
62