1// { dg-options "-std=gnu++11" }
2// { dg-require-cstdint "" }
3
4// Copyright (C) 2008-2015 Free Software Foundation, Inc.
5//
6// This file is part of the GNU ISO C++ Library.  This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 3, or (at your option)
10// any later version.
11
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15// GNU General Public License for more details.
16
17// You should have received a copy of the GNU General Public License along
18// with this library; see the file COPYING3.  If not see
19// <http://www.gnu.org/licenses/>.
20
21// 20.8.3 Class template duration [time.duration]
22
23#include <chrono>
24#include <testsuite_hooks.h>
25
26// 20.8.3.3 duration arithmetic [time.duration.arithmetic] (unary member ops)
27void
28test01()
29{
30  bool test __attribute__((unused)) = true;
31  using namespace std::chrono;
32
33  duration<int> d0(3);
34  duration<int> d1 = -d0;
35  VERIFY(d0.count() == 3);
36  VERIFY(d1.count() == -3);
37
38  duration<int> d2 = (+d0);
39  VERIFY(d2.count() == 3);
40
41  duration<int> d3(++d2);
42  VERIFY(d2.count() == 4);
43  VERIFY(d3.count() == 4);
44
45  duration<int> d4(d3++);
46  VERIFY(d3.count() == 5);
47  VERIFY(d4.count() == 4);
48
49  duration<int> d5(--d4);
50  VERIFY(d4.count() == 3);
51  VERIFY(d5.count() == 3);
52
53  duration<int> d6(d5--);
54  VERIFY(d5.count() == 2);
55  VERIFY(d6.count() == 3);
56}
57
58// 20.8.3.3 duration arithmetic [time.duration.arithmetic] (binary member ops)
59void
60test02()
61{
62  bool test __attribute__((unused)) = true;
63  using namespace std::chrono;
64
65  duration<int> d7(3);
66  duration<int> d8(9);
67  d7 += d8;
68  VERIFY(d7.count() == 12);
69  VERIFY(d8.count() == 9);
70
71  duration<int> d9(3);
72  duration<int> d10(9);
73  d9 -= d10;
74  VERIFY(d9.count() == -6);
75  VERIFY(d10.count() == 9);
76
77  duration<int> d11(9);
78  int i = 3;
79  d11 *= i;
80  VERIFY(d11.count() == 27);
81
82  duration<int> d12(12);
83  d12 /= i;
84  VERIFY(d12.count() == 4);
85}
86
87int
88main()
89{
90  test01();
91  test02();
92  return 0;
93}
94