diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 376cc52..76d0386 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -228,6 +228,7 @@ run bit_countr_test.cpp ; run bit_countl_test.cpp ; run bit_width_test.cpp ; run has_single_bit_test.cpp ; +run bit_floor_test.cpp ; use-project /boost/core/swap : ./swap ; build-project ./swap ; diff --git a/test/bit_floor_test.cpp b/test/bit_floor_test.cpp new file mode 100644 index 0000000..c6e509e --- /dev/null +++ b/test/bit_floor_test.cpp @@ -0,0 +1,53 @@ +// Test for boost/core/bit.hpp (bit_floor) +// +// 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_floor( T x ) +{ + T y = boost::core::bit_floor( x ); + + if( x == 0 ) + { + BOOST_TEST_EQ( y, 0 ); + } + else + { + BOOST_TEST( boost::core::has_single_bit( y ) ); + BOOST_TEST_LE( y, x ); + BOOST_TEST_GT( y, x >> 1 ); + } +} + +int main() +{ + { + test_bit_floor( static_cast( 0 ) ); + test_bit_floor( static_cast( 0 ) ); + test_bit_floor( static_cast( 0 ) ); + test_bit_floor( static_cast( 0 ) ); + test_bit_floor( static_cast( 0 ) ); + } + + boost::detail::splitmix64 rng; + + for( int i = 0; i < 1/*000*/; ++i ) + { + boost::uint64_t x = rng(); + + test_bit_floor( static_cast( x ) ); + test_bit_floor( static_cast( x ) ); + test_bit_floor( static_cast( x ) ); + test_bit_floor( static_cast( x ) ); + test_bit_floor( static_cast( x ) ); + } + + return boost::report_errors(); +}