// Test for boost/core/bit.hpp (bit_ceil) // // Copyright 2020 Peter Dimov // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include #include #include template void test_bit_ceil( T x ) { if( !boost::core::has_single_bit( x ) ) { x >>= 1; } T y = boost::core::bit_ceil( x ); if( x == 0 ) { BOOST_TEST_EQ( y, 0 ); } else { BOOST_TEST( boost::core::has_single_bit( y ) ); BOOST_TEST_GE( +y, +x ); BOOST_TEST_LT( y >> 1, +x ); } } int main() { { test_bit_ceil( static_cast( 0 ) ); test_bit_ceil( static_cast( 0 ) ); test_bit_ceil( static_cast( 0 ) ); test_bit_ceil( static_cast( 0 ) ); test_bit_ceil( static_cast( 0 ) ); } { test_bit_ceil( static_cast( 0x80 ) ); test_bit_ceil( static_cast( 0x8000 ) ); test_bit_ceil( static_cast( 0x80000000 ) ); test_bit_ceil( static_cast( 0x8000000000000000 ) ); } boost::detail::splitmix64 rng; for( int i = 0; i < 1000; ++i ) { boost::uint64_t x = rng(); test_bit_ceil( static_cast( x ) ); test_bit_ceil( static_cast( x ) ); test_bit_ceil( static_cast( x ) ); test_bit_ceil( static_cast( x ) ); test_bit_ceil( static_cast( x ) ); } return boost::report_errors(); }