movable guarded_ptr: SkipList
[libcds.git] / tests / test-hdr / set / hdr_intrusive_skiplist_set.h
index b7be051008b405c48de2f8b03fe24d0d33dd581f..349b2a259180d3e07e3cbc1b1d007d737349b1e9 100644 (file)
@@ -230,38 +230,40 @@ namespace set {
                 // extract
                 fill_skiplist( s, v );
                 for ( int i = c_nArrSize - 1; i >= 0; i -= 1 ) {
-                    CPPUNIT_CHECK( s.get(gp, i));
+                    gp = s.get( i );
+                    CPPUNIT_CHECK( gp );
                     CPPUNIT_CHECK( gp->nKey == i );
                     CPPUNIT_CHECK( gp->nVal == i * 2 );
                     gp->nVal *= 2;
-                    gp.release();
 
-                    CPPUNIT_CHECK( s.extract( gp, i ));
+                    gp = s.extract( i );
+                    CPPUNIT_CHECK( gp );
                     CPPUNIT_CHECK_EX( gp->nKey == i, "i=" << i << ", gp->nKey=" << gp->nKey);
                     CPPUNIT_CHECK_EX( (*gp).nVal == i * 4, "i=" << i << ", gp->nVal=" << gp->nVal );
-                    CPPUNIT_CHECK( !s.extract( gp, i ));
-                    CPPUNIT_CHECK( !s.get( gp, i ));
+                    gp = s.extract( i );
+                    CPPUNIT_CHECK( !gp );
+                    CPPUNIT_CHECK( !s.get( i ));
                 }
-                gp.release();
                 CPPUNIT_CHECK( s.empty() );
                 Set::gc::force_dispose();
 
                 // extract_with
                 fill_skiplist( s, v );
                 for ( int i = c_nArrSize - 1; i >= 0; i -= 1 ) {
-                    CPPUNIT_CHECK( s.get_with( gp, other_key(i), other_key_less<typename Set::value_type>() ));
+                    gp = s.get_with( other_key( i ), other_key_less<typename Set::value_type>() );
+                    CPPUNIT_CHECK( gp );
                     CPPUNIT_CHECK( gp->nKey == i );
                     CPPUNIT_CHECK( (*gp).nVal == i * 2 );
                     gp->nVal *= 2;
-                    gp.release();
 
-                    CPPUNIT_CHECK( s.extract_with( gp, other_key(i), other_key_less<typename Set::value_type>() ));
+                    gp = s.extract_with( other_key( i ), other_key_less<typename Set::value_type>() );
+                    CPPUNIT_CHECK( gp );
                     CPPUNIT_CHECK_EX( gp->nKey == i, "i=" << i << ", gp->nKey=" << gp->nKey);
                     CPPUNIT_CHECK_EX( (*gp).nVal == i * 4, "i=" << i << ", gp->nVal=" << gp->nVal );
-                    CPPUNIT_CHECK( !s.extract_with( gp, other_key(i), other_key_less<typename Set::value_type>() ));
-                    CPPUNIT_CHECK( !s.get_with( gp, other_key(i), other_key_less<typename Set::value_type>() ));
+                    gp = s.extract_with( other_key( i ), other_key_less<typename Set::value_type>() );
+                    CPPUNIT_CHECK( !gp );
+                    CPPUNIT_CHECK( !s.get_with( other_key(i), other_key_less<typename Set::value_type>() ));
                 }
-                gp.release();
                 CPPUNIT_CHECK( s.empty() );
                 Set::gc::force_dispose();
 
@@ -269,18 +271,19 @@ namespace set {
                 {
                     fill_skiplist( s, v );
                     int nPrevKey;
-                    CPPUNIT_ASSERT( s.extract_min( gp ));
+                    gp = s.extract_min();
+                    CPPUNIT_ASSERT( gp );
                     nPrevKey = gp->nKey;
                     while ( !s.empty() ) {
-                        CPPUNIT_CHECK( s.extract_min( gp ));
+                        gp = s.extract_min();
+                        CPPUNIT_CHECK( gp );
                         CPPUNIT_ASSERT( !gp.empty());
                         CPPUNIT_CHECK( gp->nKey == nPrevKey + 1 );
                         CPPUNIT_CHECK( (*gp).nVal == (nPrevKey + 1) * 2 );
                         nPrevKey = gp->nKey;
-                        gp.release();
                     }
                     gp.release();
-                    CPPUNIT_CHECK( !s.extract_min(gp));
+                    CPPUNIT_CHECK( !s.extract_min());
                     CPPUNIT_CHECK( gp.empty());
                 }
                 Set::gc::force_dispose();
@@ -289,23 +292,22 @@ namespace set {
                 {
                     fill_skiplist( s, v );
                     int nPrevKey;
-                    CPPUNIT_ASSERT( s.extract_max( gp ));
+                    gp = s.extract_max();
+                    CPPUNIT_ASSERT( gp );
                     nPrevKey = gp->nKey;
                     while ( !s.empty() ) {
-
-                        CPPUNIT_CHECK( s.extract_max( gp ));
+                        gp = s.extract_max();
+                        CPPUNIT_CHECK( gp );
                         CPPUNIT_ASSERT( !gp.empty() );
                         CPPUNIT_CHECK( gp->nKey == nPrevKey - 1 );
                         CPPUNIT_CHECK( (*gp).nVal == (nPrevKey - 1) * 2 );
                         nPrevKey = gp->nKey;
-                        gp.release();
                     }
                     gp.release();
-                    CPPUNIT_CHECK( !s.extract_min(gp));
+                    CPPUNIT_CHECK( !s.extract_min());
                     CPPUNIT_CHECK( gp.empty());
 
-                    CPPUNIT_CHECK( !s.extract_max(gp));
-                    CPPUNIT_CHECK( gp.empty());
+                    CPPUNIT_CHECK( !s.extract_max());
                 }
                 Set::gc::force_dispose();
             }
@@ -370,7 +372,7 @@ namespace set {
                 CPPUNIT_ASSERT( s.find( v3 ) == nullptr );
                 CPPUNIT_ASSERT( s.insert( v3 ));
                 CPPUNIT_ASSERT( v3.nFindCount == 0 );
-                CPPUNIT_ASSERT( s.find( v3, cds::ref(ff) ));
+                CPPUNIT_ASSERT( s.find( v3, std::ref(ff) ));
                 CPPUNIT_ASSERT( v3.nFindCount == 1 );
                 v3.nFindCount = 0;
                 CPPUNIT_ASSERT( check_size( s, 3 ));
@@ -550,64 +552,44 @@ namespace set {
         void skiplist_hp_member_less_pascal_stat();
         void skiplist_hp_member_cmpmix_pascal_stat();
 
-        // Skip-list - gc::HRC
-        void skiplist_hrc_base_cmp();
-        void skiplist_hrc_base_less();
-        void skiplist_hrc_base_cmpmix();
-        void skiplist_hrc_base_cmp_stat();
-        void skiplist_hrc_base_less_stat();
-        void skiplist_hrc_base_cmpmix_stat();
-        void skiplist_hrc_base_cmp_xorshift();
-        void skiplist_hrc_base_less_xorshift();
-        void skiplist_hrc_base_cmpmix_xorshift();
-        void skiplist_hrc_base_cmp_xorshift_stat();
-        void skiplist_hrc_base_less_xorshift_stat();
-        void skiplist_hrc_base_cmpmix_xorshift_stat();
-        void skiplist_hrc_base_cmp_pascal();
-        void skiplist_hrc_base_less_pascal();
-        void skiplist_hrc_base_cmpmix_pascal();
-        void skiplist_hrc_base_cmp_pascal_stat();
-        void skiplist_hrc_base_less_pascal_stat();
-        void skiplist_hrc_base_cmpmix_pascal_stat();
-
-        // Skip-list - gc::PTB
-        void skiplist_ptb_base_cmp();
-        void skiplist_ptb_base_less();
-        void skiplist_ptb_base_cmpmix();
-        void skiplist_ptb_base_cmp_stat();
-        void skiplist_ptb_base_less_stat();
-        void skiplist_ptb_base_cmpmix_stat();
-        void skiplist_ptb_base_cmp_xorshift();
-        void skiplist_ptb_base_less_xorshift();
-        void skiplist_ptb_base_cmpmix_xorshift();
-        void skiplist_ptb_base_cmp_xorshift_stat();
-        void skiplist_ptb_base_less_xorshift_stat();
-        void skiplist_ptb_base_cmpmix_xorshift_stat();
-        void skiplist_ptb_base_cmp_pascal();
-        void skiplist_ptb_base_less_pascal();
-        void skiplist_ptb_base_cmpmix_pascal();
-        void skiplist_ptb_base_cmp_pascal_stat();
-        void skiplist_ptb_base_less_pascal_stat();
-        void skiplist_ptb_base_cmpmix_pascal_stat();
-
-        void skiplist_ptb_member_cmp();
-        void skiplist_ptb_member_less();
-        void skiplist_ptb_member_cmpmix();
-        void skiplist_ptb_member_cmp_stat();
-        void skiplist_ptb_member_less_stat();
-        void skiplist_ptb_member_cmpmix_stat();
-        void skiplist_ptb_member_cmp_xorshift();
-        void skiplist_ptb_member_less_xorshift();
-        void skiplist_ptb_member_cmpmix_xorshift();
-        void skiplist_ptb_member_cmp_xorshift_stat();
-        void skiplist_ptb_member_less_xorshift_stat();
-        void skiplist_ptb_member_cmpmix_xorshift_stat();
-        void skiplist_ptb_member_cmp_pascal();
-        void skiplist_ptb_member_less_pascal();
-        void skiplist_ptb_member_cmpmix_pascal();
-        void skiplist_ptb_member_cmp_pascal_stat();
-        void skiplist_ptb_member_less_pascal_stat();
-        void skiplist_ptb_member_cmpmix_pascal_stat();
+        // Skip-list - gc::DHP
+        void skiplist_dhp_base_cmp();
+        void skiplist_dhp_base_less();
+        void skiplist_dhp_base_cmpmix();
+        void skiplist_dhp_base_cmp_stat();
+        void skiplist_dhp_base_less_stat();
+        void skiplist_dhp_base_cmpmix_stat();
+        void skiplist_dhp_base_cmp_xorshift();
+        void skiplist_dhp_base_less_xorshift();
+        void skiplist_dhp_base_cmpmix_xorshift();
+        void skiplist_dhp_base_cmp_xorshift_stat();
+        void skiplist_dhp_base_less_xorshift_stat();
+        void skiplist_dhp_base_cmpmix_xorshift_stat();
+        void skiplist_dhp_base_cmp_pascal();
+        void skiplist_dhp_base_less_pascal();
+        void skiplist_dhp_base_cmpmix_pascal();
+        void skiplist_dhp_base_cmp_pascal_stat();
+        void skiplist_dhp_base_less_pascal_stat();
+        void skiplist_dhp_base_cmpmix_pascal_stat();
+
+        void skiplist_dhp_member_cmp();
+        void skiplist_dhp_member_less();
+        void skiplist_dhp_member_cmpmix();
+        void skiplist_dhp_member_cmp_stat();
+        void skiplist_dhp_member_less_stat();
+        void skiplist_dhp_member_cmpmix_stat();
+        void skiplist_dhp_member_cmp_xorshift();
+        void skiplist_dhp_member_less_xorshift();
+        void skiplist_dhp_member_cmpmix_xorshift();
+        void skiplist_dhp_member_cmp_xorshift_stat();
+        void skiplist_dhp_member_less_xorshift_stat();
+        void skiplist_dhp_member_cmpmix_xorshift_stat();
+        void skiplist_dhp_member_cmp_pascal();
+        void skiplist_dhp_member_less_pascal();
+        void skiplist_dhp_member_cmpmix_pascal();
+        void skiplist_dhp_member_cmp_pascal_stat();
+        void skiplist_dhp_member_less_pascal_stat();
+        void skiplist_dhp_member_cmpmix_pascal_stat();
 
         // Skip-list - gc::nogc
         void skiplist_nogc_base_cmp();
@@ -687,62 +669,43 @@ namespace set {
             CPPUNIT_TEST(skiplist_hp_member_less_pascal_stat)
             CPPUNIT_TEST(skiplist_hp_member_cmpmix_pascal_stat)
 
-            CPPUNIT_TEST(skiplist_hrc_base_cmp)
-            CPPUNIT_TEST(skiplist_hrc_base_less)
-            CPPUNIT_TEST(skiplist_hrc_base_cmpmix)
-            CPPUNIT_TEST(skiplist_hrc_base_cmp_stat)
-            CPPUNIT_TEST(skiplist_hrc_base_less_stat)
-            CPPUNIT_TEST(skiplist_hrc_base_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_hrc_base_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_hrc_base_less_xorshift)
-            CPPUNIT_TEST(skiplist_hrc_base_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_hrc_base_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_hrc_base_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_hrc_base_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_hrc_base_cmp_pascal)
-            CPPUNIT_TEST(skiplist_hrc_base_less_pascal)
-            CPPUNIT_TEST(skiplist_hrc_base_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_hrc_base_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_hrc_base_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_hrc_base_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_ptb_base_cmp)
-            CPPUNIT_TEST(skiplist_ptb_base_less)
-            CPPUNIT_TEST(skiplist_ptb_base_cmpmix)
-            CPPUNIT_TEST(skiplist_ptb_base_cmp_stat)
-            CPPUNIT_TEST(skiplist_ptb_base_less_stat)
-            CPPUNIT_TEST(skiplist_ptb_base_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_ptb_base_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_ptb_base_less_xorshift)
-            CPPUNIT_TEST(skiplist_ptb_base_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_ptb_base_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_ptb_base_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_ptb_base_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_ptb_base_cmp_pascal)
-            CPPUNIT_TEST(skiplist_ptb_base_less_pascal)
-            CPPUNIT_TEST(skiplist_ptb_base_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_ptb_base_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_ptb_base_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_ptb_base_cmpmix_pascal_stat)
-
-            CPPUNIT_TEST(skiplist_ptb_member_cmp)
-            CPPUNIT_TEST(skiplist_ptb_member_less)
-            CPPUNIT_TEST(skiplist_ptb_member_cmpmix)
-            CPPUNIT_TEST(skiplist_ptb_member_cmp_stat)
-            CPPUNIT_TEST(skiplist_ptb_member_less_stat)
-            CPPUNIT_TEST(skiplist_ptb_member_cmpmix_stat)
-            CPPUNIT_TEST(skiplist_ptb_member_cmp_xorshift)
-            CPPUNIT_TEST(skiplist_ptb_member_less_xorshift)
-            CPPUNIT_TEST(skiplist_ptb_member_cmpmix_xorshift)
-            CPPUNIT_TEST(skiplist_ptb_member_cmp_xorshift_stat)
-            CPPUNIT_TEST(skiplist_ptb_member_less_xorshift_stat)
-            CPPUNIT_TEST(skiplist_ptb_member_cmpmix_xorshift_stat)
-            CPPUNIT_TEST(skiplist_ptb_member_cmp_pascal)
-            CPPUNIT_TEST(skiplist_ptb_member_less_pascal)
-            CPPUNIT_TEST(skiplist_ptb_member_cmpmix_pascal)
-            CPPUNIT_TEST(skiplist_ptb_member_cmp_pascal_stat)
-            CPPUNIT_TEST(skiplist_ptb_member_less_pascal_stat)
-            CPPUNIT_TEST(skiplist_ptb_member_cmpmix_pascal_stat)
+            CPPUNIT_TEST(skiplist_dhp_base_cmp)
+            CPPUNIT_TEST(skiplist_dhp_base_less)
+            CPPUNIT_TEST(skiplist_dhp_base_cmpmix)
+            CPPUNIT_TEST(skiplist_dhp_base_cmp_stat)
+            CPPUNIT_TEST(skiplist_dhp_base_less_stat)
+            CPPUNIT_TEST(skiplist_dhp_base_cmpmix_stat)
+            CPPUNIT_TEST(skiplist_dhp_base_cmp_xorshift)
+            CPPUNIT_TEST(skiplist_dhp_base_less_xorshift)
+            CPPUNIT_TEST(skiplist_dhp_base_cmpmix_xorshift)
+            CPPUNIT_TEST(skiplist_dhp_base_cmp_xorshift_stat)
+            CPPUNIT_TEST(skiplist_dhp_base_less_xorshift_stat)
+            CPPUNIT_TEST(skiplist_dhp_base_cmpmix_xorshift_stat)
+            CPPUNIT_TEST(skiplist_dhp_base_cmp_pascal)
+            CPPUNIT_TEST(skiplist_dhp_base_less_pascal)
+            CPPUNIT_TEST(skiplist_dhp_base_cmpmix_pascal)
+            CPPUNIT_TEST(skiplist_dhp_base_cmp_pascal_stat)
+            CPPUNIT_TEST(skiplist_dhp_base_less_pascal_stat)
+            CPPUNIT_TEST(skiplist_dhp_base_cmpmix_pascal_stat)
+
+            CPPUNIT_TEST(skiplist_dhp_member_cmp)
+            CPPUNIT_TEST(skiplist_dhp_member_less)
+            CPPUNIT_TEST(skiplist_dhp_member_cmpmix)
+            CPPUNIT_TEST(skiplist_dhp_member_cmp_stat)
+            CPPUNIT_TEST(skiplist_dhp_member_less_stat)
+            CPPUNIT_TEST(skiplist_dhp_member_cmpmix_stat)
+            CPPUNIT_TEST(skiplist_dhp_member_cmp_xorshift)
+            CPPUNIT_TEST(skiplist_dhp_member_less_xorshift)
+            CPPUNIT_TEST(skiplist_dhp_member_cmpmix_xorshift)
+            CPPUNIT_TEST(skiplist_dhp_member_cmp_xorshift_stat)
+            CPPUNIT_TEST(skiplist_dhp_member_less_xorshift_stat)
+            CPPUNIT_TEST(skiplist_dhp_member_cmpmix_xorshift_stat)
+            CPPUNIT_TEST(skiplist_dhp_member_cmp_pascal)
+            CPPUNIT_TEST(skiplist_dhp_member_less_pascal)
+            CPPUNIT_TEST(skiplist_dhp_member_cmpmix_pascal)
+            CPPUNIT_TEST(skiplist_dhp_member_cmp_pascal_stat)
+            CPPUNIT_TEST(skiplist_dhp_member_less_pascal_stat)
+            CPPUNIT_TEST(skiplist_dhp_member_cmpmix_pascal_stat)
 
             CPPUNIT_TEST(skiplist_nogc_base_cmp)
             CPPUNIT_TEST(skiplist_nogc_base_less)