63 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// test numeric_limits10 11// infinity()12 13#include <limits>14#include <cfloat>15#include <cassert>16 17#include "test_macros.h"18 19template <class T>20void21test(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 29extern float zero;30 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#endif41 test<char16_t>(0);42 test<char32_t>(0);43 test<short>(0);44 test<unsigned short>(0);45 test<int>(0);46 test<unsigned int>(0);47 test<long>(0);48 test<unsigned long>(0);49 test<long long>(0);50 test<unsigned long long>(0);51#ifndef TEST_HAS_NO_INT12852 test<__int128_t>(0);53 test<__uint128_t>(0);54#endif55 test<float>(1.f/zero);56 test<double>(1./zero);57 test<long double>(1./zero);58 59 return 0;60}61 62float zero = 0;63