bugfix in cds::gc::HP::guarded_ptr
[libcds.git] / tests / test-hdr / ordered_list / hdr_intrusive_michael.h
index bbf238566be66f0175e74d5f25fee703a13bcc4e..864dcc1e2595a39663d7bccb8d080780553e0847 100644 (file)
@@ -457,7 +457,6 @@ namespace ordlist {
             static int const nLimit = 20;
             typename OrdList::value_type arrItem[nLimit];
 
-
             {
                 int a[nLimit];
                 for (int i = 0; i < nLimit; ++i)
@@ -474,27 +473,28 @@ namespace ordlist {
                     CPPUNIT_ASSERT( l.insert( arrItem[i] ) );
 
                 for ( int i=0; i < nLimit; ++i ) {
-                    CPPUNIT_ASSERT( l.get( gp, arrItem[i].nKey ));
+                    gp = l.get( arrItem[i].nKey );
+                    CPPUNIT_ASSERT_EX( gp, "i=" << i );
                     CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_ASSERT( gp->nVal == arrItem[i].nVal );
-                    gp.release();
+                    CPPUNIT_CHECK( gp->nKey == arrItem[i].nKey );
+                    CPPUNIT_CHECK( gp->nVal == arrItem[i].nVal );
 
-                    CPPUNIT_ASSERT( l.extract( gp, arrItem[i].nKey ));
+                    gp = l.extract( arrItem[i].nKey );
+                    CPPUNIT_ASSERT_EX( gp, "i=" << i );
                     CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_ASSERT( gp->nVal == arrItem[i].nVal );
-                    gp.release();
-
-                    CPPUNIT_ASSERT( !l.get( gp, arrItem[i].nKey ));
-                    CPPUNIT_ASSERT( gp.empty());
-                    CPPUNIT_ASSERT( !l.extract( gp, arrItem[i].nKey ));
-                    CPPUNIT_ASSERT( gp.empty());
+                    CPPUNIT_CHECK( gp->nKey == arrItem[i].nKey );
+                    CPPUNIT_CHECK( gp->nVal == arrItem[i].nVal );
+
+                    gp = l.get( arrItem[i].nKey );
+                    CPPUNIT_CHECK( !gp );
+                    CPPUNIT_CHECK( gp.empty());
+                    CPPUNIT_CHECK( !l.extract( arrItem[i].nKey ));
+                    CPPUNIT_CHECK( gp.empty());
                 }
                 CPPUNIT_ASSERT( l.empty() );
-                CPPUNIT_ASSERT( !l.get( gp, nLimit/2 ));
+                CPPUNIT_ASSERT( !l.get( nLimit/2 ));
                 CPPUNIT_ASSERT( gp.empty());
-                CPPUNIT_ASSERT( !l.extract( gp, nLimit/2 ));
+                CPPUNIT_ASSERT( !l.extract( nLimit/2 ));
                 CPPUNIT_ASSERT( gp.empty());
 
                 // Apply retired pointer
@@ -506,27 +506,28 @@ namespace ordlist {
 
                 for ( int i=0; i < nLimit; ++i ) {
                     other_item itm( arrItem[i].nKey );
-                    CPPUNIT_ASSERT( l.get_with( gp, itm, other_less() ));
+                    gp = l.get_with( itm, other_less() );
+                    CPPUNIT_ASSERT_EX( gp, "i=" << i );
                     CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_ASSERT( gp->nVal == arrItem[i].nVal );
-                    gp.release();
+                    CPPUNIT_CHECK( gp->nKey == arrItem[i].nKey );
+                    CPPUNIT_CHECK( gp->nVal == arrItem[i].nVal );
 
-                    CPPUNIT_ASSERT( l.extract_with( gp, itm, other_less() ));
+                    gp = l.extract_with( itm, other_less() );
+                    CPPUNIT_ASSERT_EX( gp, "i=" << i );
                     CPPUNIT_ASSERT( !gp.empty());
-                    CPPUNIT_ASSERT( gp->nKey == arrItem[i].nKey );
-                    CPPUNIT_ASSERT( gp->nVal == arrItem[i].nVal );
-                    gp.release();
-
-                    CPPUNIT_ASSERT( !l.get_with( gp, itm, other_less() ));
-                    CPPUNIT_ASSERT( gp.empty());
-                    CPPUNIT_ASSERT( !l.extract_with( gp, itm, other_less() ));
-                    CPPUNIT_ASSERT( gp.empty());
+                    CPPUNIT_CHECK( gp->nKey == arrItem[i].nKey );
+                    CPPUNIT_CHECK( gp->nVal == arrItem[i].nVal );
+
+                    gp = l.get_with( itm, other_less() );
+                    CPPUNIT_CHECK( !gp );
+                    CPPUNIT_CHECK( gp.empty());
+                    CPPUNIT_CHECK( !l.extract_with( itm, other_less() ));
+                    CPPUNIT_CHECK( gp.empty());
                 }
                 CPPUNIT_ASSERT( l.empty() );
-                CPPUNIT_ASSERT( !l.get_with( gp, other_item(nLimit/2), other_less() ));
+                CPPUNIT_ASSERT( !l.get_with( other_item(nLimit/2), other_less() ));
                 CPPUNIT_ASSERT( gp.empty());
-                CPPUNIT_ASSERT( !l.extract_with( gp, other_item(nLimit/2), other_less() ));
+                CPPUNIT_ASSERT( !l.extract_with( other_item(nLimit/2), other_less() ));
                 CPPUNIT_ASSERT( gp.empty());
 
                 // Apply retired pointer
@@ -570,11 +571,13 @@ namespace ordlist {
 
                 for ( int i = 0; i < nLimit; ++i ) {
                     {
-                        rcu_lock lock;
-                        value_type * pGet = l.get( a[i] );
-                        CPPUNIT_ASSERT( pGet != nullptr );
-                        CPPUNIT_CHECK( pGet->nKey == a[i] );
-                        CPPUNIT_CHECK( pGet->nVal == a[i] * 2 );
+                        {
+                            rcu_lock lock;
+                            value_type * pGet = l.get( a[i] );
+                            CPPUNIT_ASSERT( pGet != nullptr );
+                            CPPUNIT_CHECK( pGet->nKey == a[i] );
+                            CPPUNIT_CHECK( pGet->nVal == a[i] * 2 );
+                        }
 
                         ep = l.extract( a[i] );
                         CPPUNIT_ASSERT( ep );
@@ -610,11 +613,13 @@ namespace ordlist {
                 for ( int i = 0; i < nLimit; ++i ) {
                     other_item itm( a[i] );
                     {
-                        rcu_lock lock;
-                        value_type * pGet = l.get_with( itm, other_less() );
-                        CPPUNIT_ASSERT( pGet != nullptr );
-                        CPPUNIT_CHECK( pGet->nKey == a[i] );
-                        CPPUNIT_CHECK( pGet->nVal == a[i] * 2 );
+                        {
+                            rcu_lock lock;
+                            value_type * pGet = l.get_with( itm, other_less() );
+                            CPPUNIT_ASSERT( pGet != nullptr );
+                            CPPUNIT_CHECK( pGet->nKey == a[i] );
+                            CPPUNIT_CHECK( pGet->nVal == a[i] * 2 );
+                        }
 
                         ep = l.extract_with( itm, other_less() );
                         CPPUNIT_ASSERT( ep );