[cfe-commits] [libcxx] r143519 - in /libcxx/trunk: include/ratio test/utilities/ratio/ratio.arithmetic/ratio_add.pass.cpp test/utilities/ratio/ratio.arithmetic/ratio_subtract.pass.cpp
Howard Hinnant
hhinnant at apple.com
Tue Nov 1 16:13:37 PDT 2011
Author: hhinnant
Date: Tue Nov 1 18:13:37 2011
New Revision: 143519
URL: http://llvm.org/viewvc/llvm-project?rev=143519&view=rev
Log:
Fix ratio arithmetic with zero
Modified:
libcxx/trunk/include/ratio
libcxx/trunk/test/utilities/ratio/ratio.arithmetic/ratio_add.pass.cpp
libcxx/trunk/test/utilities/ratio/ratio.arithmetic/ratio_subtract.pass.cpp
Modified: libcxx/trunk/include/ratio
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/ratio?rev=143519&r1=143518&r2=143519&view=diff
==============================================================================
--- libcxx/trunk/include/ratio (original)
+++ libcxx/trunk/include/ratio Tue Nov 1 18:13:37 2011
@@ -90,6 +90,12 @@
static const intmax_t value = _Xp;
};
+template <>
+struct __static_gcd<0, 0>
+{
+ static const intmax_t value = 1;
+};
+
// __static_lcm
template <intmax_t _Xp, intmax_t _Yp>
Modified: libcxx/trunk/test/utilities/ratio/ratio.arithmetic/ratio_add.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/utilities/ratio/ratio.arithmetic/ratio_add.pass.cpp?rev=143519&r1=143518&r2=143519&view=diff
==============================================================================
--- libcxx/trunk/test/utilities/ratio/ratio.arithmetic/ratio_add.pass.cpp (original)
+++ libcxx/trunk/test/utilities/ratio/ratio.arithmetic/ratio_add.pass.cpp Tue Nov 1 18:13:37 2011
@@ -55,4 +55,22 @@
typedef std::ratio_add<R1, R2>::type R;
static_assert(R::num == 127970191639601LL && R::den == 5177331081415LL, "");
}
+ {
+ typedef std::ratio<0> R1;
+ typedef std::ratio<0> R2;
+ typedef std::ratio_add<R1, R2>::type R;
+ static_assert(R::num == 0 && R::den == 1, "");
+ }
+ {
+ typedef std::ratio<1> R1;
+ typedef std::ratio<0> R2;
+ typedef std::ratio_add<R1, R2>::type R;
+ static_assert(R::num == 1 && R::den == 1, "");
+ }
+ {
+ typedef std::ratio<0> R1;
+ typedef std::ratio<1> R2;
+ typedef std::ratio_add<R1, R2>::type R;
+ static_assert(R::num == 1 && R::den == 1, "");
+ }
}
Modified: libcxx/trunk/test/utilities/ratio/ratio.arithmetic/ratio_subtract.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/utilities/ratio/ratio.arithmetic/ratio_subtract.pass.cpp?rev=143519&r1=143518&r2=143519&view=diff
==============================================================================
--- libcxx/trunk/test/utilities/ratio/ratio.arithmetic/ratio_subtract.pass.cpp (original)
+++ libcxx/trunk/test/utilities/ratio/ratio.arithmetic/ratio_subtract.pass.cpp Tue Nov 1 18:13:37 2011
@@ -55,4 +55,22 @@
typedef std::ratio_subtract<R1, R2>::type R;
static_assert(R::num == -126708206685271LL && R::den == 5177331081415LL, "");
}
+ {
+ typedef std::ratio<0> R1;
+ typedef std::ratio<0> R2;
+ typedef std::ratio_subtract<R1, R2>::type R;
+ static_assert(R::num == 0 && R::den == 1, "");
+ }
+ {
+ typedef std::ratio<1> R1;
+ typedef std::ratio<0> R2;
+ typedef std::ratio_subtract<R1, R2>::type R;
+ static_assert(R::num == 1 && R::den == 1, "");
+ }
+ {
+ typedef std::ratio<0> R1;
+ typedef std::ratio<1> R2;
+ typedef std::ratio_subtract<R1, R2>::type R;
+ static_assert(R::num == -1 && R::den == 1, "");
+ }
}
More information about the cfe-commits
mailing list