diff -r 000000000000 -r bde4ae8d615e os/ossrv/genericopenlibs/cppstdlib/stl/test/unit/set_test.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/genericopenlibs/cppstdlib/stl/test/unit/set_test.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,814 @@ +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +//Has to be first for StackAllocator swap overload to be taken +//into account (at least using GCC 4.0.1) +#include "stack_allocator.h" +#include +#include +#include +#include + +#include "cppunit/cppunit_proxy.h" + +#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) +using namespace std; +#endif + +// +// TestCase class +// +class SetTest : public CPPUNIT_NS::TestCase +{ + CPPUNIT_TEST_SUITE(SetTest); + CPPUNIT_TEST(set1); + CPPUNIT_TEST(set2); + CPPUNIT_TEST(erase); + CPPUNIT_TEST(insert); + CPPUNIT_TEST(find); + CPPUNIT_TEST(bounds); + CPPUNIT_TEST(specialized_less); + CPPUNIT_TEST(implementation_check); + CPPUNIT_TEST(allocator_with_state); + CPPUNIT_TEST(reverse_iterator_test); +#if !defined (STLPORT) || !defined (_STLP_USE_CONTAINERS_EXTENSION) + CPPUNIT_IGNORE; +#endif + CPPUNIT_TEST(template_methods); + CPPUNIT_TEST(set_cov1); + CPPUNIT_TEST(set_cov2); + CPPUNIT_TEST(set_cov3); + CPPUNIT_TEST(multiset_cov1); + CPPUNIT_TEST(multiset_cov2); + CPPUNIT_TEST(multiset_cov3); + CPPUNIT_TEST_SUITE_END(); + +protected: + void set1(); + void set2(); + void erase(); + void insert(); + void find(); + void bounds(); + void specialized_less(); + void implementation_check(); + void allocator_with_state(); + void reverse_iterator_test(); + void template_methods(); + void set_cov1(); + void set_cov2(); + void set_cov3(); + void multiset_cov1(); + void multiset_cov2(); + void multiset_cov3(); +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(SetTest); + + +// +// tests implementation +// +void SetTest::set1() +{ + set > s; + CPPUNIT_ASSERT (s.count(42) == 0); + s.insert(42); + CPPUNIT_ASSERT (s.count(42) == 1); + s.insert(42); + CPPUNIT_ASSERT (s.count(42) == 1); + size_t count = s.erase(42); + CPPUNIT_ASSERT (count == 1); +} + +void SetTest::set2() +{ + typedef set > int_set; + int_set s; + pair p = s.insert(42); + CPPUNIT_ASSERT (p.second == true); + p = s.insert(42); + CPPUNIT_ASSERT (p.second == false); + + int array1 [] = { 1, 3, 6, 7 }; + s.insert(array1, array1 + 4); + CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 5); + + int_set s2; + s2.swap(s); + CPPUNIT_ASSERT (distance(s2.begin(), s2.end()) == 5); + CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 0); + + int_set s3; + s3.swap(s); + s3.swap(s2); + CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 0); + CPPUNIT_ASSERT (distance(s2.begin(), s2.end()) == 0); + CPPUNIT_ASSERT (distance(s3.begin(), s3.end()) == 5); +} + +void SetTest::erase() +{ + set > s; + s.insert(1); + s.erase(s.begin()); + CPPUNIT_ASSERT( s.empty() ); + + size_t nb = s.erase(1); + CPPUNIT_ASSERT(nb == 0); +} + +void SetTest::insert() +{ + set s; + set::iterator i = s.insert( s.end(), 0 ); + CPPUNIT_ASSERT( *i == 0 ); +} + +void SetTest::find() +{ + set s; + + CPPUNIT_ASSERT( s.find(0) == s.end() ); + + set const& crs = s; + + CPPUNIT_ASSERT( crs.find(0) == crs.end() ); +} + +void SetTest::bounds() +{ + int array1 [] = { 1, 3, 6, 7 }; + set s(array1, array1 + sizeof(array1) / sizeof(array1[0])); + set const& crs = s; + + set::iterator sit; + set::const_iterator scit; + pair::iterator, set::iterator> pit; + pair::const_iterator, set::const_iterator> pcit; + + //Check iterator on mutable set + sit = s.lower_bound(2); + CPPUNIT_ASSERT( sit != s.end() ); + CPPUNIT_ASSERT( *sit == 3 ); + + sit = s.upper_bound(5); + CPPUNIT_ASSERT( sit != s.end() ); + CPPUNIT_ASSERT( *sit == 6 ); + + pit = s.equal_range(6); + CPPUNIT_ASSERT( pit.first != pit.second ); + CPPUNIT_ASSERT( pit.first != s.end() ); + CPPUNIT_ASSERT( *pit.first == 6 ); + CPPUNIT_ASSERT( pit.second != s.end() ); + CPPUNIT_ASSERT( *pit.second == 7 ); + + pit = s.equal_range(4); + CPPUNIT_ASSERT( pit.first == pit.second ); + CPPUNIT_ASSERT( pit.first != s.end() ); + CPPUNIT_ASSERT( *pit.first == 6 ); + CPPUNIT_ASSERT( pit.second != s.end() ); + CPPUNIT_ASSERT( *pit.second == 6 ); + + //Check const_iterator on mutable set + scit = s.lower_bound(2); + CPPUNIT_ASSERT( scit != s.end() ); + CPPUNIT_ASSERT( *scit == 3 ); + + scit = s.upper_bound(5); + CPPUNIT_ASSERT( scit != s.end() ); + CPPUNIT_ASSERT( *scit == 6 ); + +#ifdef _STLP_MEMBER_TEMPLATES + pcit = s.equal_range(6); + CPPUNIT_ASSERT( pcit.first != pcit.second ); + CPPUNIT_ASSERT( pcit.first != s.end() ); + CPPUNIT_ASSERT( *pcit.first == 6 ); + CPPUNIT_ASSERT( pcit.second != s.end() ); + CPPUNIT_ASSERT( *pcit.second == 7 ); +#endif + + //Check const_iterator on const set + scit = crs.lower_bound(2); + CPPUNIT_ASSERT( scit != crs.end() ); + CPPUNIT_ASSERT( *scit == 3 ); + + scit = crs.upper_bound(5); + CPPUNIT_ASSERT( scit != crs.end() ); + CPPUNIT_ASSERT( *scit == 6 ); + + pcit = crs.equal_range(6); + CPPUNIT_ASSERT( pcit.first != pcit.second ); + CPPUNIT_ASSERT( pcit.first != crs.end() ); + CPPUNIT_ASSERT( *pcit.first == 6 ); + CPPUNIT_ASSERT( pcit.second != crs.end() ); + CPPUNIT_ASSERT( *pcit.second == 7 ); +} + + +class SetTestClass { +public: + SetTestClass (int data) : _data(data) + {} + + int data() const { + return _data; + } + +private: + int _data; +}; + +namespace std { + template <> + struct less { + bool operator () (SetTestClass const& lhs, SetTestClass const& rhs) const { + return lhs.data() < rhs.data(); + } + }; +} + +void SetTest::specialized_less() +{ + set s; + s.insert(SetTestClass(1)); + s.insert(SetTestClass(3)); + s.insert(SetTestClass(2)); + s.insert(SetTestClass(0)); + + set::iterator sit(s.begin()), sitEnd(s.end()); + int i = 0; + for (; sit != sitEnd; ++sit, ++i) { + CPPUNIT_ASSERT( sit->data() == i ); + } +} + +void SetTest::implementation_check() +{ + set tree; + tree.insert(1); + set::iterator it = tree.begin(); + int const& int_ref = *it++; + CPPUNIT_ASSERT( int_ref == 1 ); + + CPPUNIT_ASSERT( it == tree.end() ); + CPPUNIT_ASSERT( it != tree.begin() ); + + set::const_iterator cit = tree.begin(); + int const& int_cref = *cit++; + CPPUNIT_ASSERT( int_cref == 1 ); +} + +void SetTest::reverse_iterator_test() +{ + set tree; + tree.insert(1); + tree.insert(2); + + { + set::reverse_iterator rit(tree.rbegin()); + CPPUNIT_ASSERT( *(rit++) == 2 ); + CPPUNIT_ASSERT( *(rit++) == 1 ); + CPPUNIT_ASSERT( rit == tree.rend() ); + } + + { + set const& ctree = tree; + set::const_reverse_iterator rit(ctree.rbegin()); + CPPUNIT_ASSERT( *(rit++) == 2 ); + CPPUNIT_ASSERT( *(rit++) == 1 ); + CPPUNIT_ASSERT( rit == ctree.rend() ); + } +} + +void SetTest::allocator_with_state() +{ + char buf1[1024]; + StackAllocator stack1(buf1, buf1 + sizeof(buf1)); + + char buf2[1024]; + StackAllocator stack2(buf2, buf2 + sizeof(buf2)); + + int i; + typedef set, StackAllocator > SetInt; + less intLess; + + { + SetInt sint1(intLess, stack1); + for (i = 0; i < 5; ++i) + sint1.insert(i); + SetInt sint1Cpy(sint1); + + SetInt sint2(intLess, stack2); + for (; i < 10; ++i) + sint2.insert(i); + SetInt sint2Cpy(sint2); + + sint1.swap(sint2); + + CPPUNIT_ASSERT( sint1.get_allocator().swaped() ); + CPPUNIT_ASSERT( sint2.get_allocator().swaped() ); + + CPPUNIT_ASSERT( sint1 == sint2Cpy ); + CPPUNIT_ASSERT( sint2 == sint1Cpy ); + CPPUNIT_ASSERT( sint1.get_allocator() == stack2 ); + CPPUNIT_ASSERT( sint2.get_allocator() == stack1 ); + } + CPPUNIT_ASSERT( stack1.ok() ); + CPPUNIT_ASSERT( stack2.ok() ); + stack1.reset(); stack2.reset(); + + { + SetInt sint1(intLess, stack1); + SetInt sint1Cpy(sint1); + + SetInt sint2(intLess, stack2); + for (i = 0; i < 10; ++i) + sint2.insert(i); + SetInt sint2Cpy(sint2); + + sint1.swap(sint2); + + CPPUNIT_ASSERT( sint1.get_allocator().swaped() ); + CPPUNIT_ASSERT( sint2.get_allocator().swaped() ); + + CPPUNIT_ASSERT( sint1 == sint2Cpy ); + CPPUNIT_ASSERT( sint2 == sint1Cpy ); + CPPUNIT_ASSERT( sint1.get_allocator() == stack2 ); + CPPUNIT_ASSERT( sint2.get_allocator() == stack1 ); + } + CPPUNIT_ASSERT( stack1.ok() ); + CPPUNIT_ASSERT( stack2.ok() ); + stack1.reset(); stack2.reset(); + + { + SetInt sint1(intLess, stack1); + for (i = 0; i < 10; ++i) + sint1.insert(i); + SetInt sint1Cpy(sint1); + + SetInt sint2(intLess, stack2); + SetInt sint2Cpy(sint2); + + sint1.swap(sint2); + + CPPUNIT_ASSERT( sint1.get_allocator().swaped() ); + CPPUNIT_ASSERT( sint2.get_allocator().swaped() ); + + CPPUNIT_ASSERT( sint1 == sint2Cpy ); + CPPUNIT_ASSERT( sint2 == sint1Cpy ); + CPPUNIT_ASSERT( sint1.get_allocator() == stack2 ); + CPPUNIT_ASSERT( sint2.get_allocator() == stack1 ); + } + CPPUNIT_ASSERT( stack1.ok() ); + CPPUNIT_ASSERT( stack2.ok() ); + stack1.reset(); stack2.reset(); +} + +struct Key +{ + Key() : m_data(0) {} + explicit Key(int data) : m_data(data) {} + + int m_data; +}; + +struct KeyCmp +{ + bool operator () (Key lhs, Key rhs) const + { return lhs.m_data < rhs.m_data; } + + bool operator () (Key lhs, int rhs) const + { return lhs.m_data < rhs; } + + bool operator () (int lhs, Key rhs) const + { return lhs < rhs.m_data; } +}; + +struct KeyCmpPtr +{ + bool operator () (Key const volatile *lhs, Key const volatile *rhs) const + { return (*lhs).m_data < (*rhs).m_data; } + + bool operator () (Key const volatile *lhs, int rhs) const + { return (*lhs).m_data < rhs; } + + bool operator () (int lhs, Key const volatile *rhs) const + { return lhs < (*rhs).m_data; } +}; + +void SetTest::template_methods() +{ +#if defined (STLPORT) && defined (_STLP_USE_CONTAINERS_EXTENSION) + { + typedef set KeySet; + KeySet keySet; + keySet.insert(Key(1)); + keySet.insert(Key(2)); + keySet.insert(Key(3)); + keySet.insert(Key(4)); + + CPPUNIT_ASSERT( keySet.count(Key(1)) == 1 ); + CPPUNIT_ASSERT( keySet.count(1) == 1 ); + CPPUNIT_ASSERT( keySet.count(5) == 0 ); + + CPPUNIT_ASSERT( keySet.find(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) ); + + KeySet const& ckeySet = keySet; + CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) ); + } + + { + typedef set KeySet; + KeySet keySet; + Key key1(1), key2(2), key3(3), key4(4); + keySet.insert(&key1); + keySet.insert(&key2); + keySet.insert(&key3); + keySet.insert(&key4); + + CPPUNIT_ASSERT( keySet.count(1) == 1 ); + CPPUNIT_ASSERT( keySet.count(5) == 0 ); + + CPPUNIT_ASSERT( keySet.find(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) ); + + KeySet const& ckeySet = keySet; + CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) ); + } + { + typedef multiset KeySet; + KeySet keySet; + keySet.insert(Key(1)); + keySet.insert(Key(2)); + keySet.insert(Key(3)); + keySet.insert(Key(4)); + + CPPUNIT_ASSERT( keySet.count(Key(1)) == 1 ); + CPPUNIT_ASSERT( keySet.count(1) == 1 ); + CPPUNIT_ASSERT( keySet.count(5) == 0 ); + + CPPUNIT_ASSERT( keySet.find(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) ); + + KeySet const& ckeySet = keySet; + CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) ); + } + + { + typedef multiset KeySet; + KeySet keySet; + Key key1(1), key2(2), key3(3), key4(4); + keySet.insert(&key1); + keySet.insert(&key2); + keySet.insert(&key3); + keySet.insert(&key4); + + CPPUNIT_ASSERT( keySet.count(1) == 1 ); + CPPUNIT_ASSERT( keySet.count(5) == 0 ); + + CPPUNIT_ASSERT( keySet.find(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.lower_bound(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.upper_bound(2) != keySet.end() ); + CPPUNIT_ASSERT( keySet.equal_range(2) != make_pair(keySet.begin(), keySet.end()) ); + + KeySet const& ckeySet = keySet; + CPPUNIT_ASSERT( ckeySet.find(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.lower_bound(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.upper_bound(2) != ckeySet.end() ); + CPPUNIT_ASSERT( ckeySet.equal_range(2) != make_pair(ckeySet.begin(), ckeySet.end()) ); + } +#endif +} +void SetTest::set_cov1() + { + __UHEAP_MARK; + { + set > s1; + set >::value_compare vc1 = s1.value_comp( ); + bool result1 = vc1( 2, 3 ); + CPPUNIT_ASSERT( result1 == true ); + + set > s2; + set >::value_compare vc2 = s2.value_comp( ); + bool result2 = vc2( 2, 3 ); + CPPUNIT_ASSERT( result2 == false ); + } + { + set ::iterator s2_pIter; + set :: size_type i; + set > s1, s2; + + s1.insert( 10 ); + s1.insert( 20 ); + s1.insert( 30 ); + s1.insert( 40 ); + + s2=s1; + s2_pIter = s2.begin( ); + CPPUNIT_ASSERT(*s2_pIter == 10); + + i = s2.size( ); + CPPUNIT_ASSERT(i == 4); + } + { + set s1; + s1.max_size( ); + } + __UHEAP_MARKEND; + } +void SetTest::set_cov2() + { + __UHEAP_MARK; + { + set > s1; + set >::key_compare kc1 = s1.key_comp( ) ; + bool result1 = kc1( 2, 3 ) ; + CPPUNIT_ASSERT( result1 == true ); + } + { + set s1; + set :: size_type i; + set :: iterator pIter, Iter1, Iter2; + int i1; + + for ( i1 = 1 ; i1 < 5 ; i1++ ) + { + s1.insert ( i1 * i1 ); + } + Iter1 = ++s1.begin( ); + Iter2 = --s1.end( ); + s1.erase( Iter1, Iter2 ); + pIter = s1.begin( ) ; + CPPUNIT_ASSERT(*pIter == 1); + pIter++; + CPPUNIT_ASSERT(*pIter == 16); + i = s1.size( ); + CPPUNIT_ASSERT(i == 2); + } + __UHEAP_MARKEND; + } +void SetTest::set_cov3() + { + __UHEAP_MARK; + { + set s1; + + s1.insert( 1 ); + s1.insert( 2 ); + + CPPUNIT_ASSERT(s1.size()== 2); + s1.clear(); + CPPUNIT_ASSERT(s1.size()== 0); + } + { + set s1,s2; + + s1.insert( 1 ); + s1.insert( 2 ); + + s2.insert( 3 ); + s2.insert( 4 ); + bool val = s1 < s2; + CPPUNIT_ASSERT(val == true); + } + { + typedef set > int_set; + int_set s; + pair p = s.insert(42); + CPPUNIT_ASSERT (p.second == true); + p = s.insert(42); + CPPUNIT_ASSERT (p.second == false); + + int array1 [] = { 1, 3, 6, 7 }; + s.insert(array1, array1 + 4); + CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 5); + + int_set s2; + swap(s2,s); + CPPUNIT_ASSERT (distance(s2.begin(), s2.end()) == 5); + CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 0); + } + __UHEAP_MARKEND; + } +void SetTest::multiset_cov1() + { + __UHEAP_MARK; + { + multiset > ms1; + multiset >::value_compare vc1 = ms1.value_comp( ); + bool result1 = vc1( 2, 3 ); + CPPUNIT_ASSERT( result1 == true ); + + multiset > ms2; + multiset >::value_compare vc2 = ms2.value_comp( ); + bool result2 = vc2( 2, 3 ); + CPPUNIT_ASSERT( result2 == false ); + } + { + multiset ms1, ms2; + multiset ::iterator ms1_Iter; + multiset :: size_type i; + + ms1.insert( 10 ); + ms1.insert( 20 ); + ms1.insert( 30 ); + ms2.insert( 100 ); + + ms1.swap( ms2 ); + ms1_Iter = ms1.begin( ); + CPPUNIT_ASSERT(*ms1_Iter== 100); + + i = ms1.size(); + CPPUNIT_ASSERT(i == 1); + } + { + multiset tree; + tree.insert(1); + tree.insert(2); + + { + multiset::reverse_iterator rit(tree.rbegin()); + CPPUNIT_ASSERT( *(rit++) == 2 ); + CPPUNIT_ASSERT( *(rit++) == 1 ); + CPPUNIT_ASSERT( rit == tree.rend() ); + } + + { + multiset const& ctree = tree; + multiset::const_reverse_iterator rit(ctree.rbegin()); + CPPUNIT_ASSERT( *(rit++) == 2 ); + CPPUNIT_ASSERT( *(rit++) == 1 ); + CPPUNIT_ASSERT( rit == ctree.rend() ); + } + } + __UHEAP_MARKEND; + } +void SetTest::multiset_cov2() + { + __UHEAP_MARK; + { + multiset::iterator ms2_pIter; + multiset :: size_type i; + multiset ms1, ms2; + + ms1.insert( 10 ); + ms1.insert( 20 ); + ms1.insert( 30 ); + ms1.insert( 40 ); + + ms2=ms1; + ms2_pIter = ms2.begin( ); + CPPUNIT_ASSERT(*ms2_pIter == 10); + + i = ms2.size( ); + CPPUNIT_ASSERT(i == 4); + } + { + multiset ms1; + ms1.max_size( ); + } + { + multiset ms1; + multiset::key_compare kc1 = ms1.key_comp( ) ; + bool result1 = kc1( 2, 3 ) ; + CPPUNIT_ASSERT( result1 == true ); + } + { + char buf1[1024]; + StackAllocator stack1(buf1, buf1 + sizeof(buf1)); + + char buf2[1024]; + StackAllocator stack2(buf2, buf2 + sizeof(buf2)); + + int i; + typedef multiset, StackAllocator > SetInt; + less intLess; + { + SetInt sint1(intLess, stack1); + for (i = 0; i < 5; ++i) + sint1.insert(i); + SetInt sint1Cpy(sint1); + + SetInt sint2(intLess, stack2); + for (; i < 10; ++i) + sint2.insert(i); + SetInt sint2Cpy(sint2); + + sint1.swap(sint2); + + CPPUNIT_ASSERT( sint1.get_allocator().swaped() ); + CPPUNIT_ASSERT( sint2.get_allocator().swaped() ); + + CPPUNIT_ASSERT( sint1 == sint2Cpy ); + CPPUNIT_ASSERT( sint2 == sint1Cpy ); + CPPUNIT_ASSERT( sint1.get_allocator() == stack2 ); + CPPUNIT_ASSERT( sint2.get_allocator() == stack1 ); + } + CPPUNIT_ASSERT( stack1.ok() ); + CPPUNIT_ASSERT( stack2.ok() ); + stack1.reset(); stack2.reset(); + } + __UHEAP_MARKEND; + } +void SetTest::multiset_cov3() + { + __UHEAP_MARK; + { + multiset s1; + multiset :: size_type i; + multiset :: iterator pIter, Iter1, Iter2; + int i1; + + for ( i1 = 1 ; i1 < 5 ; i1++ ) + { + s1.insert ( i1 * i1 ); + } + Iter1 = ++s1.begin( ); + Iter2 = --s1.end( ); + s1.erase( Iter1, Iter2 ); + pIter = s1.begin( ) ; + CPPUNIT_ASSERT(*pIter == 1); + pIter++; + CPPUNIT_ASSERT(*pIter == 16); + i = s1.size( ); + CPPUNIT_ASSERT(i == 2); + } + { + multiset s1; + + s1.insert( 1 ); + s1.insert( 2 ); + + CPPUNIT_ASSERT(s1.size()== 2); + s1.clear(); + CPPUNIT_ASSERT(s1.size()== 0); + } + { + multiset s; + multiset::iterator i = s.insert( s.end(), 0 ); + CPPUNIT_ASSERT( *i == 0 ); + } + { + multiset s; + + int array1 [] = { 1, 3, 6, 7 }; + s.insert(array1, array1 + 4); + CPPUNIT_ASSERT (distance(s.begin(), s.end()) == 4); + + } + { + multiset ms1, ms2; + multiset ::iterator ms1_Iter; + multiset :: size_type i; + + ms1.insert( 10 ); + ms1.insert( 20 ); + ms1.insert( 30 ); + ms2.insert( 100 ); + + swap( ms1,ms2 ); + ms1_Iter = ms1.begin( ); + CPPUNIT_ASSERT(*ms1_Iter== 100); + + i = ms1.size(); + CPPUNIT_ASSERT(i == 1); + } + { + multiset ms1, ms2; + + ms1.insert( 10 ); + ms2.insert( 100 ); + bool val = ms1 < ms2; + CPPUNIT_ASSERT( val == true); + } + __UHEAP_MARKEND; + }