diff -r 000000000000 -r e4d67989cc36 genericopenlibs/cppstdlib/stl/test/unit/multiset_test.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/cppstdlib/stl/test/unit/multiset_test.cpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,127 @@ +#include +#include + +#include "cppunit/cppunit_proxy.h" + +#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) +using namespace std; +#endif + +// +// TestCase class +// +class MultisetTest : public CPPUNIT_NS::TestCase +{ + typedef multiset > mset; + + CPPUNIT_TEST_SUITE(MultisetTest); + CPPUNIT_TEST(mset1); + CPPUNIT_TEST(mset3); + CPPUNIT_TEST(mset5); + CPPUNIT_TEST_SUITE_END(); + +protected: + void mset1(); + void mset3(); + void mset5(); + + static bool less_than(int a_, int b_) + { + return a_ < b_; + } + + static bool greater_than(int a_, int b_) + { + return a_ > b_; + } +}; + +CPPUNIT_TEST_SUITE_REGISTRATION(MultisetTest); + +// +// tests implementation +// +void MultisetTest::mset1() +{ + mset s; + CPPUNIT_ASSERT(s.count(42) == 0); + s.insert(42); + CPPUNIT_ASSERT(s.count(42) == 1); + s.insert(42); + CPPUNIT_ASSERT(s.count(42) == 2); + + mset::iterator i = s.find(40); + CPPUNIT_ASSERT(i == s.end()); + + i = s.find(42); + CPPUNIT_ASSERT(i != s.end()); + size_t count = s.erase(42); + CPPUNIT_ASSERT(count == 2); +} +void MultisetTest::mset3() +{ + int array [] = { 3, 6, 1, 2, 3, 2, 6, 7, 9 }; + + //Check iterator on a mutable set + mset s(array, array + 9); + mset::iterator i; + i = s.lower_bound(3); + CPPUNIT_ASSERT(*i == 3); + i = s.upper_bound(3); + CPPUNIT_ASSERT(*i == 6); + pair p = s.equal_range(5); + CPPUNIT_ASSERT(*(p.first) == 6); + CPPUNIT_ASSERT(*(p.second) == 6); + + //Check const_iterator on a mutable multiset + mset::const_iterator ci; + ci = s.lower_bound(3); + CPPUNIT_ASSERT(*ci == 3); + ci = s.upper_bound(3); + CPPUNIT_ASSERT(*ci == 6); + pair cp; +#ifdef _STLP_MEMBER_TEMPLATES + cp = s.equal_range(5); + CPPUNIT_ASSERT(*(cp.first) == 6); + CPPUNIT_ASSERT(*(cp.second) == 6); +#endif + + //Check const_iterator on a const multiset + mset const& crs = s; + ci = crs.lower_bound(3); + CPPUNIT_ASSERT(*ci == 3); + ci = crs.upper_bound(3); + CPPUNIT_ASSERT(*ci == 6); + cp = crs.equal_range(5); + CPPUNIT_ASSERT(*(cp.first) == 6); + CPPUNIT_ASSERT(*(cp.second) == 6); +} +void MultisetTest::mset5() +{ + int array [] = { 3, 6, 1, 9 }; + int j; + + typedef pointer_to_binary_function fn_type; + typedef multiset > fn_mset; + + fn_type f(less_than); + fn_mset s1(array+0, array + 4 , f ); + fn_mset::const_iterator i = s1.begin(); + for (j = 0; i != s1.end(); ++i, ++j) { + CPPUNIT_ASSERT(j != 0 || *i == 1); + CPPUNIT_ASSERT(j != 1 || *i == 3); + CPPUNIT_ASSERT(j != 2 || *i == 6); + CPPUNIT_ASSERT(j != 3 || *i == 9); + } + + fn_type g(greater_than); + fn_mset s2(array, array + 4, g); + i = s2.begin(); + for (j = 0; i != s2.end(); ++i, ++j) { + CPPUNIT_ASSERT(j != 0 || *i == 9); + CPPUNIT_ASSERT(j != 1 || *i == 6); + CPPUNIT_ASSERT(j != 2 || *i == 3); + CPPUNIT_ASSERT(j != 3 || *i == 1); + } + +}