diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2012-07-13 19:17:27 +0000 |
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2012-07-13 19:17:27 +0000 |
| commit | c033115394832fb4a9a617de292bd8f1b5738434 (patch) | |
| tree | 28ead16885a9285213217854c852bb65052d7625 /libcxx/test/utilities/time/time.duration | |
| parent | 5ddcfda8efd4dc8aad8124a0dd459e636da72ab0 (diff) | |
| download | bcm5719-llvm-c033115394832fb4a9a617de292bd8f1b5738434.tar.gz bcm5719-llvm-c033115394832fb4a9a617de292bd8f1b5738434.zip | |
Applied constexpr to <chrono>.
llvm-svn: 160184
Diffstat (limited to 'libcxx/test/utilities/time/time.duration')
21 files changed, 333 insertions, 2 deletions
diff --git a/libcxx/test/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp index 3103b238c96..c0f10147ee8 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp @@ -18,7 +18,16 @@ int main() { + { const std::chrono::minutes m(3); std::chrono::minutes m2 = +m; assert(m.count() == m2.count()); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::minutes m(3); + constexpr std::chrono::minutes m2 = +m; + static_assert(m.count() == m2.count(), ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp index aa7f74813b6..00da6f69ca5 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp @@ -18,7 +18,16 @@ int main() { + { const std::chrono::minutes m(3); std::chrono::minutes m2 = -m; assert(m2.count() == -m.count()); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::minutes m(3); + constexpr std::chrono::minutes m2 = -m; + static_assert(m2.count() == -m.count(), ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp index 053ab9980ab..1c87fcd909e 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp @@ -12,6 +12,7 @@ // duration // template <class ToDuration, class Rep, class Period> +// constexpr // ToDuration // duration_cast(const duration<Rep, Period>& d); @@ -23,9 +24,11 @@ template <class ToDuration, class FromDuration> void test(const FromDuration& f, const ToDuration& d) { + { typedef decltype(std::chrono::duration_cast<ToDuration>(f)) R; static_assert((std::is_same<R, ToDuration>::value), ""); assert(std::chrono::duration_cast<ToDuration>(f) == d); + } } int main() @@ -40,4 +43,10 @@ int main() std::chrono::duration<double, std::ratio<3600> >(7265./3600)); test(std::chrono::duration<int, std::ratio<2, 3> >(9), std::chrono::duration<int, std::ratio<3, 5> >(10)); +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::hours h = std::chrono::duration_cast<std::chrono::hours>(std::chrono::milliseconds(7265000)); + static_assert(h.count() == 2, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp index 154d43dc0c8..2d0dd94d4cf 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp @@ -12,10 +12,12 @@ // duration // template <class Rep1, class Period1, class Rep2, class Period2> +// constexpr // bool // operator==(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs); // template <class Rep1, class Period1, class Rep2, class Period2> +// constexpr // bool // operator!=(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs); @@ -66,4 +68,48 @@ int main() assert(s1 == s2); assert(!(s1 != s2)); } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::seconds s1(3); + constexpr std::chrono::seconds s2(3); + static_assert(s1 == s2, ""); + static_assert(!(s1 != s2), ""); + } + { + constexpr std::chrono::seconds s1(3); + constexpr std::chrono::seconds s2(4); + static_assert(!(s1 == s2), ""); + static_assert(s1 != s2, ""); + } + { + constexpr std::chrono::milliseconds s1(3); + constexpr std::chrono::microseconds s2(3000); + static_assert(s1 == s2, ""); + static_assert(!(s1 != s2), ""); + } + { + constexpr std::chrono::milliseconds s1(3); + constexpr std::chrono::microseconds s2(4000); + static_assert(!(s1 == s2), ""); + static_assert(s1 != s2, ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(9); + constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(10); + static_assert(s1 == s2, ""); + static_assert(!(s1 != s2), ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(10); + constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(9); + static_assert(!(s1 == s2), ""); + static_assert(s1 != s2, ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(9); + constexpr std::chrono::duration<double, std::ratio<3, 5> > s2(10); + static_assert(s1 == s2, ""); + static_assert(!(s1 != s2), ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp index daf7e89a5aa..9d875579f32 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp @@ -12,18 +12,22 @@ // duration // template <class Rep1, class Period1, class Rep2, class Period2> +// constexpr // bool // operator< (const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs); // template <class Rep1, class Period1, class Rep2, class Period2> +// constexpr // bool // operator> (const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs); // template <class Rep1, class Period1, class Rep2, class Period2> +// constexpr // bool // operator<=(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs); // template <class Rep1, class Period1, class Rep2, class Period2> +// constexpr // bool // operator>=(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs); @@ -88,4 +92,62 @@ int main() assert( (s1 <= s2)); assert( (s1 >= s2)); } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::seconds s1(3); + constexpr std::chrono::seconds s2(3); + static_assert(!(s1 < s2), ""); + static_assert(!(s1 > s2), ""); + static_assert( (s1 <= s2), ""); + static_assert( (s1 >= s2), ""); + } + { + constexpr std::chrono::seconds s1(3); + constexpr std::chrono::seconds s2(4); + static_assert( (s1 < s2), ""); + static_assert(!(s1 > s2), ""); + static_assert( (s1 <= s2), ""); + static_assert(!(s1 >= s2), ""); + } + { + constexpr std::chrono::milliseconds s1(3); + constexpr std::chrono::microseconds s2(3000); + static_assert(!(s1 < s2), ""); + static_assert(!(s1 > s2), ""); + static_assert( (s1 <= s2), ""); + static_assert( (s1 >= s2), ""); + } + { + constexpr std::chrono::milliseconds s1(3); + constexpr std::chrono::microseconds s2(4000); + static_assert( (s1 < s2), ""); + static_assert(!(s1 > s2), ""); + static_assert( (s1 <= s2), ""); + static_assert(!(s1 >= s2), ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(9); + constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(10); + static_assert(!(s1 < s2), ""); + static_assert(!(s1 > s2), ""); + static_assert( (s1 <= s2), ""); + static_assert( (s1 >= s2), ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(10); + constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(9); + static_assert(!(s1 < s2), ""); + static_assert( (s1 > s2), ""); + static_assert(!(s1 <= s2), ""); + static_assert( (s1 >= s2), ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(9); + constexpr std::chrono::duration<double, std::ratio<3, 5> > s2(10); + static_assert(!(s1 < s2), ""); + static_assert(!(s1 > s2), ""); + static_assert( (s1 <= s2), ""); + static_assert( (s1 >= s2), ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp index e7380f72d74..152227d82a8 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp @@ -21,7 +21,16 @@ int main() { + { std::chrono::milliseconds ms(1); std::chrono::microseconds us = ms; assert(us.count() == 1000); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::milliseconds ms(1); + constexpr std::chrono::microseconds us = ms; + static_assert(us.count() == 1000, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp index 0eba13a6fba..519b2b141c2 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp @@ -21,7 +21,16 @@ int main() { + { std::chrono::duration<double, std::micro> us(1); std::chrono::duration<double, std::milli> ms = us; assert(ms.count() == 1./1000); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::duration<double, std::micro> us(1); + constexpr std::chrono::duration<double, std::milli> ms = us; + static_assert(ms.count() == 1./1000, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp index 1095cf32450..59fefe2e002 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp @@ -21,7 +21,16 @@ int main() { + { std::chrono::duration<int> i(3); - std::chrono::duration<int> d = i; - assert(d.count() == 3); + std::chrono::duration<double, std::milli> d = i; + assert(d.count() == 3000); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::duration<int> i(3); + constexpr std::chrono::duration<double, std::milli> d = i; + static_assert(d.count() == 3000, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp index 6e048b2ab30..837f4372122 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp @@ -26,6 +26,10 @@ test() { D d; assert(d.count() == typename D::rep()); +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + constexpr D d2; + static_assert(d2.count() == typename D::rep(), ""); +#endif } int main() diff --git a/libcxx/test/utilities/time/time.duration/time.duration.cons/rep.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.cons/rep.pass.cpp index 9879568107f..20f81619bd1 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.cons/rep.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.cons/rep.pass.cpp @@ -25,6 +25,10 @@ test(R r) { D d(r); assert(d.count() == r); +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + constexpr D d2(R(2)); + static_assert(d2.count() == 2, ""); +#endif } int main() diff --git a/libcxx/test/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp index c34a4ffc86c..b3ba9f7081e 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp @@ -23,4 +23,8 @@ int main() { std::chrono::duration<double> d(5); assert(d.count() == 5); +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + constexpr std::chrono::duration<double> d2(5); + static_assert(d2.count() == 5, ""); +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp index d2c194ee742..6585351cb4c 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp @@ -44,4 +44,30 @@ int main() std::chrono::duration<double, std::ratio<1, 15> > r = s1 + s2; assert(r.count() == 75); } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::seconds s1(3); + constexpr std::chrono::seconds s2(5); + constexpr std::chrono::seconds r = s1 + s2; + static_assert(r.count() == 8, ""); + } + { + constexpr std::chrono::seconds s1(3); + constexpr std::chrono::microseconds s2(5); + constexpr std::chrono::microseconds r = s1 + s2; + static_assert(r.count() == 3000005, ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(3); + constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(5); + constexpr std::chrono::duration<int, std::ratio<1, 15> > r = s1 + s2; + static_assert(r.count() == 75, ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(3); + constexpr std::chrono::duration<double, std::ratio<3, 5> > s2(5); + constexpr std::chrono::duration<double, std::ratio<1, 15> > r = s1 + s2; + static_assert(r.count() == 75, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp index 44185435fb4..fac58b9716d 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp @@ -12,6 +12,7 @@ // duration // template <class Rep1, class Period1, class Rep2, class Period2> +// constexpr // typename common_type<duration<Rep1, Period1>, duration<Rep2, Period2>>::type // operator-(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs); @@ -44,4 +45,30 @@ int main() std::chrono::duration<double, std::ratio<1, 15> > r = s1 - s2; assert(r.count() == -15); } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::seconds s1(3); + constexpr std::chrono::seconds s2(5); + constexpr std::chrono::seconds r = s1 - s2; + static_assert(r.count() == -2, ""); + } + { + constexpr std::chrono::seconds s1(3); + constexpr std::chrono::microseconds s2(5); + constexpr std::chrono::microseconds r = s1 - s2; + static_assert(r.count() == 2999995, ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(3); + constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(5); + constexpr std::chrono::duration<int, std::ratio<1, 15> > r = s1 - s2; + static_assert(r.count() == -15, ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(3); + constexpr std::chrono::duration<double, std::ratio<3, 5> > s2(5); + constexpr std::chrono::duration<double, std::ratio<1, 15> > r = s1 - s2; + static_assert(r.count() == -15, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp index d41340431da..6b24676f100 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp @@ -12,6 +12,7 @@ // duration // template <class Rep1, class Period1, class Rep2, class Period2> +// constexpr // typename common_type<Rep1, Rep2>::type // operator/(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs); @@ -40,4 +41,26 @@ int main() std::chrono::duration<double, std::ratio<3, 5> > s2(5); assert(s1 / s2 == 20./3); } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::nanoseconds ns1(15); + constexpr std::chrono::nanoseconds ns2(5); + static_assert(ns1 / ns2 == 3, ""); + } + { + constexpr std::chrono::microseconds us1(15); + constexpr std::chrono::nanoseconds ns2(5); + static_assert(us1 / ns2 == 3000, ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(30); + constexpr std::chrono::duration<int, std::ratio<3, 5> > s2(5); + static_assert(s1 / s2 == 6, ""); + } + { + constexpr std::chrono::duration<int, std::ratio<2, 3> > s1(30); + constexpr std::chrono::duration<double, std::ratio<3, 5> > s2(5); + static_assert(s1 / s2 == 20./3, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp index 2245e92e4ad..3036cde5bf6 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp @@ -12,6 +12,7 @@ // duration // template <class Rep1, class Period, class Rep2> +// constexpr // duration<typename common_type<Rep1, Rep2>::type, Period> // operator/(const duration<Rep1, Period>& d, const Rep2& s); @@ -20,7 +21,16 @@ int main() { + { std::chrono::nanoseconds ns(15); ns = ns / 5; assert(ns.count() == 3); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::nanoseconds ns(15); + constexpr std::chrono::nanoseconds ns2 = ns / 5; + static_assert(ns2.count() == 3, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp index 99f8c59ae4f..e69f3205d14 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp @@ -12,6 +12,7 @@ // duration // template <class Rep1, class Period1, class Rep2, class Period2> +// constexpr // typename common_type<duration<Rep1, Period1>, duration<Rep2, Period2>>::type // operator%(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs); @@ -38,4 +39,24 @@ int main() std::chrono::duration<int, std::ratio<1, 15> > r = s1 % s2; assert(r.count() == 24); } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::nanoseconds ns1(15); + constexpr std::chrono::nanoseconds ns2(6); + constexpr std::chrono::nanoseconds r = ns1 % ns2; + static_assert(r.count() == 3, ""); + } + { + constexpr std::chrono::microseconds us1(15); + constexpr std::chrono::nanoseconds ns2(28); + constexpr std::chrono::nanoseconds r = us1 % ns2; + static_assert(r.count() == 20, ""); + } + { + constexpr std::chrono::duration<int, std::ratio<3, 5> > s1(6); + constexpr std::chrono::duration<int, std::ratio<2, 3> > s2(3); + constexpr std::chrono::duration<int, std::ratio<1, 15> > r = s1 % s2; + static_assert(r.count() == 24, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.pass.cpp index 4b379a09962..1acbe34ea5e 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.pass.cpp @@ -12,6 +12,7 @@ // duration // template <class Rep1, class Period, class Rep2> +// constexpr // duration<typename common_type<Rep1, Rep2>::type, Period> // operator%(const duration<Rep1, Period>& d, const Rep2& s) @@ -20,7 +21,16 @@ int main() { + { std::chrono::nanoseconds ns(15); ns = ns % 6; assert(ns.count() == 3); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::nanoseconds ns(15); + constexpr std::chrono::nanoseconds ns2 = ns % 6; + static_assert(ns2.count() == 3, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp index ecfe7a944a3..190e74b1dc3 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp @@ -12,10 +12,12 @@ // duration // template <class Rep1, class Period, class Rep2> +// constexpr // duration<typename common_type<Rep1, Rep2>::type, Period> // operator*(const duration<Rep1, Period>& d, const Rep2& s); // template <class Rep1, class Period, class Rep2> +// constexpr // duration<typename common_type<Rep1, Rep2>::type, Period> // operator*(const Rep1& s, const duration<Rep2, Period>& d); @@ -24,9 +26,20 @@ int main() { + { std::chrono::nanoseconds ns(3); ns = ns * 5; assert(ns.count() == 15); ns = 6 * ns; assert(ns.count() == 90); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + constexpr std::chrono::nanoseconds ns(3); + constexpr std::chrono::nanoseconds ns2 = ns * 5; + static_assert(ns2.count() == 15, ""); + constexpr std::chrono::nanoseconds ns3 = 6 * ns; + static_assert(ns3.count() == 18, ""); + } +#endif } diff --git a/libcxx/test/utilities/time/time.duration/time.duration.special/max.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.special/max.pass.cpp index a9e60d75df2..405461e88ae 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.special/max.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.special/max.pass.cpp @@ -22,9 +22,18 @@ template <class D> void test() { + { typedef typename D::rep Rep; Rep max_rep = std::chrono::duration_values<Rep>::max(); assert(D::max().count() == max_rep); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + typedef typename D::rep Rep; + constexpr Rep max_rep = std::chrono::duration_values<Rep>::max(); + static_assert(D::max().count() == max_rep, ""); + } +#endif } int main() diff --git a/libcxx/test/utilities/time/time.duration/time.duration.special/min.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.special/min.pass.cpp index e32fe0b8081..44cd64eff3d 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.special/min.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.special/min.pass.cpp @@ -22,9 +22,18 @@ template <class D> void test() { + { typedef typename D::rep Rep; Rep min_rep = std::chrono::duration_values<Rep>::min(); assert(D::min().count() == min_rep); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + typedef typename D::rep Rep; + constexpr Rep min_rep = std::chrono::duration_values<Rep>::min(); + static_assert(D::min().count() == min_rep, ""); + } +#endif } int main() diff --git a/libcxx/test/utilities/time/time.duration/time.duration.special/zero.pass.cpp b/libcxx/test/utilities/time/time.duration/time.duration.special/zero.pass.cpp index c919ad88c71..18350fe2ff4 100644 --- a/libcxx/test/utilities/time/time.duration/time.duration.special/zero.pass.cpp +++ b/libcxx/test/utilities/time/time.duration/time.duration.special/zero.pass.cpp @@ -21,9 +21,18 @@ template <class D> void test() { + { typedef typename D::rep Rep; Rep zero_rep = std::chrono::duration_values<Rep>::zero(); assert(D::zero().count() == zero_rep); + } +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + { + typedef typename D::rep Rep; + constexpr Rep zero_rep = std::chrono::duration_values<Rep>::zero(); + static_assert(D::zero().count() == zero_rep, ""); + } +#endif } int main() |

