mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-23 14:03:07 +01:00
63 lines
1.7 KiB
C++
63 lines
1.7 KiB
C++
// Copyright (c) 2006-2018 Maxim Khizhinsky
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
// file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
#include <cds_test/ext_gtest.h>
|
|
#include <cds/algo/bit_reversal.h>
|
|
|
|
namespace {
|
|
|
|
template <typename UInt>
|
|
class bit_reversal: public ::testing::Test
|
|
{
|
|
typedef UInt uint_type;
|
|
#ifdef CDS_DEBUG
|
|
static size_t const c_size = 1'000'000;
|
|
#else
|
|
static size_t const c_size = 50'000'000;
|
|
#endif
|
|
|
|
public:
|
|
template <typename Algo>
|
|
void test()
|
|
{
|
|
Algo f;
|
|
for ( uint_type i = 0; i < c_size; ++i ) {
|
|
EXPECT_EQ( i, f( f( i ) ));
|
|
EXPECT_EQ( ~i, f( f( ~i ) ));
|
|
}
|
|
}
|
|
|
|
template <typename Algo>
|
|
void test_eq()
|
|
{
|
|
Algo f;
|
|
for ( uint_type i = 0; i < c_size; ++i ) {
|
|
EXPECT_EQ( cds::algo::bit_reversal::swar()( i ), f( i ) ) << "i=" << i;
|
|
EXPECT_EQ( cds::algo::bit_reversal::swar()( ~i ), f( ~i ) ) << "~i=" << ~i;
|
|
}
|
|
}
|
|
};
|
|
|
|
typedef bit_reversal<uint32_t> bit_reversal32;
|
|
typedef bit_reversal<uint64_t> bit_reversal64;
|
|
|
|
#define TEST_32BIT( x ) \
|
|
TEST_F( bit_reversal32, x ) { test<cds::algo::bit_reversal::x>(); } \
|
|
TEST_F( bit_reversal32, x##_eq ) { test_eq<cds::algo::bit_reversal::x>(); }
|
|
|
|
#define TEST_64BIT( x ) \
|
|
TEST_F( bit_reversal64, x ) { test<cds::algo::bit_reversal::x>(); } \
|
|
TEST_F( bit_reversal64, x##_eq ) { test_eq<cds::algo::bit_reversal::x>(); }
|
|
|
|
TEST_32BIT( swar )
|
|
TEST_32BIT( lookup )
|
|
TEST_32BIT( muldiv )
|
|
|
|
TEST_64BIT( swar )
|
|
TEST_64BIT( lookup )
|
|
TEST_64BIT( muldiv )
|
|
|
|
} // namespace
|