//===----------------------------------------------------------------------===// // // Part of the LLVM Project, 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 // //===----------------------------------------------------------------------===// // // // template // _Tp* midpoint(_Tp* __a, _Tp* __b) noexcept // #include #include #include "test_macros.h" template __host__ __device__ constexpr void constexpr_test() { constexpr T array[1000] = {}; static_assert(cuda::std::is_same_v); static_assert(noexcept(cuda::std::midpoint(array, array))); static_assert(cuda::std::midpoint(array, array) == array, ""); static_assert(cuda::std::midpoint(array, array + 1000) == array + 500, ""); static_assert(cuda::std::midpoint(array, array + 9) == array + 4, ""); static_assert(cuda::std::midpoint(array, array + 10) == array + 5, ""); static_assert(cuda::std::midpoint(array, array + 11) == array + 5, ""); static_assert(cuda::std::midpoint(array + 9, array) == array + 5, ""); static_assert(cuda::std::midpoint(array + 10, array) == array + 5, ""); static_assert(cuda::std::midpoint(array + 11, array) == array + 6, ""); } template __host__ __device__ void runtime_test() { T array[1000] = {}; // we need an array to make valid pointers static_assert(cuda::std::is_same_v); static_assert(noexcept(cuda::std::midpoint(array, array))); assert(cuda::std::midpoint(array, array) == array); assert(cuda::std::midpoint(array, array + 1000) == array + 500); assert(cuda::std::midpoint(array, array + 9) == array + 4); assert(cuda::std::midpoint(array, array + 10) == array + 5); assert(cuda::std::midpoint(array, array + 11) == array + 5); assert(cuda::std::midpoint(array + 9, array) == array + 5); assert(cuda::std::midpoint(array + 10, array) == array + 5); assert(cuda::std::midpoint(array + 11, array) == array + 6); // explicit instantiation static_assert(cuda::std::is_same_v(array, array)), T*>); static_assert(noexcept(cuda::std::midpoint(array, array))); assert(cuda::std::midpoint(array, array) == array); assert(cuda::std::midpoint(array, array + 1000) == array + 500); } template __host__ __device__ void pointer_test() { runtime_test(); runtime_test(); runtime_test(); runtime_test(); // The constexpr tests are always const, but we can test them anyway. constexpr_test(); constexpr_test(); #if !TEST_COMPILER(GCC) constexpr_test(); constexpr_test(); #endif // !TEST_COMPILER(GCC) } int main(int, char**) { pointer_test(); pointer_test(); pointer_test(); return 0; }