//===----------------------------------------------------------------------===// // // Part of libcu++, the C++ Standard Library for your entire system, // under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. // //===----------------------------------------------------------------------===// // clang-format off #include // clang-format on #include #include #include #include #include #include "test_macros.h" template __host__ __device__ void test_fp_storage() { using Storage = cuda::std::__fp_storage_t; static_assert(cuda::std::is_integral_v); static_assert(sizeof(Storage) == sizeof(T)); static_assert(alignof(Storage) == alignof(T)); static_assert(cuda::std::is_same_v); const T max = cuda::std::numeric_limits::max(); const Storage max_bits = cuda::std::__fp_get_storage(max); assert(cuda::std::memcmp(&max, &max_bits, sizeof(T)) == 0); static_assert(cuda::std::is_same_v(Storage{}))>); const T max_back = cuda::std::__fp_from_storage(max_bits); assert(cuda::std::memcmp(&max, &max_back, sizeof(T)) == 0); } int main(int, char**) { test_fp_storage(); test_fp_storage(); #if _CCCL_HAS_LONG_DOUBLE() test_fp_storage(); #endif // _CCCL_HAS_LONG_DOUBLE() #if _CCCL_HAS_NVFP16() test_fp_storage<__half>(); #endif // _CCCL_HAS_NVFP16() #if _CCCL_HAS_NVBF16() test_fp_storage<__nv_bfloat16>(); #endif // _CCCL_HAS_NVBF16() #if _CCCL_HAS_NVFP8_E4M3() test_fp_storage<__nv_fp8_e4m3>(); #endif // _CCCL_HAS_NVFP8_E4M3() #if _CCCL_HAS_NVFP8_E5M2() test_fp_storage<__nv_fp8_e5m2>(); #endif // _CCCL_HAS_NVFP8_E5M2() #if _CCCL_HAS_NVFP8_E8M0() test_fp_storage<__nv_fp8_e8m0>(); #endif // _CCCL_HAS_NVFP8_E8M0() #if _CCCL_HAS_NVFP6_E2M3() test_fp_storage<__nv_fp6_e2m3>(); #endif // _CCCL_HAS_NVFP6_E2M3() #if _CCCL_HAS_NVFP6_E3M2() test_fp_storage<__nv_fp6_e3m2>(); #endif // _CCCL_HAS_NVFP6_E3M2() #if _CCCL_HAS_NVFP4_E2M1() test_fp_storage<__nv_fp4_e2m1>(); #endif // _CCCL_HAS_NVFP4_E2M1() return 0; }