/*
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.
*/
#include "test_intrusive_feldman_hashset_hp.h"
void SetUp()
{
- typedef ci::FeldmanHashSet< gc_type, int_item,
+ typedef ci::FeldmanHashSet< gc_type, int_item,
typename ci::feldman_hashset::make_traits<
ci::feldman_hashset::hash_accessor< hash_accessor >
,ci::opt::less< std::less<int>>
>::type
> set_type;
- cds::gc::dhp::GarbageCollector::Construct( 16, set_type::c_nHazardPtrCount );
+ cds::gc::dhp::smr::construct( set_type::c_nHazardPtrCount );
cds::threading::Manager::attachThread();
}
void TearDown()
{
cds::threading::Manager::detachThread();
- cds::gc::dhp::GarbageCollector::Destruct();
+ cds::gc::dhp::smr::destruct();
}
};
test( s );
}
+ TEST_F( IntrusiveFeldmanHashSet_DHP, explicit_hash_size )
+ {
+ struct traits: public ci::feldman_hashset::traits
+ {
+ typedef base_class::hash_accessor2 hash_accessor;
+ enum: size_t {
+ hash_size = sizeof( std::declval<key_val>().nKey )
+ };
+ typedef base_class::cmp2 compare;
+ typedef mock_disposer disposer;
+ typedef ci::feldman_hashset::stat<> stat;
+ };
+
+ typedef ci::FeldmanHashSet< gc_type, int_item2, traits > set_type;
+
+ set_type s( 8, 3 );
+ test( s );
+ }
+
+ TEST_F( IntrusiveFeldmanHashSet_DHP, byte_cut )
+ {
+ struct traits: public ci::feldman_hashset::traits
+ {
+ typedef base_class::hash_accessor hash_accessor;
+ typedef cds::algo::byte_splitter< int > hash_splitter;
+ typedef cmp compare;
+ typedef std::less<int> less;
+ typedef mock_disposer disposer;
+ typedef simple_item_counter item_counter;
+ };
+
+ typedef ci::FeldmanHashSet< gc_type, int_item, traits > set_type;
+
+ set_type s( 8, 8 );
+ test( s );
+ }
+
+ TEST_F( IntrusiveFeldmanHashSet_DHP, byte_cut_explicit_hash_size )
+ {
+ struct traits: public ci::feldman_hashset::traits
+ {
+ typedef base_class::hash_accessor2 hash_accessor;
+ typedef cds::algo::byte_splitter< key_val > hash_splitter;
+ enum: size_t {
+ hash_size = sizeof( std::declval<key_val>().nKey )
+ };
+ typedef base_class::cmp2 compare;
+ typedef mock_disposer disposer;
+ typedef ci::feldman_hashset::stat<> stat;
+ };
+
+ typedef ci::FeldmanHashSet< gc_type, int_item2, traits > set_type;
+
+ set_type s( 8, 8 );
+ test( s );
+ }
+
} // namespace