1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // test numeric_limits 10 11 // infinity() 12 13 #include <limits> 14 #include <cfloat> 15 #include <cassert> 16 17 #include "test_macros.h" 18 19 template <class T> 20 void test(T expected)21test(T expected) 22 { 23 assert(std::numeric_limits<T>::infinity() == expected); 24 assert(std::numeric_limits<const T>::infinity() == expected); 25 assert(std::numeric_limits<volatile T>::infinity() == expected); 26 assert(std::numeric_limits<const volatile T>::infinity() == expected); 27 } 28 29 extern float zero; 30 main(int,char **)31int main(int, char**) 32 { 33 test<bool>(false); 34 test<char>(0); 35 test<signed char>(0); 36 test<unsigned char>(0); 37 test<wchar_t>(0); 38 #if TEST_STD_VER > 17 && defined(__cpp_char8_t) 39 test<char8_t>(0); 40 #endif 41 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS 42 test<char16_t>(0); 43 test<char32_t>(0); 44 #endif // _LIBCPP_HAS_NO_UNICODE_CHARS 45 test<short>(0); 46 test<unsigned short>(0); 47 test<int>(0); 48 test<unsigned int>(0); 49 test<long>(0); 50 test<unsigned long>(0); 51 test<long long>(0); 52 test<unsigned long long>(0); 53 #ifndef _LIBCPP_HAS_NO_INT128 54 test<__int128_t>(0); 55 test<__uint128_t>(0); 56 #endif 57 test<float>(1.f/zero); 58 test<double>(1./zero); 59 test<long double>(1./zero); 60 61 return 0; 62 } 63 64 float zero = 0; 65