intmain() { static_assert(__STDCPP_FLOAT16_T__ == 1, "No float16 support"); static_assert(__STDCPP_FLOAT32_T__ == 1, "No float32 support"); static_assert(__STDCPP_FLOAT64_T__ == 1, "No float64 support"); static_assert(__STDCPP_FLOAT128_T__ == 1, "No float128 support"); static_assert(__STDCPP_BFLOAT16_T__ == 1, "No bfloat16 support");
static_assert(stdfloat_has_special_values<std::float16_t>(), "No special values for float16"); static_assert(stdfloat_has_special_values<std::float32_t>(), "No special values for float32"); static_assert(stdfloat_has_special_values<std::float64_t>(), "No special values for float64"); static_assert(stdfloat_has_special_values<std::float128_t>(), "No special values for float128"); static_assert(stdfloat_has_special_values<std::bfloat16_t>(), "No special values for bfloat16");
static_assert(std::numeric_limits<std::float16_t>::infinity() > std::numeric_limits<std::float16_t>::max(), "No infinity for float16"); static_assert(std::numeric_limits<std::float32_t>::infinity() > std::numeric_limits<std::float32_t>::max(), "No infinity for float32"); static_assert(std::numeric_limits<std::float64_t>::infinity() > std::numeric_limits<std::float64_t>::max(), "No infinity for float64"); static_assert(std::numeric_limits<std::float128_t>::infinity() > std::numeric_limits<std::float128_t>::max(), "No infinity for float128"); static_assert(std::numeric_limits<std::bfloat16_t>::infinity() > std::numeric_limits<std::bfloat16_t>::max(), "No infinity for bfloat16");
static_assert(-std::numeric_limits<std::float16_t>::infinity() < std::numeric_limits<std::float16_t>::lowest(), "No negative infinity for float16"); static_assert(-std::numeric_limits<std::float32_t>::infinity() < std::numeric_limits<std::float32_t>::lowest(), "No negative infinity for float32"); static_assert(-std::numeric_limits<std::float64_t>::infinity() < std::numeric_limits<std::float64_t>::lowest(), "No negative infinity for float64"); static_assert(-std::numeric_limits<std::float128_t>::infinity() < std::numeric_limits<std::float128_t>::lowest(), "No negative infinity for float128"); static_assert(-std::numeric_limits<std::bfloat16_t>::infinity() < std::numeric_limits<std::bfloat16_t>::lowest(), "No negative infinity for bfloat16");
// std::exp is not a constexpr function. assert(std::exp(-std::numeric_limits<std::float16_t>::infinity()) == 0.0f16); assert(std::exp(-std::numeric_limits<std::float32_t>::infinity()) == 0.0f32); assert(std::exp(-std::numeric_limits<std::float64_t>::infinity()) == 0.0f64); assert(std::exp(-std::numeric_limits<std::float128_t>::infinity()) == 0.0f128); assert(std::exp(-std::numeric_limits<std::bfloat16_t>::infinity()) == 0.0bf16); }