//===----------------------------------------------------------------------===// // // Part of CUDA Experimental in CUDA C++ Core Libraries, // 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. // //===----------------------------------------------------------------------===// #include #include #include #include #include #include "common.h" C2H_CCCLRT_TEST("cuFile cufile_ref", "[cufile][cufile]") { constexpr auto filename = "cufile_ref_test_file"; // 1. Test public cufile_ref types and properties. STATIC_REQUIRE(cuda::std::is_same_v); // 2. Test default constructor. STATIC_REQUIRE(!cuda::std::is_default_constructible_v); // 3. Test cufile_ref(CUfileHandle_t) constructor. STATIC_REQUIRE(cuda::std::is_nothrow_constructible_v); STATIC_REQUIRE(cuda::std::is_convertible_v); { cudax::cufile file{filename, cudax::cufile_open_mode::out}; cudax::cufile_ref file_ref{file.get()}; REQUIRE(file_ref.get() == file.get()); } test_remove_file(filename); // 4. Test copy constructor. STATIC_REQUIRE(cuda::std::is_trivially_copy_constructible_v); // 5. Test move constructor. STATIC_REQUIRE(cuda::std::is_trivially_move_constructible_v); // 6. Test copy assignment. STATIC_REQUIRE(cuda::std::is_trivially_copy_assignable_v); // 7. Test move assignment. STATIC_REQUIRE(cuda::std::is_trivially_move_assignable_v); // 8. Test destructor. STATIC_REQUIRE(cuda::std::is_trivially_destructible_v); // 9. Test get(). STATIC_REQUIRE(noexcept(cuda::std::declval().get())); STATIC_REQUIRE(cuda::std::is_same_v().get())>); { const cudax::cufile file; REQUIRE(cudax::cufile_ref{file}.get() == nullptr); } { cudax::cufile file{filename, cudax::cufile_open_mode::out}; REQUIRE(cudax::cufile_ref{file}.get() != nullptr); } test_remove_file(filename); }