/*
This file is a part of libcds - Concurrent Data Structures library
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016
+ (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017
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:
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_BRONSON_AVLTREE_MAP_PTR_H
case 0:
ASSERT_TRUE( m.insert( i, &val ));
ASSERT_FALSE( m.insert( i, &val ));
- ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, mapped_type& val ) {
- val.nVal = key.nKey;
- val.strVal = std::to_string( key.nKey );
+ ASSERT_TRUE( m.find( i.nKey, []( key_type const& k, mapped_type& v ) {
+ v.nVal = k.nKey;
+ v.strVal = std::to_string( k.nKey );
} ));
break;
case 1:
ASSERT_TRUE( m.insert( i.nKey, &val ));
ASSERT_FALSE( m.insert( i.nKey, &val ));
- ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, mapped_type& val ) {
- val.nVal = key.nKey;
- val.strVal = std::to_string( key.nKey );
+ ASSERT_TRUE( m.find( i.nKey, []( key_type const& k, mapped_type& v ) {
+ v.nVal = k.nKey;
+ v.strVal = std::to_string( k.nKey );
} ));
break;
case 2:
ASSERT_TRUE( m.insert( std::to_string( i.nKey ), &val ));
ASSERT_FALSE( m.insert( std::to_string( i.nKey ), &val ));
- ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, mapped_type& val ) {
- val.nVal = key.nKey;
- val.strVal = std::to_string( key.nKey );
+ ASSERT_TRUE( m.find( i.nKey, []( key_type const& k, mapped_type& v ) {
+ v.nVal = k.nKey;
+ v.strVal = std::to_string( k.nKey );
} ));
break;
case 3:
ASSERT_TRUE( m.contains( i.nKey ));
ASSERT_TRUE( m.contains( i ));
ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()));
- ASSERT_TRUE( m.find( i, []( key_type const& key, mapped_type& val ) {
- EXPECT_EQ( key.nKey, val.nVal );
- EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+ ASSERT_TRUE( m.find( i, []( key_type const& k, mapped_type& v ) {
+ EXPECT_EQ( k.nKey, v.nVal );
+ EXPECT_EQ( std::to_string( k.nKey ), v.strVal );
} ));
- ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, mapped_type& val ) {
- EXPECT_EQ( key.nKey, val.nVal );
- EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+ ASSERT_TRUE( m.find( i.nKey, []( key_type const& k, mapped_type& v ) {
+ EXPECT_EQ( k.nKey, v.nVal );
+ EXPECT_EQ( std::to_string( k.nKey ), v.strVal );
} ));
- ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const& key, mapped_type& val ) {
- EXPECT_EQ( key.nKey, val.nVal );
- EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+ ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const& k, mapped_type& v ) {
+ EXPECT_EQ( k.nKey, v.nVal );
+ EXPECT_EQ( std::to_string( k.nKey ), v.strVal );
} ));
}
- ASSERT_FALSE( m.empty() );
+ ASSERT_FALSE( m.empty());
ASSERT_CONTAINER_SIZE( m, kkSize );
ASSERT_TRUE( m.check_consistency());
- shuffle( arrKeys.begin(), arrKeys.end() );
+ shuffle( arrKeys.begin(), arrKeys.end());
// erase/find
for ( auto const& i : arrKeys ) {
- value_type const& val( arrVals.at( i.nKey ) );
+ value_type const& val( arrVals.at( i.nKey ));
ASSERT_TRUE( m.contains( i.nKey ));
- ASSERT_TRUE( m.contains( val.strVal ) );
+ ASSERT_TRUE( m.contains( val.strVal ));
ASSERT_TRUE( m.contains( i ));
ASSERT_TRUE( m.contains( other_item( i.nKey ), other_less()));
- ASSERT_TRUE( m.find( i, []( key_type const& key, mapped_type& val ) {
- EXPECT_EQ( key.nKey, val.nVal );
- EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+ ASSERT_TRUE( m.find( i, []( key_type const& k, mapped_type& v ) {
+ EXPECT_EQ( k.nKey, v.nVal );
+ EXPECT_EQ( std::to_string( k.nKey ), v.strVal );
} ));
- ASSERT_TRUE( m.find( i.nKey, []( key_type const& key, mapped_type& val ) {
- EXPECT_EQ( key.nKey, val.nVal );
- EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+ ASSERT_TRUE( m.find( i.nKey, []( key_type const& k, mapped_type& v ) {
+ EXPECT_EQ( k.nKey, v.nVal );
+ EXPECT_EQ( std::to_string( k.nKey ), v.strVal );
} ));
- ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const& key, mapped_type& val ) {
- EXPECT_EQ( key.nKey, val.nVal );
- EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+ ASSERT_TRUE( m.find_with( other_item( i.nKey ), other_less(), []( key_type const& k, mapped_type& v ) {
+ EXPECT_EQ( k.nKey, v.nVal );
+ EXPECT_EQ( std::to_string( k.nKey ), v.strVal );
} ));
ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less()));
break;
case 4:
- ASSERT_TRUE( m.erase( i, []( key_type const& key, mapped_type& val ) {
- EXPECT_EQ( key.nKey, val.nVal );
- EXPECT_EQ( std::to_string( key.nKey ), val.strVal );
+ ASSERT_TRUE( m.erase( i, []( key_type const& k, mapped_type& v ) {
+ EXPECT_EQ( k.nKey, v.nVal );
+ EXPECT_EQ( std::to_string( k.nKey ), v.strVal );
}));
ASSERT_FALSE( m.erase( i, []( key_type const& /*key*/, mapped_type& /*val*/ ) {
EXPECT_TRUE( false );
EXPECT_EQ( key.nKey, v.nVal );
EXPECT_EQ( std::to_string( key.nKey ), v.strVal );
}));
- ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less(), []( key_type const& key, mapped_type& v ) {
+ ASSERT_FALSE( m.erase_with( other_item( i.nKey ), other_less(), []( key_type const& /*key*/, mapped_type& /*v*/ ) {
EXPECT_TRUE( false );
}));
break;
EXPECT_TRUE( false );
} ));
}
- ASSERT_TRUE( m.empty() );
+ ASSERT_TRUE( m.empty());
ASSERT_CONTAINER_SIZE( m, 0 );
Map::gc::force_dispose();
for ( auto const& item: arrVals ) {
- EXPECT_EQ( item.nDisposeCount, 1 );
+ EXPECT_EQ( item.nDisposeCount, 1u );
}
// clear
for ( auto const& i : arrKeys ) {
- value_type& val( arrVals.at( i.nKey ) );
+ value_type& val( arrVals.at( i.nKey ));
ASSERT_TRUE( m.insert( i, &val ));
}
- ASSERT_FALSE( m.empty() );
+ ASSERT_FALSE( m.empty());
ASSERT_CONTAINER_SIZE( m, kkSize );
m.clear();
- ASSERT_TRUE( m.empty() );
+ ASSERT_TRUE( m.empty());
ASSERT_CONTAINER_SIZE( m, 0 );
Map::gc::force_dispose();
for ( auto const& item : arrVals ) {
- EXPECT_EQ( item.nDisposeCount, 2 );
+ EXPECT_EQ( item.nDisposeCount, 2u );
}
- ASSERT_TRUE( m.check_consistency() );
+ ASSERT_TRUE( m.check_consistency());
// RCU-specific test related to exempt_ptr
// extract
for ( auto const& i : arrKeys ) {
- value_type& val( arrVals.at( i.nKey ) );
- ASSERT_TRUE( m.insert( i, &val ) );
+ value_type& val( arrVals.at( i.nKey ));
+ ASSERT_TRUE( m.insert( i, &val ));
}
- ASSERT_FALSE( m.empty() );
+ ASSERT_FALSE( m.empty());
ASSERT_CONTAINER_SIZE( m, kkSize );
for ( auto const& i : arrKeys ) {
value_type const& val = arrVals.at( i.nKey );
- EXPECT_TRUE( m.contains( i.nKey ) );
+ EXPECT_TRUE( m.contains( i.nKey ));
switch ( i.nKey % 4 ) {
case 0:
xp = m.extract( val.strVal );
break;
case 3:
- xp = m.extract_with( other_item( i.nKey ), other_less() );
+ xp = m.extract_with( other_item( i.nKey ), other_less());
break;
}
ASSERT_FALSE( !xp );
EXPECT_EQ( xp->nVal, i.nKey );
- EXPECT_FALSE( m.contains( i.nKey ) );
+ EXPECT_FALSE( m.contains( i.nKey ));
}
- ASSERT_TRUE( m.empty() );
+ ASSERT_TRUE( m.empty());
ASSERT_CONTAINER_SIZE( m, 0 );
xp.release();
Map::gc::force_dispose();
for ( auto const& item : arrVals ) {
- EXPECT_EQ( item.nDisposeCount, 3 );
+ EXPECT_EQ( item.nDisposeCount, 3u );
}
// extract_min
- shuffle( arrKeys.begin(), arrKeys.end() );
+ shuffle( arrKeys.begin(), arrKeys.end());
for ( auto const& i : arrKeys ) {
- value_type& val( arrVals.at( i.nKey ) );
- ASSERT_TRUE( m.insert( i, &val ) );
+ value_type& val( arrVals.at( i.nKey ));
+ ASSERT_TRUE( m.insert( i, &val ));
}
- ASSERT_FALSE( m.empty() );
+ ASSERT_FALSE( m.empty());
ASSERT_CONTAINER_SIZE( m, kkSize );
- ASSERT_TRUE( m.check_consistency() );
+ ASSERT_TRUE( m.check_consistency());
int nPrevKey = -1;
size_t nCount = 0;
- while ( !m.empty() ) {
+ while ( !m.empty()) {
switch ( nCount % 3 ) {
case 0:
xp = m.extract_min();
nPrevKey = xp->nVal;
++nCount;
}
- ASSERT_TRUE( m.empty() );
+ ASSERT_TRUE( m.empty());
ASSERT_CONTAINER_SIZE( m, 0 );
EXPECT_EQ( nCount, kkSize );
xp.release();
Map::gc::force_dispose();
for ( auto const& item : arrVals ) {
- EXPECT_EQ( item.nDisposeCount, 4 );
+ EXPECT_EQ( item.nDisposeCount, 4u );
}
// extract_max
- shuffle( arrKeys.begin(), arrKeys.end() );
+ shuffle( arrKeys.begin(), arrKeys.end());
for ( auto const& i : arrKeys ) {
- value_type& val( arrVals.at( i.nKey ) );
- ASSERT_TRUE( m.insert( i, &val ) );
+ value_type& val( arrVals.at( i.nKey ));
+ ASSERT_TRUE( m.insert( i, &val ));
}
- ASSERT_FALSE( m.empty() );
+ ASSERT_FALSE( m.empty());
ASSERT_CONTAINER_SIZE( m, kkSize );
- ASSERT_TRUE( m.check_consistency() );
+ ASSERT_TRUE( m.check_consistency());
nPrevKey = static_cast<int>(kkSize);
nCount = 0;
- while ( !m.empty() ) {
+ while ( !m.empty()) {
switch ( nCount % 3 ) {
case 0:
xp = m.extract_max();
nPrevKey = xp->nVal;
++nCount;
}
- ASSERT_TRUE( m.empty() );
+ ASSERT_TRUE( m.empty());
ASSERT_CONTAINER_SIZE( m, 0 );
EXPECT_EQ( nCount, kkSize );
xp.release();
Map::gc::force_dispose();
for ( auto const& item : arrVals ) {
- EXPECT_EQ( item.nDisposeCount, 5 );
+ EXPECT_EQ( item.nDisposeCount, 5u );
}
// extract min/max on empty map
}
// checking empty map
- ASSERT_TRUE( m.check_consistency() );
+ ASSERT_TRUE( m.check_consistency());
}
};