@@ -37,23 +37,21 @@ static_assert(power(3, 0u) == 1u);
3737static_assert (power(3u , 0u ) == 1u );
3838static_assert (power(3 , 10u ) == 0xe6a9_size);
3939static_assert (power(3u , 10u ) == 0xe6a9_size);
40- static_assert (power<uint16_t >(3 , 11u ) == 0xb3fb_u16);
4140
4241static_assert (power(-1 , 0u ) == 1u );
4342static_assert (power(-1 , 1u ) == 1_nsize);
4443
4544static_assert (power(-3 , 0u ) == 1u );
4645static_assert (power(-3 , 1u ) == 3_nsize);
4746static_assert (power(-3 , 10u ) == 0xe6a9_size);
48- static_assert (power<uint16_t >(-3 , 11u ) == 0x4c05_u16);
4947
5048// power2
5149static_assert (power2(0u ) == 1u );
5250static_assert (power2(0u ) == 1u );
5351static_assert (power2(1u ) == 2u );
5452static_assert (power2(1u ) == 2u );
5553static_assert (power2<uint16_t >(15u ) == 0b1000'0000'0000' 0000_u16);
56- static_assert (power2<uint16_t >(16u ) == 0_u16);
54+ static_assert (power2<uint16_t >(16u ) == 0_u16); // overflow
5755
5856// power<>
5957static_assert (power<0 >(16u ) == power(0u , 16u ));
@@ -66,10 +64,25 @@ static_assert(power<3, size_t>(0u) == 1u);
6664// uint256_t
6765static_assert (power<2u , uint256_t >(10u ) == 1024u );
6866
69- // uintx is not constexpr.
67+
68+ // floating point
69+ static_assert (is_same_type<decltype (power(0 .0f , 0u )), float >);
70+ static_assert (is_same_type<decltype (power(0.0 , 0u )), double >);
71+
72+ static_assert (power(0 .0f , 0u ) == 0 .0f );
73+ static_assert (power(0.0 , 0u ) == 0.0 );
74+ static_assert (power(1.0 , 0u ) == 1.0 );
75+ static_assert (power(1.0 , 1u ) == 1.0 );
76+ static_assert (power(2.0 , 1u ) == 2.0 );
77+ static_assert (power(2.0 , 2u ) == 4.0 );
78+ static_assert (power(3.0 , 3u ) == 27.0 );
79+
80+ // Actually 311.1696 but this is the floating point representation.
81+ static_assert (power(4.2 , 4u ) == 311.16960000000006 );
7082
7183BOOST_AUTO_TEST_SUITE (power_tests)
7284
85+ // uintx is not constexpr.
7386BOOST_AUTO_TEST_CASE(power_uintx_tests)
7487{
7588 BOOST_REQUIRE (true );
0 commit comments