diff options
author | Howard Hinnant <hhinnant@apple.com> | 2010-05-11 19:42:16 +0000 |
---|---|---|
committer | Howard Hinnant <hhinnant@apple.com> | 2010-05-11 19:42:16 +0000 |
commit | 3e519524c118651123eecf60c2bbc5d65ad9bac3 (patch) | |
tree | b2dd4168cfe448920a602cd7d2e40f95da187153 /libcxx/test/language.support/support.limits/limits/numeric.limits.members | |
parent | 9132c59d43b6c590c9bb33496eebf9f192d6857a (diff) | |
download | bcm5719-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')
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>(); +} |