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)