@@ -33,16 +33,28 @@ void test(bool CheckDevice, double delta, FuncTy F, ExpectedTy Expected,
33
33
34
34
sycl::buffer<bool , 1 > SuccessBuf{1 };
35
35
36
+ sycl::queue q;
37
+ sycl::device dev = q.get_device ();
36
38
// Make sure we don't use fp64 on devices that don't support it.
37
- sycl::detail::get_elem_type_t <ExpectedTy> d (delta);
38
-
39
- sycl::queue{}.submit ([&](sycl::handler &cgh) {
39
+ const bool fp64 = dev.has (sycl::aspect::fp64);
40
+ q.submit ([&](sycl::handler &cgh) {
40
41
sycl::accessor Success{SuccessBuf, cgh};
41
- cgh.single_task ([=]() {
42
- auto R = F (Args...);
43
- static_assert (std::is_same_v<decltype (Expected), decltype (R)>);
44
- Success[0 ] = equal (R, Expected, d);
45
- });
42
+ if (fp64) {
43
+ cgh.single_task ([=]() {
44
+ auto R = F (Args...);
45
+ static_assert (std::is_same_v<decltype (Expected), decltype (R)>);
46
+ // use double precision error tolerance when fp64 supported
47
+ Success[0 ] = equal (R, Expected, delta);
48
+ });
49
+ } else {
50
+ // downscale the error tolerance when fp64 is not supported
51
+ sycl::detail::get_elem_type_t <ExpectedTy> d (delta);
52
+ cgh.single_task ([=]() {
53
+ auto R = F (Args...);
54
+ static_assert (std::is_same_v<decltype (Expected), decltype (R)>);
55
+ Success[0 ] = equal (R, Expected, d);
56
+ });
57
+ }
46
58
});
47
59
assert (sycl::host_accessor{SuccessBuf}[0 ]);
48
60
}
0 commit comments