//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // modulus #define _LIBCUDACXX_DISABLE_DEPRECATION_WARNINGS #include #include #include #include "test_macros.h" // ensure that we allow `__device__` functions too struct with_device_op { __device__ friend constexpr with_device_op operator%(const with_device_op&, const with_device_op&) { return {}; } __device__ constexpr operator bool() const { return true; } }; __global__ void test_global_kernel() { const cuda::std::modulus f; assert(f({}, {})); } int main(int, char**) { typedef cuda::std::modulus F; const F f = F(); #if TEST_STD_VER <= 2017 static_assert((cuda::std::is_same::value), ""); static_assert((cuda::std::is_same::value), ""); static_assert((cuda::std::is_same::value), ""); #endif // TEST_STD_VER <= 2017 assert(f(36, 8) == 4); typedef cuda::std::modulus<> F2; const F2 f2 = F2(); assert(f2(36, 8) == 4); assert(f2(36L, 8) == 4); assert(f2(36, 8L) == 4); constexpr int foo = cuda::std::modulus()(3, 2); static_assert(foo == 1, ""); constexpr int bar = cuda::std::modulus<>()(3L, 2); static_assert(bar == 1, ""); return 0; }