os/ossrv/genericopenlibs/cppstdlib/stl/test/unit/merge_test.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     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 }