Fixed iterator issues in set/map
[libcds.git] / tests / test-hdr / map / hdr_map.h
index 5f96b1b903176b6273da5ff050926162ea768764..f4961e74d9286a0b8e5fb3cbe7fcc8861accf0d3 100644 (file)
@@ -582,7 +582,33 @@ namespace map {
                 }
                 CPPUNIT_ASSERT( check_size( m, 500 ));
 
+                {
+                    typename Map::iterator it( m.begin() );
+                    typename Map::const_iterator cit( m.cbegin() );
+                    CPPUNIT_CHECK( it == cit );
+                    CPPUNIT_CHECK( it != m.end() );
+                    CPPUNIT_CHECK( it != m.cend() );
+                    CPPUNIT_CHECK( cit != m.end() );
+                    CPPUNIT_CHECK( cit != m.cend() );
+                    ++it;
+                    CPPUNIT_CHECK( it != cit );
+                    CPPUNIT_CHECK( it != m.end() );
+                    CPPUNIT_CHECK( it != m.cend() );
+                    CPPUNIT_CHECK( cit != m.end() );
+                    CPPUNIT_CHECK( cit != m.cend() );
+                    ++cit;
+                    CPPUNIT_CHECK( it == cit );
+                    CPPUNIT_CHECK( it != m.end() );
+                    CPPUNIT_CHECK( it != m.cend() );
+                    CPPUNIT_CHECK( cit != m.end() );
+                    CPPUNIT_CHECK( cit != m.cend() );
+                }
+
+
                 for ( iterator it = m.begin(), itEnd = m.end(); it != itEnd; ++it ) {
+                    iterator it2 = it;
+                    CPPUNIT_CHECK( it2 == it );
+                    CPPUNIT_CHECK( it2 == itEnd );
                     CPPUNIT_ASSERT( it->first * 2 == (*it).second.m_val );
                     it->second = it->first;
                 }
@@ -608,6 +634,28 @@ namespace map {
                 CPPUNIT_ASSERT( s.insert( i, i * 2 ));
             }
 
+            {
+                typename Map::iterator it( s.begin() );
+                typename Map::const_iterator cit( s.cbegin() );
+                CPPUNIT_CHECK( it == cit );
+                CPPUNIT_CHECK( it != s.end() );
+                CPPUNIT_CHECK( it != s.cend() );
+                CPPUNIT_CHECK( cit != s.end() );
+                CPPUNIT_CHECK( cit != s.cend() );
+                ++it;
+                CPPUNIT_CHECK( it != cit );
+                CPPUNIT_CHECK( it != s.end() );
+                CPPUNIT_CHECK( it != s.cend() );
+                CPPUNIT_CHECK( cit != s.end() );
+                CPPUNIT_CHECK( cit != s.cend() );
+                ++cit;
+                CPPUNIT_CHECK( it == cit );
+                CPPUNIT_CHECK( it != s.end() );
+                CPPUNIT_CHECK( it != s.cend() );
+                CPPUNIT_CHECK( cit != s.end() );
+                CPPUNIT_CHECK( cit != s.cend() );
+            }
+
             int nCount = 0;
             for ( iterator it = s.begin(), itEnd = s.end(); it != itEnd; ++it ) {
                 CPPUNIT_ASSERT( it->first * 2 == it->second.m_val );