1a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <set> 2a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <functional> 3a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 4a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include "cppunit/cppunit_proxy.h" 5a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 6a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 7a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerusing namespace std; 8a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 9a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 10a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 11a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// TestCase class 12a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 13a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerclass MultisetTest : public CPPUNIT_NS::TestCase 14a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 15a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef multiset<int, less<int> > mset; 16a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 17a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST_SUITE(MultisetTest); 18a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(mset1); 19a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(mset3); 20a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST(mset5); 21a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_TEST_SUITE_END(); 22a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 23a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerprotected: 24a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void mset1(); 25a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void mset3(); 26a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner void mset5(); 27a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 28a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner static bool less_than(int a_, int b_) 29a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 30a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner return a_ < b_; 31a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 32a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 33a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner static bool greater_than(int a_, int b_) 34a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner { 35a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner return a_ > b_; 36a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 37a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}; 38a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 39a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' TurnerCPPUNIT_TEST_SUITE_REGISTRATION(MultisetTest); 40a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 41a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 42a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// tests implementation 43a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// 44a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid MultisetTest::mset1() 45a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 46a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mset s; 47a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(s.count(42) == 0); 48a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.insert(42); 49a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(s.count(42) == 1); 50a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner s.insert(42); 51a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(s.count(42) == 2); 52a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 53a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mset::iterator i = s.find(40); 54a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(i == s.end()); 55a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 56a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner i = s.find(42); 57a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(i != s.end()); 58a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner size_t count = s.erase(42); 59a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(count == 2); 60a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 61a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid MultisetTest::mset3() 62a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 63a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int array [] = { 3, 6, 1, 2, 3, 2, 6, 7, 9 }; 64a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 65a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Check iterator on a mutable set 66a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mset s(array, array + 9); 67a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mset::iterator i; 68a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner i = s.lower_bound(3); 69a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*i == 3); 70a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner i = s.upper_bound(3); 71a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*i == 6); 72a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner pair<mset::iterator, mset::iterator> p = s.equal_range(5); 73a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*(p.first) == 6); 74a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*(p.second) == 6); 75a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 76a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Check const_iterator on a mutable multiset 77a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mset::const_iterator ci; 78a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ci = s.lower_bound(3); 79a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*ci == 3); 80a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ci = s.upper_bound(3); 81a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*ci == 6); 82a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner pair<mset::const_iterator, mset::const_iterator> cp; 83a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#ifdef _STLP_MEMBER_TEMPLATES 84a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner cp = s.equal_range(5); 85a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*(cp.first) == 6); 86a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*(cp.second) == 6); 87a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif 88a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 89a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner //Check const_iterator on a const multiset 90a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner mset const& crs = s; 91a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ci = crs.lower_bound(3); 92a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*ci == 3); 93a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner ci = crs.upper_bound(3); 94a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*ci == 6); 95a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner cp = crs.equal_range(5); 96a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*(cp.first) == 6); 97a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(*(cp.second) == 6); 98a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 99a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid MultisetTest::mset5() 100a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ 101a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int array [] = { 3, 6, 1, 9 }; 102a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner int j; 103a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 104a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef pointer_to_binary_function<int, int, bool> fn_type; 105a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner typedef multiset<int, fn_type, allocator<int> > fn_mset; 106a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 107a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner fn_type f(less_than); 108a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner fn_mset s1(array+0, array + 4 , f ); 109a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner fn_mset::const_iterator i = s1.begin(); 110a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (j = 0; i != s1.end(); ++i, ++j) { 111a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(j != 0 || *i == 1); 112a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(j != 1 || *i == 3); 113a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(j != 2 || *i == 6); 114a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(j != 3 || *i == 9); 115a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 116a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 117a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner fn_type g(greater_than); 118a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner fn_mset s2(array, array + 4, g); 119a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner i = s2.begin(); 120a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner for (j = 0; i != s2.end(); ++i, ++j) { 121a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(j != 0 || *i == 9); 122a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(j != 1 || *i == 6); 123a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(j != 2 || *i == 3); 124a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner CPPUNIT_ASSERT(j != 3 || *i == 1); 125a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner } 126a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner 127a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner} 128