// { dg-do run { target c++14 } }

// Copyright (C) 2013-2021 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3.  If not see
// <http://www.gnu.org/licenses/>.

#include <chrono>
#include <testsuite_hooks.h>

void
test03()
{
  using namespace std::literals::chrono_literals;

  auto jiffy = 23ns;
  VERIFY( jiffy == std::chrono::nanoseconds(23) );
  auto fjiffy = 23.0ns;
  VERIFY( (fjiffy == std::chrono::duration<long double, std::nano>(23.0L)) );
  auto blip = 14us;
  VERIFY( blip == std::chrono::microseconds(14) );
  auto fblip = 14.0us;
  VERIFY( (fblip == std::chrono::duration<long double, std::micro>(14.0L)) );
  auto bit = 77ms;
  VERIFY( bit == std::chrono::milliseconds(77) );
  auto fbit = 77.0ms;
  VERIFY( (fbit == std::chrono::duration<long double, std::milli>(77.0L)) );
  auto warmup = 33s;
  VERIFY( warmup == std::chrono::seconds(33) );
  auto fwarmup = 33.0s;
  VERIFY( (fwarmup == std::chrono::duration<long double, std::ratio<1,1>>(33.0L)) );
  auto classtime = 50min;
  VERIFY( classtime == std::chrono::minutes(50) );
  auto fclasstime = 50.0min;
  VERIFY( (fclasstime == std::chrono::duration<long double, std::ratio<60,1>>(50.0L)) );
  auto longtime = 1h + 30min;
  VERIFY( longtime == std::chrono::minutes(90) );
  auto flongtime = 1.0h + 30.0min;
  VERIFY( (flongtime == std::chrono::duration<long double, std::ratio<3600,1>>(1.0L)
		      + std::chrono::duration<long double, std::ratio<60,1>>(30.0L)) );
  VERIFY( (flongtime == std::chrono::duration<long double, std::ratio<60,1>>(90.0L)) );
  auto workday = 8h;
  VERIFY( workday == std::chrono::hours(8) );
  auto fworkday = 8.0h;
  VERIFY( (fworkday == std::chrono::duration<long double, std::ratio<3600,1>>(8.0L)) );
  auto immediate = 0s;
  VERIFY( immediate == std::chrono::seconds(0) );
  auto minute_ago = -1min;
  VERIFY( minute_ago == std::chrono::minutes(-1) );
  auto separated = 1'000'000s;
  VERIFY( separated == std::chrono::seconds(1'000'000) );
}

int
main()
{
  test03();
}
