Commit 6f276e25 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Facebook Github Bot

folly::chrono::abs, backporting std::chrono::abs

Summary: [Folly] `folly::chrono::abs`, backporting `std::chrono::abs`.

Reviewed By: nbronson

Differential Revision: D13584287

fbshipit-source-id: 92adbfcdac34d89674e6494af4ff3329d2f6974a
parent 291c761f
......@@ -36,6 +36,7 @@
namespace folly {
namespace chrono {
/* using override */ using std::chrono::abs;
/* using override */ using std::chrono::ceil;
/* using override */ using std::chrono::floor;
/* using override */ using std::chrono::round;
......@@ -81,6 +82,18 @@ constexpr To round_impl(Duration const& d, To const& t0) {
}
} // namespace detail
// mimic: std::chrono::abs, C++17
template <
typename Rep,
typename Period,
typename = typename std::enable_if<
std::chrono::duration<Rep, Period>::min() <
std::chrono::duration<Rep, Period>::zero()>::type>
constexpr std::chrono::duration<Rep, Period> abs(
std::chrono::duration<Rep, Period> const& d) {
return d < std::chrono::duration<Rep, Period>::zero() ? -d : d;
}
// mimic: std::chrono::ceil, C++17
// from: http://en.cppreference.com/w/cpp/chrono/duration/ceil, CC-BY-SA
template <
......
......@@ -25,6 +25,11 @@ namespace {
class ChronoTest : public testing::Test {};
} // namespace
TEST_F(ChronoTest, abs_duration) {
EXPECT_EQ(seconds(7), abs(seconds(7)));
EXPECT_EQ(seconds(7), abs(seconds(-7)));
}
TEST_F(ChronoTest, ceil_duration) {
EXPECT_EQ(seconds(7), ceil<seconds>(seconds(7)));
EXPECT_EQ(seconds(7), ceil<seconds>(milliseconds(7000)));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment