|
| 1 | +// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out |
| 2 | +// RUN: %CPU_RUN_PLACEHOLDER %t.out |
| 3 | +// RUN: %GPU_RUN_PLACEHOLDER %t.out |
| 4 | +// RUN: %ACC_RUN_PLACEHOLDER %t.out |
| 5 | + |
| 6 | +#include <CL/sycl.hpp> |
| 7 | + |
| 8 | +#define TEST(FUNC, TYPE, EXPECTED, N, ...) \ |
| 9 | + { \ |
| 10 | + { \ |
| 11 | + TYPE result[N]; \ |
| 12 | + { \ |
| 13 | + sycl::buffer<TYPE> b(result, sycl::range{N}); \ |
| 14 | + deviceQueue.submit([&](sycl::handler &cgh) { \ |
| 15 | + sycl::accessor res_access{b, cgh}; \ |
| 16 | + cgh.single_task([=]() { \ |
| 17 | + sycl::marray<TYPE, N> res = FUNC(__VA_ARGS__); \ |
| 18 | + for (int i = 0; i < N; i++) \ |
| 19 | + res_access[i] = res[i]; \ |
| 20 | + }); \ |
| 21 | + }); \ |
| 22 | + } \ |
| 23 | + for (int i = 0; i < N; i++) \ |
| 24 | + assert(result[i] == EXPECTED[i]); \ |
| 25 | + } \ |
| 26 | + } |
| 27 | + |
| 28 | +#define EXPECTED(TYPE, ...) ((TYPE[]){__VA_ARGS__}) |
| 29 | + |
| 30 | +int main() { |
| 31 | + sycl::queue deviceQueue; |
| 32 | + |
| 33 | + sycl::marray<float, 2> ma1{1.0, 2.0}; |
| 34 | + sycl::marray<float, 2> ma2{1.0, 2.0}; |
| 35 | + sycl::marray<float, 2> ma3{2.0, 1.0}; |
| 36 | + sycl::marray<float, 2> ma4{2.0, 2.0}; |
| 37 | + sycl::marray<float, 3> ma5{2.0, 2.0, 1.0}; |
| 38 | + sycl::marray<float, 3> ma6{1.0, 5.0, 8.0}; |
| 39 | + sycl::marray<bool, 3> c(1, 0, 1); |
| 40 | + |
| 41 | + TEST(sycl::isequal, bool, EXPECTED(bool, 1, 1), 2, ma1, ma2); |
| 42 | + TEST(sycl::isnotequal, bool, EXPECTED(bool, 0, 0), 2, ma1, ma2); |
| 43 | + TEST(sycl::isgreater, bool, EXPECTED(bool, 0, 1), 2, ma1, ma3); |
| 44 | + TEST(sycl::isgreaterequal, bool, EXPECTED(bool, 0, 1), 2, ma1, ma4); |
| 45 | + TEST(sycl::isless, bool, EXPECTED(bool, 0, 1), 2, ma3, ma1); |
| 46 | + TEST(sycl::islessequal, bool, EXPECTED(bool, 0, 1), 2, ma4, ma1); |
| 47 | + TEST(sycl::islessgreater, bool, EXPECTED(bool, 0, 0), 2, ma1, ma2); |
| 48 | + TEST(sycl::isfinite, bool, EXPECTED(bool, 1, 1), 2, ma1); |
| 49 | + TEST(sycl::isinf, bool, EXPECTED(bool, 0, 0), 2, ma1); |
| 50 | + TEST(sycl::isnan, bool, EXPECTED(bool, 0, 0), 2, ma1); |
| 51 | + TEST(sycl::isnormal, bool, EXPECTED(bool, 1, 1), 2, ma1); |
| 52 | + TEST(sycl::isordered, bool, EXPECTED(bool, 1, 1), 2, ma1, ma2); |
| 53 | + TEST(sycl::isunordered, bool, EXPECTED(bool, 0, 0), 2, ma1, ma2); |
| 54 | + TEST(sycl::signbit, bool, EXPECTED(bool, 0, 0), 2, ma1); |
| 55 | + TEST(sycl::select, float, EXPECTED(float, 1.0, 2.0, 8.0), 3, ma5, ma6, c); |
| 56 | + |
| 57 | + return 0; |
| 58 | +} |
0 commit comments