Home | History | Annotate | Download | only in unit
      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   const char* word1 = "ABCDEFGHIJKLMNO";
     72   const 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 }
     82