int EXAM_IMPL(hash_test::hmmap1) { // #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) typedef unordered_multimap<char, int, hash<char>,equal_to<char> > mmap; mmap m; EXAM_CHECK(m.count('X')==0); m.insert(pair<const char,int>('X', 10)); // Standard way. EXAM_CHECK(m.count('X')==1); // m.insert('X', 20); // Non-standard, but very convenient! m.insert(pair<const char,int>('X', 20)); // jbuck: standard way EXAM_CHECK(m.count('X')==2); // m.insert('Y', 32); m.insert(pair<const char,int>('Y', 32)); // jbuck: standard way mmap::iterator i = m.find('X'); // Find first match. EXAM_CHECK((*i).first=='X'); EXAM_CHECK((*i).second==10); i++; EXAM_CHECK((*i).first=='X'); EXAM_CHECK((*i).second==20); i++; EXAM_CHECK((*i).first=='Y'); EXAM_CHECK((*i).second==32); i++; EXAM_CHECK(i==m.end()); size_t count = m.erase('X'); EXAM_CHECK(count==2); //Some iterators compare check, really compile time checks mmap::iterator ite(m.begin()); mmap::const_iterator cite(m.begin()); EXAM_CHECK( ite == cite ); EXAM_CHECK( !(ite != cite) ); EXAM_CHECK( cite == ite ); EXAM_CHECK( !(cite != ite) ); typedef unordered_multimap<size_t, size_t> HMapType; HMapType hmap; //We fill the map to implicitely start a rehash. for (size_t counter = 0; counter < 3077; ++counter) hmap.insert(HMapType::value_type(1, counter)); hmap.insert(HMapType::value_type(12325, 1)); hmap.insert(HMapType::value_type(12325, 2)); EXAM_CHECK( hmap.count(12325) == 2 ); //At this point 23 goes to the same bucket as 12325, it used to reveal a bug. hmap.insert(HMapType::value_type(23, 0)); EXAM_CHECK( hmap.count(12325) == 2 ); //#else // throw exam::skip_exception(); //#endif return EXAM_RESULT; }
void THashTest::TestHMMap1() { typedef yhash_multimap<char, int, THash<char>, TEqualTo<char> > mmap; mmap m; UNIT_ASSERT(m.count('X') == 0); m.insert(TPair<const char, int>('X', 10)); // Standard way. UNIT_ASSERT(m.count('X') == 1); m.insert(TPair<const char, int>('X', 20)); // jbuck: standard way UNIT_ASSERT(m.count('X') == 2); m.insert(TPair<const char, int>('Y', 32)); // jbuck: standard way mmap::iterator i = m.find('X'); // Find first match. UNIT_ASSERT((*i).first == 'X'); UNIT_ASSERT((*i).second == 10); i++; UNIT_ASSERT((*i).first == 'X'); UNIT_ASSERT((*i).second == 20); i = m.find('Y'); UNIT_ASSERT((*i).first == 'Y'); UNIT_ASSERT((*i).second == 32); i = m.find('Z'); UNIT_ASSERT(i == m.end()); size_t count = m.erase('X'); UNIT_ASSERT(count == 2); //Some iterators compare check, really compile time checks mmap::iterator ite(m.begin()); mmap::const_iterator cite(m.begin()); UNIT_ASSERT((mmap::const_iterator)ite == cite); UNIT_ASSERT(!((mmap::const_iterator)ite != cite)); UNIT_ASSERT(cite == (mmap::const_iterator)ite); UNIT_ASSERT(!(cite != (mmap::const_iterator)ite)); typedef yhash_multimap<size_t, size_t> HMapType; HMapType hmap; //We fill the map to implicitely start a rehash. for (size_t counter = 0; counter < 3077; ++counter) { hmap.insert(HMapType::value_type(1, counter)); } hmap.insert(HMapType::value_type(12325, 1)); hmap.insert(HMapType::value_type(12325, 2)); UNIT_ASSERT(hmap.count(12325) == 2); //At this point 23 goes to the same bucket as 12325, it used to reveal a bug. hmap.insert(HMapType::value_type(23, 0)); UNIT_ASSERT(hmap.count(12325) == 2); }
void HashTest::hmmap1() { #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) typedef hash_multimap<char, int, hash<char>,equal_to<char> > mmap; mmap m; CPPUNIT_ASSERT(m.count('X')==0); m.insert(pair<const char,int>('X', 10)); // Standard way. CPPUNIT_ASSERT(m.count('X')==1); // m.insert('X', 20); // Non-standard, but very convenient! m.insert(pair<const char,int>('X', 20)); // jbuck: standard way CPPUNIT_ASSERT(m.count('X')==2); // m.insert('Y', 32); m.insert(pair<const char,int>('Y', 32)); // jbuck: standard way mmap::iterator i = m.find('X'); // Find first match. CPPUNIT_ASSERT((*i).first=='X'); CPPUNIT_ASSERT((*i).second==10); i++; CPPUNIT_ASSERT((*i).first=='X'); CPPUNIT_ASSERT((*i).second==20); i++; CPPUNIT_ASSERT((*i).first=='Y'); CPPUNIT_ASSERT((*i).second==32); i++; CPPUNIT_ASSERT(i==m.end()); size_t count = m.erase('X'); CPPUNIT_ASSERT(count==2); //Some iterators compare check, really compile time checks mmap::iterator ite(m.begin()); mmap::const_iterator cite(m.begin()); CPPUNIT_ASSERT( ite == cite ); CPPUNIT_ASSERT( !(ite != cite) ); CPPUNIT_ASSERT( cite == ite ); CPPUNIT_ASSERT( !(cite != ite) ); typedef hash_multimap<size_t, size_t> HMapType; HMapType hmap; //We fill the map to implicitely start a rehash. for (size_t counter = 0; counter < 3077; ++counter) hmap.insert(HMapType::value_type(1, counter)); hmap.insert(HMapType::value_type(12325, 1)); hmap.insert(HMapType::value_type(12325, 2)); CPPUNIT_ASSERT( hmap.count(12325) == 2 ); //At this point 23 goes to the same bucket as 12325, it used to reveal a bug. hmap.insert(HMapType::value_type(23, 0)); CPPUNIT_ASSERT( hmap.count(12325) == 2 ); #endif }