//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++03, c++11, c++14, c++17
// <chrono>

// template <class Duration>
// class hh_mm_ss
//
// constexpr precision to_duration() const noexcept;
//
// See the table in hours.pass.cpp for correspondence between the magic values used below

#include <chrono>
#include <cassert>
#include <ratio>
#include <utility>

#include "test_macros.h"

template <typename Duration>
constexpr long long check_duration(Duration d)
{
    using HMS = std::chrono::hh_mm_ss<Duration>;
    ASSERT_SAME_TYPE(typename HMS::precision, decltype(std::declval<HMS>().to_duration()));
    ASSERT_NOEXCEPT(                                   std::declval<HMS>().to_duration());

    return HMS(d).to_duration().count();
}

int main(int, char**)
{
    using microfortnights = std::chrono::duration<int, std::ratio<756, 625>>;

    static_assert( check_duration(std::chrono::minutes( 1)) ==  60, "");
    static_assert( check_duration(std::chrono::minutes(-1)) == -60, "");

    assert( check_duration(std::chrono::seconds( 5000)) ==    5000LL);
    assert( check_duration(std::chrono::seconds(-5000)) ==   -5000LL);
    assert( check_duration(std::chrono::minutes( 5000)) ==  300000LL);
    assert( check_duration(std::chrono::minutes(-5000)) == -300000LL);
    assert( check_duration(std::chrono::hours( 11))     ==   39600LL);
    assert( check_duration(std::chrono::hours(-11))     ==  -39600LL);

    assert( check_duration(std::chrono::milliseconds( 123456789LL)) ==  123456789LL);
    assert( check_duration(std::chrono::milliseconds(-123456789LL)) == -123456789LL);
    assert( check_duration(std::chrono::microseconds( 123456789LL)) ==  123456789LL);
    assert( check_duration(std::chrono::microseconds(-123456789LL)) == -123456789LL);
    assert( check_duration(std::chrono::nanoseconds( 123456789LL))  ==  123456789LL);
    assert( check_duration(std::chrono::nanoseconds(-123456789LL))  == -123456789LL);

    assert( check_duration(microfortnights(  1000)) ==   12096000);
    assert( check_duration(microfortnights( -1000)) ==  -12096000);
    assert( check_duration(microfortnights( 10000)) ==  120960000);
    assert( check_duration(microfortnights(-10000)) == -120960000);

    return 0;
}
