Fixed minor gcc warnings
[libcds.git] / test / unit / tree / test_intrusive_tree.h
index ea1016cb097de6edb50b6affa4e027dd757d8b09..3fe1fdb69235e6e77c4139e4db2da30ed7a48065 100644 (file)
@@ -5,7 +5,7 @@
 
     Source code repo: http://github.com/khizmax/libcds/
     Download: http://sourceforge.net/projects/libcds/files/
-    
+
     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions are met:
 
@@ -25,7 +25,7 @@
     SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     
+    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
 #ifndef CDSUNIT_TREE_TEST_INTRUSIVE_TREE_H
@@ -66,6 +66,8 @@ namespace cds_test {
             }
         };
 
+        typedef int key_type;
+
         template <typename Node>
         struct base_int_item
             : public Node
@@ -136,6 +138,15 @@ namespace cds_test {
             }
         };
 
+        struct key_extractor
+        {
+            template <typename T>
+            void operator()( key_type& key, T const& val ) const
+            {
+                key = val.key();
+            }
+        };
+
         struct simple_item_counter {
             size_t  m_nCount;
 
@@ -182,6 +193,11 @@ namespace cds_test {
             {
                 return lhs < rhs.key();
             }
+
+            bool operator()( int lhs, int rhs ) const
+            {
+                return lhs < rhs;
+            }
         };
 
         template <typename T>
@@ -194,19 +210,26 @@ namespace cds_test {
                 return v1.key() > v2.key() ? 1 : 0;
             }
 
-            bool operator()( T const& lhs, int rhs ) const
+            int operator()( T const& lhs, int rhs ) const
             {
                 if ( lhs.key() < rhs )
                     return -1;
                 return lhs.key() > rhs ? 1 : 0;
             }
 
-            bool operator()( int lhs, T const& rhs ) const
+            int operator()( int lhs, T const& rhs ) const
             {
                 if ( lhs < rhs.key() )
                     return -1;
                 return lhs > rhs.key() ? 1 : 0;
             }
+
+            int operator()( int lhs, int rhs ) const
+            {
+                if ( lhs < rhs )
+                    return -1;
+                return lhs > rhs ? 1 : 0;
+            }
         };
 
         struct other_item {
@@ -228,6 +251,18 @@ namespace cds_test {
             {
                 return lhs.key() < rhs.key();
             }
+
+            template <typename Q>
+            bool operator()( Q const& lhs, int rhs ) const
+            {
+                return lhs.key() < rhs;
+            }
+
+            template <typename T>
+            bool operator()( int lhs, T const& rhs ) const
+            {
+                return lhs < rhs.key();
+            }
         };
 
         struct mock_disposer
@@ -274,7 +309,7 @@ namespace cds_test {
 
                 std::pair<bool, bool> updResult;
 
-                updResult = t.update( i, []( bool bNew, value_type&, value_type& )
+                updResult = t.update( i, []( bool, value_type&, value_type& )
                 {
                     ASSERT_TRUE( false );
                 }, false );
@@ -294,22 +329,22 @@ namespace cds_test {
                     EXPECT_FALSE( updResult.second );
                     break;
                 case 1:
-                    EXPECT_EQ( i.nUpdateNewCount, 0 );
+                    EXPECT_EQ( i.nUpdateNewCount, 0u );
                     ASSERT_TRUE( t.insert( i, []( value_type& v ) { ++v.nUpdateNewCount;} ));
-                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    EXPECT_EQ( i.nUpdateNewCount, 1u );
                     ASSERT_FALSE( t.insert( i, []( value_type& v ) { ++v.nUpdateNewCount;} ) );
-                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    EXPECT_EQ( i.nUpdateNewCount, 1u );
                     i.nUpdateNewCount = 0;
                     break;
                 case 2:
-                    updResult = t.update( i, []( bool bNew, value_type& val, value_type& arg )
+                    updResult = t.update( i, []( bool, value_type&, value_type& )
                     {
                         EXPECT_TRUE( false );
                     }, false );
                     EXPECT_FALSE( updResult.first );
                     EXPECT_FALSE( updResult.second );
 
-                    EXPECT_EQ( i.nUpdateNewCount, 0 );
+                    EXPECT_EQ( i.nUpdateNewCount, 0u );
                     updResult = t.update( i, []( bool bNew, value_type& val, value_type& arg )
                     {
                         EXPECT_TRUE( bNew );
@@ -318,10 +353,10 @@ namespace cds_test {
                     });
                     EXPECT_TRUE( updResult.first );
                     EXPECT_TRUE( updResult.second );
-                    EXPECT_EQ( i.nUpdateNewCount, 1 );
+                    EXPECT_EQ( i.nUpdateNewCount, 1u );
                     i.nUpdateNewCount = 0;
 
-                    EXPECT_EQ( i.nUpdateCount, 0 );
+                    EXPECT_EQ( i.nUpdateCount, 0u );
                     updResult = t.update( i, []( bool bNew, value_type& val, value_type& arg )
                     {
                         EXPECT_FALSE( bNew );
@@ -329,8 +364,8 @@ namespace cds_test {
                         ++val.nUpdateCount;
                     }, false );
                     EXPECT_TRUE( updResult.first );
-                    EXPECT_TRUE( updResult.second );
-                    EXPECT_EQ( i.nUpdateCount, 1 );
+                    EXPECT_FALSE( updResult.second );
+                    EXPECT_EQ( i.nUpdateCount, 1u );
                     i.nUpdateCount = 0;
 
                     break;
@@ -339,13 +374,13 @@ namespace cds_test {
                 ASSERT_TRUE( t.contains( i.nKey ) );
                 ASSERT_TRUE( t.contains( i ) );
                 ASSERT_TRUE( t.contains( other_item( i.key() ), other_less()));
-                EXPECT_EQ( i.nFindCount, 0 );
+                EXPECT_EQ( i.nFindCount, 0u );
                 ASSERT_TRUE( t.find( i.nKey, []( value_type& v, int ) { ++v.nFindCount; } ));
-                EXPECT_EQ( i.nFindCount, 1 );
+                EXPECT_EQ( i.nFindCount, 1u );
                 ASSERT_TRUE( t.find_with( other_item( i.key() ), other_less(), []( value_type& v, other_item const& ) { ++v.nFindCount; } ));
-                EXPECT_EQ( i.nFindCount, 2 );
+                EXPECT_EQ( i.nFindCount, 2u );
                 ASSERT_TRUE( t.find( i, []( value_type& v, value_type& ) { ++v.nFindCount; } ) );
-                EXPECT_EQ( i.nFindCount, 3 );
+                EXPECT_EQ( i.nFindCount, 3u );
             }
             ASSERT_FALSE( t.empty() );
             ASSERT_CONTAINER_SIZE( t, nTreeSize );
@@ -360,11 +395,11 @@ namespace cds_test {
                 ASSERT_TRUE( t.contains( i.nKey ) );
                 ASSERT_TRUE( t.contains( i ) );
                 ASSERT_TRUE( t.contains( other_item( i.key() ), other_less() ) );
-                EXPECT_EQ( i.nFindCount, 0 );
+                EXPECT_EQ( i.nFindCount, 0u );
                 ASSERT_TRUE( t.find( i.nKey, []( value_type& v, int ) { ++v.nFindCount; } ) );
-                EXPECT_EQ( i.nFindCount, 1 );
+                EXPECT_EQ( i.nFindCount, 1u );
                 ASSERT_TRUE( t.find_with( other_item( i.key() ), other_less(), []( value_type& v, other_item const& ) { ++v.nFindCount; } ) );
-                EXPECT_EQ( i.nFindCount, 2 );
+                EXPECT_EQ( i.nFindCount, 2u );
 
                 value_type v( i );
                 switch ( i.key() % 6 ) {
@@ -386,18 +421,18 @@ namespace cds_test {
                     ASSERT_FALSE( t.erase_with( other_item( i.key() ), other_less() ) );
                     break;
                 case 4:
-                    EXPECT_EQ( i.nEraseCount, 0 );
+                    EXPECT_EQ( i.nEraseCount, 0u );
                     ASSERT_TRUE( t.erase( v, []( value_type& val ) { ++val.nEraseCount; } ));
-                    EXPECT_EQ( i.nEraseCount, 1 );
+                    EXPECT_EQ( i.nEraseCount, 1u );
                     ASSERT_FALSE( t.erase( v, []( value_type& val ) { ++val.nEraseCount; } ));
-                    EXPECT_EQ( i.nEraseCount, 1 );
+                    EXPECT_EQ( i.nEraseCount, 1u );
                     break;
                 case 5:
-                    EXPECT_EQ( i.nEraseCount, 0 );
+                    EXPECT_EQ( i.nEraseCount, 0u );
                     ASSERT_TRUE( t.erase_with( other_item( i.key() ), other_less(), []( value_type& val ) { ++val.nEraseCount; } ));
-                    EXPECT_EQ( i.nEraseCount, 1 );
+                    EXPECT_EQ( i.nEraseCount, 1u );
                     ASSERT_FALSE( t.erase_with( other_item( i.key() ), other_less(), []( value_type& val ) { ++val.nEraseCount; } ));
-                    EXPECT_EQ( i.nEraseCount, 1 );
+                    EXPECT_EQ( i.nEraseCount, 1u );
                     break;
                 }
 
@@ -414,11 +449,12 @@ namespace cds_test {
             // Force retiring cycle
             Tree::gc::force_dispose();
             for ( auto& i : data ) {
-                EXPECT_EQ( i.nDisposeCount, 1 );
+                EXPECT_EQ( i.nDisposeCount, 1u );
             }
 
             // clear
-            for ( auto& i : data ) {
+            for ( auto idx : indices ) {
+                auto& i = data[idx];
                 i.clear_stat();
                 ASSERT_TRUE( t.insert( i ));
             }
@@ -429,14 +465,12 @@ namespace cds_test {
             t.clear();
 
             ASSERT_TRUE( t.empty());
-            ASSERT_CONTAINER_SIZE( t, 0 );
-            ASSERT_TRUE( t.begin() == t.end() );
-            ASSERT_TRUE( t.cbegin() == t.cend() );
+            ASSERT_CONTAINER_SIZE( t, 0u );
 
             // Force retiring cycle
             Tree::gc::force_dispose();
             for ( auto& i : data ) {
-                EXPECT_EQ( i.nDisposeCount, 1 );
+                EXPECT_EQ( i.nDisposeCount, 1u );
             }
         }
     };