1
0
forked from 0ad/0ad
0ad/source/lib/tests/test_bits.h
janwas a34b759720 . split up lib.h/.cpp, include the remnants from PCH, remove (pretty much universal) include of it.
. timer, config: fix definition of ALLOW_RDTSC
. add movsx_be64 (for whirlpool), revise implementation, move to
byte_order, add test
. MAX -> std::max, remove those macros
. add timestamp to system_info as requested by philip

This was SVN commit r5050.
2007-05-09 21:01:11 +00:00

75 lines
2.1 KiB
C++

#include "lib/self_test.h"
#include "lib/bits.h"
class TestLib : public CxxTest::TestSuite
{
public:
void test_is_pow2()
{
TS_ASSERT_EQUALS(is_pow2(0u), false);
TS_ASSERT_EQUALS(is_pow2(~0u), false);
TS_ASSERT_EQUALS(is_pow2(0x80000001), false);
TS_ASSERT_EQUALS(is_pow2(1), true);
TS_ASSERT_EQUALS(is_pow2(1u << 31), true);
}
void test_log2_of_pow2()
{
TS_ASSERT_EQUALS(log2_of_pow2(0u), -1);
TS_ASSERT_EQUALS(log2_of_pow2(3u), -1);
TS_ASSERT_EQUALS(log2_of_pow2(0xffffffffu), -1);
TS_ASSERT_EQUALS(log2_of_pow2(1u), 0);
TS_ASSERT_EQUALS(log2_of_pow2(256u), 8);
TS_ASSERT_EQUALS(log2_of_pow2(0x80000000u), 31);
}
void test_ceil_log2()
{
TS_ASSERT_EQUALS(ceil_log2(3u), 2u);
TS_ASSERT_EQUALS(ceil_log2(0xffffffffu), 32u);
TS_ASSERT_EQUALS(ceil_log2(1u), 0u);
TS_ASSERT_EQUALS(ceil_log2(256u), 8u);
TS_ASSERT_EQUALS(ceil_log2(0x80000000u), 31u);
}
void test_ilog2f()
{
TS_ASSERT_EQUALS(ilog2(1.f), 0);
TS_ASSERT_EQUALS(ilog2(3.f), 1);
TS_ASSERT_EQUALS(ilog2(256.f), 8);
}
void test_round_up_to_pow2()
{
TS_ASSERT_EQUALS(round_up_to_pow2(0u), 1u);
TS_ASSERT_EQUALS(round_up_to_pow2(1u), 2u);
TS_ASSERT_EQUALS(round_up_to_pow2(127u), 128u);
TS_ASSERT_EQUALS(round_up_to_pow2(128u), 256u);
TS_ASSERT_EQUALS(round_up_to_pow2(129u), 256u);
}
void test_round_up()
{
TS_ASSERT_EQUALS(round_up( 0u, 16u), 0u);
TS_ASSERT_EQUALS(round_up( 4u, 16u), 16u);
TS_ASSERT_EQUALS(round_up(15u, 16u), 16u);
TS_ASSERT_EQUALS(round_up(20u, 32u), 32u);
TS_ASSERT_EQUALS(round_up(29u, 32u), 32u);
TS_ASSERT_EQUALS(round_up(0x1000u, 0x1000u), 0x1000u);
TS_ASSERT_EQUALS(round_up(0x1001u, 0x1000u), 0x2000u);
TS_ASSERT_EQUALS(round_up(0x1900u, 0x1000u), 0x2000u);
}
void test_round_down()
{
TS_ASSERT_EQUALS(round_down( 0u, 16u), 0u);
TS_ASSERT_EQUALS(round_down( 4u, 16u), 0u);
TS_ASSERT_EQUALS(round_down(15u, 16u), 0u);
TS_ASSERT_EQUALS(round_down(20u, 16u), 16u);
TS_ASSERT_EQUALS(round_down(29u, 16u), 16u);
TS_ASSERT_EQUALS(round_down(0x1900u, 0x1000u), 0x1000u);
TS_ASSERT_EQUALS(round_down(0x2001u, 0x2000u), 0x2000u);
}
};