summaryrefslogtreecommitdiffstats
path: root/libcxx/test/language.support/support.limits/limits/numeric.limits.members
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2010-05-11 19:42:16 +0000
committerHoward Hinnant <hhinnant@apple.com>2010-05-11 19:42:16 +0000
commit3e519524c118651123eecf60c2bbc5d65ad9bac3 (patch)
treeb2dd4168cfe448920a602cd7d2e40f95da187153 /libcxx/test/language.support/support.limits/limits/numeric.limits.members
parent9132c59d43b6c590c9bb33496eebf9f192d6857a (diff)
downloadbcm5719-llvm-3e519524c118651123eecf60c2bbc5d65ad9bac3.tar.gz
bcm5719-llvm-3e519524c118651123eecf60c2bbc5d65ad9bac3.zip
libcxx initial import
llvm-svn: 103490
Diffstat (limited to 'libcxx/test/language.support/support.limits/limits/numeric.limits.members')
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/denorm_min.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits10.pass.cpp53
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/epsilon.pass.cpp50
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm_loss.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_infinity.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/infinity.pass.cpp54
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_bounded.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_exact.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_integer.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_modulo.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_signed.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/lowest.pass.cpp56
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/max.pass.cpp56
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_digits10.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent10.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/min.pass.cpp56
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent10.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/quiet_NaN.pass.cpp69
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/radix.pass.cpp49
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_error.pass.cpp50
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_style.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/signaling_NaN.pass.cpp69
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/tinyness_before.pass.cpp48
-rw-r--r--libcxx/test/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp48
31 files changed, 1577 insertions, 0 deletions
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/denorm_min.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/denorm_min.pass.cpp
new file mode 100644
index 00000000000..101fa757dae
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/denorm_min.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// denorm_min()
+
+#include <limits>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::denorm_min() == expected);
+ assert(std::numeric_limits<const T>::denorm_min() == expected);
+ assert(std::numeric_limits<volatile T>::denorm_min() == expected);
+ assert(std::numeric_limits<const volatile T>::denorm_min() == expected);
+}
+
+int main()
+{
+ test<bool>(false);
+ test<char>(0);
+ test<signed char>(0);
+ test<unsigned char>(0);
+ test<wchar_t>(0);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(0);
+ test<unsigned short>(0);
+ test<int>(0);
+ test<unsigned int>(0);
+ test<long>(0);
+ test<unsigned long>(0);
+ test<long long>(0);
+ test<unsigned long long>(0);
+ test<float>(__FLT_DENORM_MIN__);
+ test<double>(__DBL_DENORM_MIN__);
+ test<long double>(__LDBL_DENORM_MIN__);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits.pass.cpp
new file mode 100644
index 00000000000..58337ece5fd
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// digits
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::digits == expected, "digits test 1");
+ static_assert(std::numeric_limits<const T>::digits == expected, "digits test 2");
+ static_assert(std::numeric_limits<volatile T>::digits == expected, "digits test 3");
+ static_assert(std::numeric_limits<const volatile T>::digits == expected, "digits test 4");
+}
+
+int main()
+{
+ test<bool, 1>();
+ test<char, std::numeric_limits<char>::is_signed ? 7 : 8>();
+ test<signed char, 7>();
+ test<unsigned char, 8>();
+ test<wchar_t, std::numeric_limits<wchar_t>::is_signed ? 31 : 32>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 16>();
+ test<char32_t, 32>();
+#endif
+ test<short, 15>();
+ test<unsigned short, 16>();
+ test<int, 31>();
+ test<unsigned int, 32>();
+ test<long, sizeof(long) == 4 ? 31 : 63>();
+ test<unsigned long, sizeof(long) == 4 ? 32 : 64>();
+ test<long long, 63>();
+ test<unsigned long long, 64>();
+ test<float, FLT_MANT_DIG>();
+ test<double, DBL_MANT_DIG>();
+ test<long double, LDBL_MANT_DIG>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits10.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits10.pass.cpp
new file mode 100644
index 00000000000..6012d23cf6e
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/digits10.pass.cpp
@@ -0,0 +1,53 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// digits10
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::digits10 == expected, "digits10 test 1");
+ static_assert(std::numeric_limits<T>::is_bounded, "digits10 test 5");
+ static_assert(std::numeric_limits<const T>::digits10 == expected, "digits10 test 2");
+ static_assert(std::numeric_limits<const T>::is_bounded, "digits10 test 6");
+ static_assert(std::numeric_limits<volatile T>::digits10 == expected, "digits10 test 3");
+ static_assert(std::numeric_limits<volatile T>::is_bounded, "digits10 test 7");
+ static_assert(std::numeric_limits<const volatile T>::digits10 == expected, "digits10 test 4");
+ static_assert(std::numeric_limits<const volatile T>::is_bounded, "digits10 test 8");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 2>();
+ test<signed char, 2>();
+ test<unsigned char, 2>();
+ test<wchar_t, 9>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 4>();
+ test<char32_t, 9>();
+#endif
+ test<short, 4>();
+ test<unsigned short, 4>();
+ test<int, 9>();
+ test<unsigned int, 9>();
+ test<long, sizeof(long) == 4 ? 9 : 18>();
+ test<unsigned long, sizeof(long) == 4 ? 9 : 19>();
+ test<long long, 18>();
+ test<unsigned long long, 19>();
+ test<float, FLT_DIG>();
+ test<double, DBL_DIG>();
+ test<long double, LDBL_DIG>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/epsilon.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/epsilon.pass.cpp
new file mode 100644
index 00000000000..0869f88fff2
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/epsilon.pass.cpp
@@ -0,0 +1,50 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// epsilon()
+
+#include <limits>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::epsilon() == expected);
+ assert(std::numeric_limits<const T>::epsilon() == expected);
+ assert(std::numeric_limits<volatile T>::epsilon() == expected);
+ assert(std::numeric_limits<const volatile T>::epsilon() == expected);
+}
+
+int main()
+{
+ test<bool>(false);
+ test<char>(0);
+ test<signed char>(0);
+ test<unsigned char>(0);
+ test<wchar_t>(0);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(0);
+ test<unsigned short>(0);
+ test<int>(0);
+ test<unsigned int>(0);
+ test<long>(0);
+ test<unsigned long>(0);
+ test<long long>(0);
+ test<unsigned long long>(0);
+ test<float>(FLT_EPSILON);
+ test<double>(DBL_EPSILON);
+ test<long double>(LDBL_EPSILON);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm.pass.cpp
new file mode 100644
index 00000000000..59c26267479
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// has_denorm
+
+#include <limits>
+
+template <class T, std::float_denorm_style expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::has_denorm == expected, "has_denorm test 1");
+ static_assert(std::numeric_limits<const T>::has_denorm == expected, "has_denorm test 2");
+ static_assert(std::numeric_limits<volatile T>::has_denorm == expected, "has_denorm test 3");
+ static_assert(std::numeric_limits<const volatile T>::has_denorm == expected, "has_denorm test 4");
+}
+
+int main()
+{
+ test<bool, std::denorm_absent>();
+ test<char, std::denorm_absent>();
+ test<signed char, std::denorm_absent>();
+ test<unsigned char, std::denorm_absent>();
+ test<wchar_t, std::denorm_absent>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, std::denorm_absent>();
+ test<char32_t, std::denorm_absent>();
+#endif
+ test<short, std::denorm_absent>();
+ test<unsigned short, std::denorm_absent>();
+ test<int, std::denorm_absent>();
+ test<unsigned int, std::denorm_absent>();
+ test<long, std::denorm_absent>();
+ test<unsigned long, std::denorm_absent>();
+ test<long long, std::denorm_absent>();
+ test<unsigned long long, std::denorm_absent>();
+ test<float, std::denorm_present>();
+ test<double, std::denorm_present>();
+ test<long double, std::denorm_present>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm_loss.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm_loss.pass.cpp
new file mode 100644
index 00000000000..3e23b95afbe
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_denorm_loss.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// has_denorm_loss
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::has_denorm_loss == expected, "has_denorm_loss test 1");
+ static_assert(std::numeric_limits<const T>::has_denorm_loss == expected, "has_denorm_loss test 2");
+ static_assert(std::numeric_limits<volatile T>::has_denorm_loss == expected, "has_denorm_loss test 3");
+ static_assert(std::numeric_limits<const volatile T>::has_denorm_loss == expected, "has_denorm_loss test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_infinity.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_infinity.pass.cpp
new file mode 100644
index 00000000000..caf8ea3e636
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_infinity.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// has_infinity
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::has_infinity == expected, "has_infinity test 1");
+ static_assert(std::numeric_limits<const T>::has_infinity == expected, "has_infinity test 2");
+ static_assert(std::numeric_limits<volatile T>::has_infinity == expected, "has_infinity test 3");
+ static_assert(std::numeric_limits<const volatile T>::has_infinity == expected, "has_infinity test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN.pass.cpp
new file mode 100644
index 00000000000..b3b2d63ef02
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// has_quiet_NaN
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::has_quiet_NaN == expected, "has_quiet_NaN test 1");
+ static_assert(std::numeric_limits<const T>::has_quiet_NaN == expected, "has_quiet_NaN test 2");
+ static_assert(std::numeric_limits<volatile T>::has_quiet_NaN == expected, "has_quiet_NaN test 3");
+ static_assert(std::numeric_limits<const volatile T>::has_quiet_NaN == expected, "has_quiet_NaN test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN.pass.cpp
new file mode 100644
index 00000000000..28beab8d6ac
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// has_signaling_NaN
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::has_signaling_NaN == expected, "has_signaling_NaN test 1");
+ static_assert(std::numeric_limits<const T>::has_signaling_NaN == expected, "has_signaling_NaN test 2");
+ static_assert(std::numeric_limits<volatile T>::has_signaling_NaN == expected, "has_signaling_NaN test 3");
+ static_assert(std::numeric_limits<const volatile T>::has_signaling_NaN == expected, "has_signaling_NaN test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/infinity.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/infinity.pass.cpp
new file mode 100644
index 00000000000..27033662613
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/infinity.pass.cpp
@@ -0,0 +1,54 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// infinity()
+
+#include <limits>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::infinity() == expected);
+ assert(std::numeric_limits<const T>::infinity() == expected);
+ assert(std::numeric_limits<volatile T>::infinity() == expected);
+ assert(std::numeric_limits<const volatile T>::infinity() == expected);
+}
+
+extern float zero;
+
+int main()
+{
+ test<bool>(false);
+ test<char>(0);
+ test<signed char>(0);
+ test<unsigned char>(0);
+ test<wchar_t>(0);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(0);
+ test<unsigned short>(0);
+ test<int>(0);
+ test<unsigned int>(0);
+ test<long>(0);
+ test<unsigned long>(0);
+ test<long long>(0);
+ test<unsigned long long>(0);
+ test<float>(1./zero);
+ test<double>(1./zero);
+ test<long double>(1./zero);
+}
+
+float zero = 0;
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_bounded.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_bounded.pass.cpp
new file mode 100644
index 00000000000..e92b6df723a
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_bounded.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_bounded
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_bounded == expected, "is_bounded test 1");
+ static_assert(std::numeric_limits<const T>::is_bounded == expected, "is_bounded test 2");
+ static_assert(std::numeric_limits<volatile T>::is_bounded == expected, "is_bounded test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_bounded == expected, "is_bounded test 4");
+}
+
+int main()
+{
+ test<bool, true>();
+ test<char, true>();
+ test<signed char, true>();
+ test<unsigned char, true>();
+ test<wchar_t, true>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, true>();
+ test<char32_t, true>();
+#endif
+ test<short, true>();
+ test<unsigned short, true>();
+ test<int, true>();
+ test<unsigned int, true>();
+ test<long, true>();
+ test<unsigned long, true>();
+ test<long long, true>();
+ test<unsigned long long, true>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_exact.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_exact.pass.cpp
new file mode 100644
index 00000000000..3c41e9b41bd
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_exact.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_exact
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_exact == expected, "is_exact test 1");
+ static_assert(std::numeric_limits<const T>::is_exact == expected, "is_exact test 2");
+ static_assert(std::numeric_limits<volatile T>::is_exact == expected, "is_exact test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_exact == expected, "is_exact test 4");
+}
+
+int main()
+{
+ test<bool, true>();
+ test<char, true>();
+ test<signed char, true>();
+ test<unsigned char, true>();
+ test<wchar_t, true>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, true>();
+ test<char32_t, true>();
+#endif
+ test<short, true>();
+ test<unsigned short, true>();
+ test<int, true>();
+ test<unsigned int, true>();
+ test<long, true>();
+ test<unsigned long, true>();
+ test<long long, true>();
+ test<unsigned long long, true>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp
new file mode 100644
index 00000000000..21574a249ac
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_iec559
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_iec559 == expected, "is_iec559 test 1");
+ static_assert(std::numeric_limits<const T>::is_iec559 == expected, "is_iec559 test 2");
+ static_assert(std::numeric_limits<volatile T>::is_iec559 == expected, "is_iec559 test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_iec559 == expected, "is_iec559 test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_integer.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_integer.pass.cpp
new file mode 100644
index 00000000000..1c44d3fb307
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_integer.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_integer
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_integer == expected, "is_integer test 1");
+ static_assert(std::numeric_limits<const T>::is_integer == expected, "is_integer test 2");
+ static_assert(std::numeric_limits<volatile T>::is_integer == expected, "is_integer test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_integer == expected, "is_integer test 4");
+}
+
+int main()
+{
+ test<bool, true>();
+ test<char, true>();
+ test<signed char, true>();
+ test<unsigned char, true>();
+ test<wchar_t, true>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, true>();
+ test<char32_t, true>();
+#endif
+ test<short, true>();
+ test<unsigned short, true>();
+ test<int, true>();
+ test<unsigned int, true>();
+ test<long, true>();
+ test<unsigned long, true>();
+ test<long long, true>();
+ test<unsigned long long, true>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_modulo.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_modulo.pass.cpp
new file mode 100644
index 00000000000..4bb8cae7db9
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_modulo.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_modulo
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_modulo == expected, "is_modulo test 1");
+ static_assert(std::numeric_limits<const T>::is_modulo == expected, "is_modulo test 2");
+ static_assert(std::numeric_limits<volatile T>::is_modulo == expected, "is_modulo test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_modulo == expected, "is_modulo test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, true>();
+ test<signed char, true>();
+ test<unsigned char, true>();
+ test<wchar_t, true>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, true>();
+ test<char32_t, true>();
+#endif
+ test<short, true>();
+ test<unsigned short, true>();
+ test<int, true>();
+ test<unsigned int, true>();
+ test<long, true>();
+ test<unsigned long, true>();
+ test<long long, true>();
+ test<unsigned long long, true>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_signed.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_signed.pass.cpp
new file mode 100644
index 00000000000..7ef84b0c6b6
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/is_signed.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// is_signed
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::is_signed == expected, "is_signed test 1");
+ static_assert(std::numeric_limits<const T>::is_signed == expected, "is_signed test 2");
+ static_assert(std::numeric_limits<volatile T>::is_signed == expected, "is_signed test 3");
+ static_assert(std::numeric_limits<const volatile T>::is_signed == expected, "is_signed test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, char(-1) < char(0)>();
+ test<signed char, true>();
+ test<unsigned char, false>();
+ test<wchar_t, wchar_t(-1) < wchar_t(0)>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, true>();
+ test<unsigned short, false>();
+ test<int, true>();
+ test<unsigned int, false>();
+ test<long, true>();
+ test<unsigned long, false>();
+ test<long long, true>();
+ test<unsigned long long, false>();
+ test<float, true>();
+ test<double, true>();
+ test<long double, true>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/lowest.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/lowest.pass.cpp
new file mode 100644
index 00000000000..8a0a3b3a85e
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/lowest.pass.cpp
@@ -0,0 +1,56 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// lowest()
+
+#include <limits>
+#include <climits>
+#include <cwchar>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::lowest() == expected);
+ assert(std::numeric_limits<T>::is_bounded);
+ assert(std::numeric_limits<const T>::lowest() == expected);
+ assert(std::numeric_limits<const T>::is_bounded);
+ assert(std::numeric_limits<volatile T>::lowest() == expected);
+ assert(std::numeric_limits<volatile T>::is_bounded);
+ assert(std::numeric_limits<const volatile T>::lowest() == expected);
+ assert(std::numeric_limits<const volatile T>::is_bounded);
+}
+
+int main()
+{
+ test<bool>(false);
+ test<char>(CHAR_MIN);
+ test<signed char>(SCHAR_MIN);
+ test<unsigned char>(0);
+ test<wchar_t>(WCHAR_MIN);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(SHRT_MIN);
+ test<unsigned short>(0);
+ test<int>(INT_MIN);
+ test<unsigned int>(0);
+ test<long>(LONG_MIN);
+ test<unsigned long>(0);
+ test<long long>(LLONG_MIN);
+ test<unsigned long long>(0);
+ test<float>(-FLT_MAX);
+ test<double>(-DBL_MAX);
+ test<long double>(-LDBL_MAX);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max.pass.cpp
new file mode 100644
index 00000000000..2cdbec8f8d7
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max.pass.cpp
@@ -0,0 +1,56 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// max()
+
+#include <limits>
+#include <climits>
+#include <cwchar>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::max() == expected);
+ assert(std::numeric_limits<T>::is_bounded);
+ assert(std::numeric_limits<const T>::max() == expected);
+ assert(std::numeric_limits<const T>::is_bounded);
+ assert(std::numeric_limits<volatile T>::max() == expected);
+ assert(std::numeric_limits<volatile T>::is_bounded);
+ assert(std::numeric_limits<const volatile T>::max() == expected);
+ assert(std::numeric_limits<const volatile T>::is_bounded);
+}
+
+int main()
+{
+ test<bool>(true);
+ test<char>(CHAR_MAX);
+ test<signed char>(SCHAR_MAX);
+ test<unsigned char>(UCHAR_MAX);
+ test<wchar_t>(WCHAR_MAX);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(USHRT_MAX);
+ test<char32_t>(UINT_MAX);
+#endif
+ test<short>(SHRT_MAX);
+ test<unsigned short>(USHRT_MAX);
+ test<int>(INT_MAX);
+ test<unsigned int>(UINT_MAX);
+ test<long>(LONG_MAX);
+ test<unsigned long>(ULONG_MAX);
+ test<long long>(LLONG_MAX);
+ test<unsigned long long>(ULLONG_MAX);
+ test<float>(FLT_MAX);
+ test<double>(DBL_MAX);
+ test<long double>(LDBL_MAX);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_digits10.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_digits10.pass.cpp
new file mode 100644
index 00000000000..f4faa6b4e95
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_digits10.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// max_digits10
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::max_digits10 == expected, "max_digits10 test 1");
+ static_assert(std::numeric_limits<const T>::max_digits10 == expected, "max_digits10 test 2");
+ static_assert(std::numeric_limits<volatile T>::max_digits10 == expected, "max_digits10 test 3");
+ static_assert(std::numeric_limits<const volatile T>::max_digits10 == expected, "max_digits10 test 4");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 0>();
+ test<signed char, 0>();
+ test<unsigned char, 0>();
+ test<wchar_t, 0>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 0>();
+ test<char32_t, 0>();
+#endif
+ test<short, 0>();
+ test<unsigned short, 0>();
+ test<int, 0>();
+ test<unsigned int, 0>();
+ test<long, 0>();
+ test<unsigned long, 0>();
+ test<long long, 0>();
+ test<unsigned long long, 0>();
+ test<float, 2+(FLT_MANT_DIG * 30103)/100000>();
+ test<double, 2+(DBL_MANT_DIG * 30103)/100000>();
+ test<long double, 2+(LDBL_MANT_DIG * 30103)/100000>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent.pass.cpp
new file mode 100644
index 00000000000..b6c222b4496
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// max_exponent
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::max_exponent == expected, "max_exponent test 1");
+ static_assert(std::numeric_limits<const T>::max_exponent == expected, "max_exponent test 2");
+ static_assert(std::numeric_limits<volatile T>::max_exponent == expected, "max_exponent test 3");
+ static_assert(std::numeric_limits<const volatile T>::max_exponent == expected, "max_exponent test 4");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 0>();
+ test<signed char, 0>();
+ test<unsigned char, 0>();
+ test<wchar_t, 0>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 0>();
+ test<char32_t, 0>();
+#endif
+ test<short, 0>();
+ test<unsigned short, 0>();
+ test<int, 0>();
+ test<unsigned int, 0>();
+ test<long, 0>();
+ test<unsigned long, 0>();
+ test<long long, 0>();
+ test<unsigned long long, 0>();
+ test<float, FLT_MAX_EXP>();
+ test<double, DBL_MAX_EXP>();
+ test<long double, LDBL_MAX_EXP>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent10.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent10.pass.cpp
new file mode 100644
index 00000000000..0df080a65c0
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/max_exponent10.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// max_exponent10
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::max_exponent10 == expected, "max_exponent10 test 1");
+ static_assert(std::numeric_limits<const T>::max_exponent10 == expected, "max_exponent10 test 2");
+ static_assert(std::numeric_limits<volatile T>::max_exponent10 == expected, "max_exponent10 test 3");
+ static_assert(std::numeric_limits<const volatile T>::max_exponent10 == expected, "max_exponent10 test 4");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 0>();
+ test<signed char, 0>();
+ test<unsigned char, 0>();
+ test<wchar_t, 0>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 0>();
+ test<char32_t, 0>();
+#endif
+ test<short, 0>();
+ test<unsigned short, 0>();
+ test<int, 0>();
+ test<unsigned int, 0>();
+ test<long, 0>();
+ test<unsigned long, 0>();
+ test<long long, 0>();
+ test<unsigned long long, 0>();
+ test<float, FLT_MAX_10_EXP>();
+ test<double, DBL_MAX_10_EXP>();
+ test<long double, LDBL_MAX_10_EXP>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min.pass.cpp
new file mode 100644
index 00000000000..f67fa9ef167
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min.pass.cpp
@@ -0,0 +1,56 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// min()
+
+#include <limits>
+#include <climits>
+#include <cwchar>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::min() == expected);
+ assert(std::numeric_limits<T>::is_bounded || !std::numeric_limits<T>::is_signed);
+ assert(std::numeric_limits<const T>::min() == expected);
+ assert(std::numeric_limits<const T>::is_bounded || !std::numeric_limits<const T>::is_signed);
+ assert(std::numeric_limits<volatile T>::min() == expected);
+ assert(std::numeric_limits<volatile T>::is_bounded || !std::numeric_limits<volatile T>::is_signed);
+ assert(std::numeric_limits<const volatile T>::min() == expected);
+ assert(std::numeric_limits<const volatile T>::is_bounded || !std::numeric_limits<const volatile T>::is_signed);
+}
+
+int main()
+{
+ test<bool>(false);
+ test<char>(CHAR_MIN);
+ test<signed char>(SCHAR_MIN);
+ test<unsigned char>(0);
+ test<wchar_t>(WCHAR_MIN);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(SHRT_MIN);
+ test<unsigned short>(0);
+ test<int>(INT_MIN);
+ test<unsigned int>(0);
+ test<long>(LONG_MIN);
+ test<unsigned long>(0);
+ test<long long>(LLONG_MIN);
+ test<unsigned long long>(0);
+ test<float>(FLT_MIN);
+ test<double>(DBL_MIN);
+ test<long double>(LDBL_MIN);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent.pass.cpp
new file mode 100644
index 00000000000..531d25a5848
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// min_exponent
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::min_exponent == expected, "min_exponent test 1");
+ static_assert(std::numeric_limits<const T>::min_exponent == expected, "min_exponent test 2");
+ static_assert(std::numeric_limits<volatile T>::min_exponent == expected, "min_exponent test 3");
+ static_assert(std::numeric_limits<const volatile T>::min_exponent == expected, "min_exponent test 4");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 0>();
+ test<signed char, 0>();
+ test<unsigned char, 0>();
+ test<wchar_t, 0>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 0>();
+ test<char32_t, 0>();
+#endif
+ test<short, 0>();
+ test<unsigned short, 0>();
+ test<int, 0>();
+ test<unsigned int, 0>();
+ test<long, 0>();
+ test<unsigned long, 0>();
+ test<long long, 0>();
+ test<unsigned long long, 0>();
+ test<float, FLT_MIN_EXP>();
+ test<double, DBL_MIN_EXP>();
+ test<long double, LDBL_MIN_EXP>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent10.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent10.pass.cpp
new file mode 100644
index 00000000000..5f335fe1e37
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/min_exponent10.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// min_exponent10
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::min_exponent10 == expected, "min_exponent10 test 1");
+ static_assert(std::numeric_limits<const T>::min_exponent10 == expected, "min_exponent10 test 2");
+ static_assert(std::numeric_limits<volatile T>::min_exponent10 == expected, "min_exponent10 test 3");
+ static_assert(std::numeric_limits<const volatile T>::min_exponent10 == expected, "min_exponent10 test 4");
+}
+
+int main()
+{
+ test<bool, 0>();
+ test<char, 0>();
+ test<signed char, 0>();
+ test<unsigned char, 0>();
+ test<wchar_t, 0>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 0>();
+ test<char32_t, 0>();
+#endif
+ test<short, 0>();
+ test<unsigned short, 0>();
+ test<int, 0>();
+ test<unsigned int, 0>();
+ test<long, 0>();
+ test<unsigned long, 0>();
+ test<long long, 0>();
+ test<unsigned long long, 0>();
+ test<float, FLT_MIN_10_EXP>();
+ test<double, DBL_MIN_10_EXP>();
+ test<long double, LDBL_MIN_10_EXP>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/quiet_NaN.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/quiet_NaN.pass.cpp
new file mode 100644
index 00000000000..7ce5130e79e
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/quiet_NaN.pass.cpp
@@ -0,0 +1,69 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// quiet_NaN()
+
+#include <limits>
+#include <cmath>
+#include <type_traits>
+#include <cassert>
+
+template <class T>
+void
+test_imp(std::true_type)
+{
+ assert(std::isnan(std::numeric_limits<T>::quiet_NaN()));
+ assert(std::isnan(std::numeric_limits<const T>::quiet_NaN()));
+ assert(std::isnan(std::numeric_limits<volatile T>::quiet_NaN()));
+ assert(std::isnan(std::numeric_limits<const volatile T>::quiet_NaN()));
+}
+
+template <class T>
+void
+test_imp(std::false_type)
+{
+ assert(std::numeric_limits<T>::quiet_NaN() == T());
+ assert(std::numeric_limits<const T>::quiet_NaN() == T());
+ assert(std::numeric_limits<volatile T>::quiet_NaN() == T());
+ assert(std::numeric_limits<const volatile T>::quiet_NaN() == T());
+}
+
+template <class T>
+inline
+void
+test()
+{
+ test_imp<T>(std::is_floating_point<T>());
+}
+
+int main()
+{
+ test<bool>();
+ test<char>();
+ test<signed char>();
+ test<unsigned char>();
+ test<wchar_t>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>();
+ test<char32_t>();
+#endif
+ test<short>();
+ test<unsigned short>();
+ test<int>();
+ test<unsigned int>();
+ test<long>();
+ test<unsigned long>();
+ test<long long>();
+ test<unsigned long long>();
+ test<float>();
+ test<double>();
+ test<long double>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/radix.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/radix.pass.cpp
new file mode 100644
index 00000000000..b9f1f0c6e0a
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/radix.pass.cpp
@@ -0,0 +1,49 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// radix
+
+#include <limits>
+#include <cfloat>
+
+template <class T, int expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::radix == expected, "radix test 1");
+ static_assert(std::numeric_limits<const T>::radix == expected, "radix test 2");
+ static_assert(std::numeric_limits<volatile T>::radix == expected, "radix test 3");
+ static_assert(std::numeric_limits<const volatile T>::radix == expected, "radix test 4");
+}
+
+int main()
+{
+ test<bool, 2>();
+ test<char, 2>();
+ test<signed char, 2>();
+ test<unsigned char, 2>();
+ test<wchar_t, 2>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, 2>();
+ test<char32_t, 2>();
+#endif
+ test<short, 2>();
+ test<unsigned short, 2>();
+ test<int, 2>();
+ test<unsigned int, 2>();
+ test<long, 2>();
+ test<unsigned long, 2>();
+ test<long long, 2>();
+ test<unsigned long long, 2>();
+ test<float, FLT_RADIX>();
+ test<double, FLT_RADIX>();
+ test<long double, FLT_RADIX>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_error.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_error.pass.cpp
new file mode 100644
index 00000000000..19c22b8cfa4
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_error.pass.cpp
@@ -0,0 +1,50 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// round_error()
+
+#include <limits>
+#include <cfloat>
+#include <cassert>
+
+template <class T>
+void
+test(T expected)
+{
+ assert(std::numeric_limits<T>::round_error() == expected);
+ assert(std::numeric_limits<const T>::round_error() == expected);
+ assert(std::numeric_limits<volatile T>::round_error() == expected);
+ assert(std::numeric_limits<const volatile T>::round_error() == expected);
+}
+
+int main()
+{
+ test<bool>(false);
+ test<char>(0);
+ test<signed char>(0);
+ test<unsigned char>(0);
+ test<wchar_t>(0);
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>(0);
+ test<char32_t>(0);
+#endif
+ test<short>(0);
+ test<unsigned short>(0);
+ test<int>(0);
+ test<unsigned int>(0);
+ test<long>(0);
+ test<unsigned long>(0);
+ test<long long>(0);
+ test<unsigned long long>(0);
+ test<float>(0.5);
+ test<double>(0.5);
+ test<long double>(0.5);
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_style.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_style.pass.cpp
new file mode 100644
index 00000000000..d0c7259fd95
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/round_style.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// round_style
+
+#include <limits>
+
+template <class T, std::float_round_style expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::round_style == expected, "round_style test 1");
+ static_assert(std::numeric_limits<const T>::round_style == expected, "round_style test 2");
+ static_assert(std::numeric_limits<volatile T>::round_style == expected, "round_style test 3");
+ static_assert(std::numeric_limits<const volatile T>::round_style == expected, "round_style test 4");
+}
+
+int main()
+{
+ test<bool, std::round_toward_zero>();
+ test<char, std::round_toward_zero>();
+ test<signed char, std::round_toward_zero>();
+ test<unsigned char, std::round_toward_zero>();
+ test<wchar_t, std::round_toward_zero>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, std::round_toward_zero>();
+ test<char32_t, std::round_toward_zero>();
+#endif
+ test<short, std::round_toward_zero>();
+ test<unsigned short, std::round_toward_zero>();
+ test<int, std::round_toward_zero>();
+ test<unsigned int, std::round_toward_zero>();
+ test<long, std::round_toward_zero>();
+ test<unsigned long, std::round_toward_zero>();
+ test<long long, std::round_toward_zero>();
+ test<unsigned long long, std::round_toward_zero>();
+ test<float, std::round_to_nearest>();
+ test<double, std::round_to_nearest>();
+ test<long double, std::round_to_nearest>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/signaling_NaN.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/signaling_NaN.pass.cpp
new file mode 100644
index 00000000000..8acd6b8baef
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/signaling_NaN.pass.cpp
@@ -0,0 +1,69 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// signaling_NaN()
+
+#include <limits>
+#include <cmath>
+#include <type_traits>
+#include <cassert>
+
+template <class T>
+void
+test_imp(std::true_type)
+{
+ assert(std::isnan(std::numeric_limits<T>::signaling_NaN()));
+ assert(std::isnan(std::numeric_limits<const T>::signaling_NaN()));
+ assert(std::isnan(std::numeric_limits<volatile T>::signaling_NaN()));
+ assert(std::isnan(std::numeric_limits<const volatile T>::signaling_NaN()));
+}
+
+template <class T>
+void
+test_imp(std::false_type)
+{
+ assert(std::numeric_limits<T>::signaling_NaN() == T());
+ assert(std::numeric_limits<const T>::signaling_NaN() == T());
+ assert(std::numeric_limits<volatile T>::signaling_NaN() == T());
+ assert(std::numeric_limits<const volatile T>::signaling_NaN() == T());
+}
+
+template <class T>
+inline
+void
+test()
+{
+ test_imp<T>(std::is_floating_point<T>());
+}
+
+int main()
+{
+ test<bool>();
+ test<char>();
+ test<signed char>();
+ test<unsigned char>();
+ test<wchar_t>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t>();
+ test<char32_t>();
+#endif
+ test<short>();
+ test<unsigned short>();
+ test<int>();
+ test<unsigned int>();
+ test<long>();
+ test<unsigned long>();
+ test<long long>();
+ test<unsigned long long>();
+ test<float>();
+ test<double>();
+ test<long double>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/tinyness_before.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/tinyness_before.pass.cpp
new file mode 100644
index 00000000000..8c3fbd0f40f
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/tinyness_before.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// tinyness_before
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::tinyness_before == expected, "tinyness_before test 1");
+ static_assert(std::numeric_limits<const T>::tinyness_before == expected, "tinyness_before test 2");
+ static_assert(std::numeric_limits<volatile T>::tinyness_before == expected, "tinyness_before test 3");
+ static_assert(std::numeric_limits<const volatile T>::tinyness_before == expected, "tinyness_before test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, false>();
+ test<signed char, false>();
+ test<unsigned char, false>();
+ test<wchar_t, false>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, false>();
+ test<char32_t, false>();
+#endif
+ test<short, false>();
+ test<unsigned short, false>();
+ test<int, false>();
+ test<unsigned int, false>();
+ test<long, false>();
+ test<unsigned long, false>();
+ test<long long, false>();
+ test<unsigned long long, false>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
diff --git a/libcxx/test/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp
new file mode 100644
index 00000000000..2b8d167906c
--- /dev/null
+++ b/libcxx/test/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp
@@ -0,0 +1,48 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// test numeric_limits
+
+// traps
+
+#include <limits>
+
+template <class T, bool expected>
+void
+test()
+{
+ static_assert(std::numeric_limits<T>::traps == expected, "traps test 1");
+ static_assert(std::numeric_limits<const T>::traps == expected, "traps test 2");
+ static_assert(std::numeric_limits<volatile T>::traps == expected, "traps test 3");
+ static_assert(std::numeric_limits<const volatile T>::traps == expected, "traps test 4");
+}
+
+int main()
+{
+ test<bool, false>();
+ test<char, true>();
+ test<signed char, true>();
+ test<unsigned char, true>();
+ test<wchar_t, true>();
+#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
+ test<char16_t, true>();
+ test<char32_t, true>();
+#endif
+ test<short, true>();
+ test<unsigned short, true>();
+ test<int, true>();
+ test<unsigned int, true>();
+ test<long, true>();
+ test<unsigned long, true>();
+ test<long long, true>();
+ test<unsigned long long, true>();
+ test<float, false>();
+ test<double, false>();
+ test<long double, false>();
+}
OpenPOWER on IntegriCloud