os/ossrv/genericopenlibs/cppstdlib/stl/test/unit/setunion_test.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 #include <numeric>
     2 #include <string>
     3 #include <iterator>
     4 #include <vector>
     5 #include <algorithm>
     6 #include <functional>
     7 
     8 #include "iota.h"
     9 #include "cppunit/cppunit_proxy.h"
    10 
    11 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
    12 using namespace std;
    13 #endif
    14 
    15 //
    16 // TestCase class
    17 //
    18 class SetUnionTest : public CPPUNIT_NS::TestCase
    19 {
    20   CPPUNIT_TEST_SUITE(SetUnionTest);
    21   CPPUNIT_TEST(setunon0);
    22   CPPUNIT_TEST(setunon1);
    23   CPPUNIT_TEST(setunon2);
    24   CPPUNIT_TEST_SUITE_END();
    25 
    26 protected:
    27   void setunon0();
    28   void setunon1();
    29   void setunon2();
    30 };
    31 
    32 CPPUNIT_TEST_SUITE_REGISTRATION(SetUnionTest);
    33 
    34 //
    35 // tests implementation
    36 //
    37 void SetUnionTest::setunon0()
    38 {
    39   int v1[3] = { 13, 18, 23 };
    40   int v2[4] = { 10, 13, 17, 23 };
    41   int result[7] = { 0, 0, 0, 0, 0, 0, 0 };
    42 
    43   set_union((int*)v1, (int*)v1 + 3, (int*)v2, (int*)v2 + 4, (int*)result);
    44 
    45   CPPUNIT_ASSERT(result[0]==10);
    46   CPPUNIT_ASSERT(result[1]==13);
    47   CPPUNIT_ASSERT(result[2]==17);
    48   CPPUNIT_ASSERT(result[3]==18);
    49   CPPUNIT_ASSERT(result[4]==23);
    50   CPPUNIT_ASSERT(result[5]==0);
    51   CPPUNIT_ASSERT(result[6]==0);
    52 }
    53 
    54 void SetUnionTest::setunon1()
    55 {
    56   vector <int> v1(10);
    57   __iota(v1.begin(), v1.end(), 0);
    58   vector <int> v2(10);
    59   __iota(v2.begin(), v2.end(), 7);
    60 
    61   vector<int> diff;
    62   set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(diff));
    63   CPPUNIT_ASSERT( diff.size() == 17 );
    64   for (int i = 0; i < 17; ++i) {
    65     CPPUNIT_ASSERT( diff[i] == i );
    66   }
    67 }
    68 
    69 void SetUnionTest::setunon2()
    70 {
    71   char* word1 = "ABCDEFGHIJKLMNO";
    72   char* word2 = "LMNOPQRSTUVWXYZ";
    73 
    74   string diff;
    75   set_union(word1, word1 + ::strlen(word1), word2, word2 + ::strlen(word2),
    76             back_inserter(diff), less<char>());
    77   CPPUNIT_ASSERT( diff.size() == 26 );
    78   for (int i = 0; i < 26; ++i) {
    79     CPPUNIT_ASSERT( diff[i] == ('A' + i) );
    80   }
    81 }