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 //
setunon0()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 
setunon1()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 
setunon2()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