19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 #include "precompiled.hpp"
25
26 #include "utilities/globalDefinitions.hpp"
27 #include "utilities/powerOfTwo.hpp"
28 #include "unittest.hpp"
29
30 template <typename T> T max_pow2() {
31 T max_val = max_value<T>();
32 return max_val - (max_val >> 1);
33 }
34
35 template <typename T> static void test_is_power_of_2() {
36 EXPECT_FALSE(is_power_of_2(T(0)));
37 EXPECT_FALSE(is_power_of_2(~T(0)));
38
39 // Test true
40 for (T i = max_pow2<T>(); i > 0; i = (i >> 1)) {
41 EXPECT_TRUE(is_power_of_2(i)) << "value = " << T(i);
42 }
43
44 // Test one less
45 for (T i = max_pow2<T>(); i > 2; i = (i >> 1)) {
46 EXPECT_FALSE(is_power_of_2(i - 1)) << "value = " << T(i - 1);
47 }
48
49 // Test one more
50 for (T i = max_pow2<T>(); i > 1; i = (i >> 1)) {
51 EXPECT_FALSE(is_power_of_2(i + 1)) << "value = " << T(i + 1);
52 }
53 }
54
55 TEST(power_of_2, is_power_of_2) {
56 test_is_power_of_2<int8_t>();
57 test_is_power_of_2<int16_t>();
58 test_is_power_of_2<int32_t>();
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 #include "precompiled.hpp"
25
26 #include "utilities/globalDefinitions.hpp"
27 #include "utilities/powerOfTwo.hpp"
28 #include "unittest.hpp"
29
30 template <typename T> T max_pow2() {
31 T max_val = max_value<T>();
32 return max_val - (max_val >> 1);
33 }
34
35 template <typename T> static void test_is_power_of_2() {
36 EXPECT_FALSE(is_power_of_2(T(0)));
37 EXPECT_FALSE(is_power_of_2(~T(0)));
38
39 if (IsSigned<T>::value) {
40 EXPECT_FALSE(is_power_of_2(std::numeric_limits<T>::min()));
41 }
42
43 // Test true
44 for (T i = max_pow2<T>(); i > 0; i = (i >> 1)) {
45 EXPECT_TRUE(is_power_of_2(i)) << "value = " << T(i);
46 }
47
48 // Test one less
49 for (T i = max_pow2<T>(); i > 2; i = (i >> 1)) {
50 EXPECT_FALSE(is_power_of_2(i - 1)) << "value = " << T(i - 1);
51 }
52
53 // Test one more
54 for (T i = max_pow2<T>(); i > 1; i = (i >> 1)) {
55 EXPECT_FALSE(is_power_of_2(i + 1)) << "value = " << T(i + 1);
56 }
57 }
58
59 TEST(power_of_2, is_power_of_2) {
60 test_is_power_of_2<int8_t>();
61 test_is_power_of_2<int16_t>();
62 test_is_power_of_2<int32_t>();
|