diff --git a/sycl/test/basic_tests/vectors/assign.cpp b/sycl/test/basic_tests/vectors/assign.cpp new file mode 100644 index 0000000000000..ca8f185d7a296 --- /dev/null +++ b/sycl/test/basic_tests/vectors/assign.cpp @@ -0,0 +1,79 @@ +// RUN: %clangxx -fsycl -fsyntax-only %s -fpreview-breaking-changes +// RUN: %clangxx -fsycl -fsyntax-only %s + +#include + +using sycl::half; +using sycl::vec; +using sw_half_1 = decltype(std::declval>().swizzle<1>()); +using sw_half_2 = decltype(std::declval>().swizzle<1, 2>()); + +using sw_float_1 = decltype(std::declval>().swizzle<1>()); +using sw_float_2 = decltype(std::declval>().swizzle<1, 2>()); + +using sw_double_1 = decltype(std::declval>().swizzle<1>()); +using sw_double_2 = decltype(std::declval>().swizzle<1, 2>()); + +// clang-format off + +// NOTE: Empty space is for the future markup using NOT_IN_PREVIEW/PREVIEW_ONLY +// macros. + +// IN_PREVIEW_ONLY condition<> +// EXCEPT_IN_PREVIEW condition<> + +static_assert( std::is_assignable_v, half>); +static_assert( std::is_assignable_v, float>); +static_assert( std::is_assignable_v, double>); +static_assert( std::is_assignable_v, vec>); +static_assert( std::is_assignable_v, vec>); +static_assert( std::is_assignable_v, vec>); +static_assert( std::is_assignable_v, sw_half_1>); +static_assert( std::is_assignable_v, sw_float_1>); +static_assert( std::is_assignable_v, sw_double_1>); +static_assert( !std::is_assignable_v, sw_half_2>); +static_assert( !std::is_assignable_v, sw_float_2>); +static_assert( !std::is_assignable_v, sw_double_2>); + +static_assert( std::is_assignable_v, half>); +static_assert( std::is_assignable_v, float>); +static_assert( std::is_assignable_v, double>); +static_assert( std::is_assignable_v, vec>); +static_assert( !std::is_assignable_v, vec>); +static_assert( !std::is_assignable_v, vec>); +static_assert( std::is_assignable_v, sw_half_1>); +static_assert( std::is_assignable_v, sw_float_1>); +static_assert( std::is_assignable_v, sw_double_1>); +static_assert( std::is_assignable_v, sw_half_2>); +static_assert( !std::is_assignable_v, sw_float_2>); +static_assert( !std::is_assignable_v, sw_double_2>); + +static_assert( std::is_assignable_v, half>); +static_assert( std::is_assignable_v, float>); +static_assert( std::is_assignable_v, double>); +static_assert( std::is_assignable_v, vec>); +static_assert( std::is_assignable_v, vec>); +static_assert( std::is_assignable_v, vec>); +static_assert( std::is_assignable_v, sw_half_1>); +static_assert( std::is_assignable_v, sw_float_1>); +static_assert( std::is_assignable_v, sw_double_1>); +static_assert( !std::is_assignable_v, sw_half_2>); +static_assert( !std::is_assignable_v, sw_float_2>); +static_assert( !std::is_assignable_v, sw_double_2>); + +static_assert( std::is_assignable_v, half>); +static_assert( std::is_assignable_v, float>); +static_assert( std::is_assignable_v, double>); +#if __SYCL_DEVICE_ONLY__ +static_assert( std::is_assignable_v, vec>); +#else +static_assert( !std::is_assignable_v, vec>); +#endif +static_assert( std::is_assignable_v, vec>); +static_assert( std::is_assignable_v, vec>); +static_assert( std::is_assignable_v, sw_half_1>); +static_assert( std::is_assignable_v, sw_float_1>); +static_assert( std::is_assignable_v, sw_double_1>); +static_assert( !std::is_assignable_v, sw_half_2>); +static_assert( std::is_assignable_v, sw_float_2>); +static_assert( !std::is_assignable_v, sw_double_2>); diff --git a/sycl/test/basic_tests/vectors/cxx_conversions.cpp b/sycl/test/basic_tests/vectors/cxx_conversions.cpp new file mode 100644 index 0000000000000..fb337c0e09e56 --- /dev/null +++ b/sycl/test/basic_tests/vectors/cxx_conversions.cpp @@ -0,0 +1,134 @@ +// RUN: %clangxx -fsycl -fsyntax-only %s -fpreview-breaking-changes +// RUN: %clangxx -fsycl -fsyntax-only %s + +#include + +template +struct is_explicitly_convertible_to_impl : std::false_type {}; + +template +struct is_explicitly_convertible_to_impl< + From, To, std::void_t(std::declval()))>> + : std::true_type {}; + +template +struct is_explicitly_convertible_to + : is_explicitly_convertible_to_impl {}; + +template +inline constexpr bool is_explicitly_convertible_to_v = + is_explicitly_convertible_to::value; + +using sycl::half; +using sycl::vec; + +void f_half_v1(vec); +void f_half_v4(vec); +void f_float_v1(vec); +void f_float_v4(vec); + +using sw_half_1 = decltype(std::declval>().swizzle<1>()); +using sw_half_2 = decltype(std::declval>().swizzle<1, 2>()); + +using sw_float_1 = decltype(std::declval>().swizzle<1>()); +using sw_float_2 = decltype(std::declval>().swizzle<1, 2>()); + +using sw_double_1 = decltype(std::declval>().swizzle<1>()); +using sw_double_2 = decltype(std::declval>().swizzle<1, 2>()); + +// clang-format off + +// NOTE: Empty space is for the future markup using NOT_IN_PREVIEW/PREVIEW_ONLY +// macros. + + +// IN_PREVIEW_ONLY condition<> +// EXCEPT_IN_PREVIEW condition<> + +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v>); +static_assert( std::is_invocable_v>); +static_assert( std::is_invocable_v>); + +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v); +static_assert( std::is_invocable_v>); +static_assert( std::is_invocable_v>); +static_assert( std::is_invocable_v>); + +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); + +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); +static_assert( !std::is_invocable_v); + +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); + +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); + +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( !is_explicitly_convertible_to_v>); +static_assert( !is_explicitly_convertible_to_v>); +static_assert( !is_explicitly_convertible_to_v>); +static_assert( !is_explicitly_convertible_to_v>); +static_assert( !is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( !is_explicitly_convertible_to_v>); +static_assert( !is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); +static_assert( is_explicitly_convertible_to_v>); + +static_assert( is_explicitly_convertible_to_v, half>); +#if __SYCL_DEVICE_ONLY__ +static_assert( is_explicitly_convertible_to_v, float>); +static_assert( is_explicitly_convertible_to_v, double>); +#else +static_assert( !is_explicitly_convertible_to_v, float>); +static_assert( !is_explicitly_convertible_to_v, double>); +#endif + +static_assert( is_explicitly_convertible_to_v, half>); +static_assert( is_explicitly_convertible_to_v, float>); +static_assert( is_explicitly_convertible_to_v, double>);