/*
- * Copyright 2017 Facebook, Inc.
+ * Copyright 2017-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
EXPECT_EQ(6ull, a);
EXPECT_TRUE((std::is_same<decltype(v), decltype(a)>::value));
}
+
+TEST_F(ConstexprMathTest, constexpr_log2_ceil_1) {
+ constexpr auto v = 1ull;
+ constexpr auto a = folly::constexpr_log2_ceil(v);
+ EXPECT_EQ(0ull, a);
+ EXPECT_TRUE((std::is_same<decltype(v), decltype(a)>::value));
+}
+
+TEST_F(ConstexprMathTest, constexpr_log2_ceil_2) {
+ constexpr auto v = 2ull;
+ constexpr auto a = folly::constexpr_log2_ceil(v);
+ EXPECT_EQ(1ull, a);
+ EXPECT_TRUE((std::is_same<decltype(v), decltype(a)>::value));
+}
+
+TEST_F(ConstexprMathTest, constexpr_log2_ceil_3) {
+ constexpr auto v = 3ull;
+ constexpr auto a = folly::constexpr_log2_ceil(v);
+ EXPECT_EQ(2ull, a);
+ EXPECT_TRUE((std::is_same<decltype(v), decltype(a)>::value));
+}
+
+TEST_F(ConstexprMathTest, constexpr_log2_ceil_63) {
+ constexpr auto v = 63ull;
+ constexpr auto a = folly::constexpr_log2_ceil(v);
+ EXPECT_EQ(6ull, a);
+ EXPECT_TRUE((std::is_same<decltype(v), decltype(a)>::value));
+}
+
+TEST_F(ConstexprMathTest, constexpr_log2_ceil_64) {
+ constexpr auto v = 64ull;
+ constexpr auto a = folly::constexpr_log2_ceil(v);
+ EXPECT_EQ(6ull, a);
+ EXPECT_TRUE((std::is_same<decltype(v), decltype(a)>::value));
+}
+
+TEST_F(ConstexprMathTest, constexpr_ceil) {
+ {
+ constexpr auto roundable = 20ull;
+ constexpr auto round = 6ull;
+ constexpr auto rounded = folly::constexpr_ceil(roundable, round);
+ EXPECT_EQ(24ull, rounded);
+ }
+ {
+ constexpr auto roundable = -20ll;
+ constexpr auto round = 6ll;
+ constexpr auto rounded = folly::constexpr_ceil(roundable, round);
+ EXPECT_EQ(-18ll, rounded);
+ }
+ {
+ constexpr auto roundable = -20ll;
+ constexpr auto round = 0ll;
+ constexpr auto rounded = folly::constexpr_ceil(roundable, round);
+ EXPECT_EQ(-20ll, rounded);
+ }
+}
+
+TEST_F(ConstexprMathTest, constexpr_pow) {
+ {
+ constexpr auto a = folly::constexpr_pow(uint64_t(0), 15);
+ EXPECT_EQ(0, a);
+ }
+ {
+ constexpr auto a = folly::constexpr_pow(uint64_t(15), 0);
+ EXPECT_EQ(1, a);
+ }
+ {
+ constexpr auto a = folly::constexpr_pow(uint64_t(2), 6);
+ EXPECT_EQ(64, a);
+ }
+}