]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/20_util/duration/cons/2.cc
1 // { dg-options "-std=gnu++11" }
2 // { dg-require-cstdint "" }
4 // Copyright (C) 2008-2015 Free Software Foundation, Inc.
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)
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.
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/>.
21 // 20.8.3 Class template duration [time.duration]
24 #include <type_traits>
25 #include <testsuite_hooks.h>
30 type_emulator() : i(T(0)) { }
31 type_emulator(T j
) : i(j
) { }
32 type_emulator(const type_emulator
& e
) : i(e
.i
) { }
34 type_emulator
& operator*=(type_emulator a
)
35 { i
*= a
.i
; return *this; }
37 type_emulator
& operator+=(type_emulator a
)
38 { i
+= a
.i
; return *this; }
40 operator T () { return i
; }
45 bool operator==(type_emulator
<T
> a
, type_emulator
<T
> b
)
46 { return a
.i
== b
.i
; }
49 bool operator<(type_emulator
<T
> a
, type_emulator
<T
> b
)
53 type_emulator
<T
> operator+(type_emulator
<T
> a
, type_emulator
<T
> b
)
57 type_emulator
<T
> operator*(type_emulator
<T
> a
, type_emulator
<T
> b
)
62 template<typename T
, typename U
>
63 struct common_type
<type_emulator
<T
>, U
>
64 { typedef typename common_type
<T
,U
>::type type
; };
66 template<typename T
, typename U
>
67 struct common_type
<U
, type_emulator
<T
>>
68 { typedef typename common_type
<U
,T
>::type type
; };
70 template<typename T
, typename U
>
71 struct common_type
<type_emulator
<T
>, type_emulator
<U
>>
72 { typedef typename common_type
<T
,U
>::type type
; };
77 struct treat_as_floating_point
<type_emulator
<T
>>
78 : is_floating_point
<T
>
83 typedef type_emulator
<int> int_emulator
;
84 typedef type_emulator
<double> dbl_emulator
;
86 // 20.8.3.1 duration constructors [time.duration.cons]
90 bool test
__attribute__((unused
)) = true;
91 using namespace std::chrono
;
94 duration
<int> d0_copy(d0
);
95 VERIFY(d0_copy
.count() == d0
.count());
97 duration
<int, std::milli
> d1(5);
98 duration
<int, std::micro
> d1_copy(d1
);
99 VERIFY(d1
.count() * 1000 == d1_copy
.count());
101 duration
<double, std::micro
> d2(8.0);
102 duration
<double, std::milli
> d2_copy(d2
);
103 VERIFY(d2
.count() == d2_copy
.count() * 1000.0);
105 duration
<int_emulator
, std::milli
> d3(5);
106 duration
<int_emulator
, std::micro
> d3_copy(d3
);
107 VERIFY(d3
.count() * 1000 == d3_copy
.count());
109 duration
<dbl_emulator
, std::micro
> d4(5.0);
110 duration
<dbl_emulator
, std::milli
> d4_copy(d4
);
111 VERIFY(d4
.count() == d4_copy
.count() * dbl_emulator(1000.0));