Exemple #1
0
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;
}
Exemple #2
0
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);
}
Exemple #3
0
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
}