setunion_test.cpp revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <numeric>
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <string>
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <iterator>
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <vector>
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <algorithm>
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <functional>
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "iota.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cppunit/cppunit_proxy.h"
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using namespace std;
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch//
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// TestCase class
176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)//
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SetUnionTest : public CPPUNIT_NS::TestCase
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles){
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CPPUNIT_TEST_SUITE(SetUnionTest);
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CPPUNIT_TEST(setunon0);
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CPPUNIT_TEST(setunon1);
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CPPUNIT_TEST(setunon2);
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  CPPUNIT_TEST_SUITE_END();
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdochprotected:
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void setunon0();
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void setunon1();
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void setunon2();
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)CPPUNIT_TEST_SUITE_REGISTRATION(SetUnionTest);
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch//
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// tests implementation
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SetUnionTest::setunon0()
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles){
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int v1[3] = { 13, 18, 23 };
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  int v2[4] = { 10, 13, 17, 23 };
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int result[7] = { 0, 0, 0, 0, 0, 0, 0 };
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  set_union((int*)v1, (int*)v1 + 3, (int*)v2, (int*)v2 + 4, (int*)result);
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CPPUNIT_ASSERT(result[0]==10);
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CPPUNIT_ASSERT(result[1]==13);
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CPPUNIT_ASSERT(result[2]==17);
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CPPUNIT_ASSERT(result[3]==18);
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CPPUNIT_ASSERT(result[4]==23);
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CPPUNIT_ASSERT(result[5]==0);
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CPPUNIT_ASSERT(result[6]==0);
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void SetUnionTest::setunon1()
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles){
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  vector <int> v1(10);
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  __iota(v1.begin(), v1.end(), 0);
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  vector <int> v2(10);
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  __iota(v2.begin(), v2.end(), 7);
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  vector<int> diff;
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(diff));
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  CPPUNIT_ASSERT( diff.size() == 17 );
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  for (int i = 0; i < 17; ++i) {
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    CPPUNIT_ASSERT( diff[i] == i );
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void SetUnionTest::setunon2()
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch{
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const char* word1 = "ABCDEFGHIJKLMNO";
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const char* word2 = "LMNOPQRSTUVWXYZ";
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  string diff;
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  set_union(word1, word1 + ::strlen(word1), word2, word2 + ::strlen(word2),
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            back_inserter(diff), less<char>());
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CPPUNIT_ASSERT( diff.size() == 26 );
786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  for (int i = 0; i < 26; ++i) {
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    CPPUNIT_ASSERT( diff[i] == ('A' + i) );
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)