@@ -18,6 +18,18 @@ template <typename T> class Modifier;
1818
1919template <typename T> class Init ;
2020
21+ template <typename BufferT, typename ValueT>
22+ void checkBufferValues (BufferT Buffer, ValueT Value) {
23+ auto Acc = Buffer.template get_access <mode::read>();
24+ for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
25+ if (Acc[Idx] != Value) {
26+ std::cerr << " buffer[" << Idx << " ] = " << Acc[Idx]
27+ << " , expected val = " << Value << std::endl;
28+ assert (0 && " Invalid data in the buffer" );
29+ }
30+ }
31+ }
32+
2133template <typename DataT>
2234void copy (buffer<DataT, 1 > &Src, buffer<DataT, 1 > &Dst, queue &Q) {
2335 Q.submit ([&](handler &CGH) {
@@ -41,6 +53,11 @@ void copy(buffer<DataT, 1> &Src, buffer<DataT, 1> &Dst, queue &Q) {
4153
4254 if (RC != CL_SUCCESS)
4355 throw runtime_error (" Can't wait for event on buffer copy" , RC);
56+
57+ if (Q.get_backend () != IH.get_backend ())
58+ throw runtime_error (
59+ " interop_handle::get_backend() returned a wrong value" ,
60+ CL_INVALID_VALUE);
4461 });
4562 });
4663}
@@ -89,22 +106,8 @@ void test1() {
89106 copy (Buffer2, Buffer1, Q);
90107 }
91108
92- {
93- auto Acc = Buffer1.get_access <mode::read>();
94-
95- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
96- std::cout << " First buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
97- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the first buffer" );
98- }
99- }
100- {
101- auto Acc = Buffer2.get_access <mode::read>();
102-
103- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
104- std::cout << " Second buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
105- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the second buffer" );
106- }
107- }
109+ checkBufferValues (Buffer1, COUNT - 1 );
110+ checkBufferValues (Buffer2, COUNT - 1 );
108111}
109112
110113// Same as above, but performing each command group on a separate SYCL queue
@@ -128,23 +131,8 @@ void test2() {
128131 modify (Buffer2, Q);
129132 copy (Buffer2, Buffer1, Q);
130133 }
131-
132- {
133- auto Acc = Buffer1.get_access <mode::read>();
134-
135- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
136- std::cout << " First buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
137- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the first buffer" );
138- }
139- }
140- {
141- auto Acc = Buffer2.get_access <mode::read>();
142-
143- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
144- std::cout << " Second buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
145- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the second buffer" );
146- }
147- }
134+ checkBufferValues (Buffer1, COUNT - 1 );
135+ checkBufferValues (Buffer2, COUNT - 1 );
148136}
149137
150138// Same as above but with queue constructed out of context
@@ -168,23 +156,8 @@ void test2_1() {
168156 modify (Buffer2, Q);
169157 copy (Buffer2, Buffer1, Q);
170158 }
171-
172- {
173- auto Acc = Buffer1.get_access <mode::read>();
174-
175- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
176- std::cout << " First buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
177- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the first buffer" );
178- }
179- }
180- {
181- auto Acc = Buffer2.get_access <mode::read>();
182-
183- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
184- std::cout << " Second buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
185- assert ((Acc[Idx] == COUNT - 1 ) && " Invalid data in the second buffer" );
186- }
187- }
159+ checkBufferValues (Buffer1, COUNT - 1 );
160+ checkBufferValues (Buffer2, COUNT - 1 );
188161}
189162
190163// A test that does a clEnqueueWait inside the interop scope, for an event
@@ -245,14 +218,7 @@ void test5() {
245218
246219 copy (Buffer1, Buffer2, Q);
247220
248- {
249- auto Acc = Buffer2.get_access <mode::read>();
250-
251- for (size_t Idx = 0 ; Idx < Acc.get_count (); ++Idx) {
252- std::cout << " Second buffer [" << Idx << " ] = " << Acc[Idx] << std::endl;
253- assert (Acc[Idx] == 123 );
254- }
255- }
221+ checkBufferValues (Buffer2, static_cast <int >(123 ));
256222}
257223
258224// The test checks that an exception which is thrown from host_task body
@@ -292,5 +258,6 @@ int main() {
292258 test4 ();
293259 test5 ();
294260 test6 ();
261+ std::cout << " Test PASSED" << std::endl;
295262 return 0 ;
296263}
0 commit comments