@@ -60,6 +60,58 @@ template <typename Acc> struct Wrapper2 {
60
60
61
61
template <typename Acc> struct Wrapper3 { Wrapper2<Acc> w2; };
62
62
63
+ template <typename T> void TestAccSizeFuncs (const std::vector<T> &vec) {
64
+ auto test = [=](auto &Res, const auto &Acc) {
65
+ Res[0 ] = Acc.byte_size ();
66
+ Res[1 ] = Acc.size ();
67
+ Res[2 ] = Acc.max_size ();
68
+ Res[3 ] = size_t (Acc.empty ());
69
+ };
70
+ auto checkResult = [=](const std::vector<size_t > &Res, size_t MaxSize) {
71
+ assert (Res[0 ] == vec.size () * sizeof (T));
72
+ assert (Res[1 ] == vec.size ());
73
+ assert (Res[2 ] == MaxSize);
74
+ assert (Res[3 ] == vec.empty ());
75
+ };
76
+ std::vector<size_t > res (4 ); // for 4 functions results
77
+
78
+ sycl::buffer<T> bufInput (vec.data (), vec.size ());
79
+ sycl::host_accessor accInput (bufInput);
80
+ test (res, accInput);
81
+ checkResult (res,
82
+ std::numeric_limits<
83
+ typename sycl::host_accessor<T>::difference_type>::max ());
84
+
85
+ sycl::queue q;
86
+ {
87
+ sycl::buffer<T> bufInput (vec.data (), vec.size ());
88
+ sycl::buffer<size_t > bufRes (res.data (), res.size ());
89
+
90
+ q.submit ([&](sycl::handler &cgh) {
91
+ sycl::accessor accInput (bufInput, cgh);
92
+ sycl::accessor accRes (bufRes, cgh);
93
+ cgh.single_task ([=]() { test (accRes, accInput); });
94
+ });
95
+ q.wait ();
96
+ }
97
+ checkResult (
98
+ res,
99
+ std::numeric_limits<typename sycl::accessor<T>::difference_type>::max ());
100
+
101
+ {
102
+ sycl::buffer<size_t > bufRes (res.data (), res.size ());
103
+ q.submit ([&](sycl::handler &cgh) {
104
+ sycl::accessor accRes (bufRes, cgh);
105
+ sycl::local_accessor<T, 1 > locAcc (vec.size (), cgh);
106
+ cgh.single_task ([=]() { test (accRes, locAcc); });
107
+ });
108
+ q.wait ();
109
+ }
110
+ checkResult (res,
111
+ std::numeric_limits<
112
+ typename sycl::local_accessor<T>::difference_type>::max ());
113
+ }
114
+
63
115
template <typename GlobAcc, typename LocAcc>
64
116
void testLocalAccItersImpl (sycl::handler &cgh, GlobAcc &globAcc, LocAcc &locAcc,
65
117
bool testConstIter) {
@@ -827,6 +879,71 @@ int main() {
827
879
}
828
880
}
829
881
882
+ // Test byte_size(), size(), max_size(), empty()
883
+ {
884
+ std::vector<char > vecChar (64 , ' a' );
885
+ std::vector<int > vecInt (32 , 1 );
886
+ std::vector<float > vecFloat (16 , 1.0 );
887
+ std::vector<IdxID3> vecCustom (8 , {0 , 0 , 0 });
888
+ TestAccSizeFuncs (vecChar);
889
+ TestAccSizeFuncs (vecInt);
890
+ TestAccSizeFuncs (vecFloat);
891
+ TestAccSizeFuncs (vecCustom);
892
+ }
893
+ // Test swap() on host_accessor
894
+ {
895
+ std::vector<int > vec1 (8 ), vec2 (16 );
896
+ {
897
+ sycl::buffer<int > buf1 (vec1.data (), vec1.size ());
898
+ sycl::buffer<int > buf2 (vec2.data (), vec2.size ());
899
+ sycl::host_accessor acc1 (buf1);
900
+ sycl::host_accessor acc2 (buf2);
901
+ acc1.swap (acc2);
902
+ acc1[15 ] = 4 ;
903
+ acc2[7 ] = 4 ;
904
+ }
905
+ assert (vec1[7 ] == 4 && vec2[15 ] == 4 );
906
+ }
907
+ // Test swap() on basic accessor
908
+ {
909
+ std::vector<int > vec1 (8 ), vec2 (16 );
910
+ {
911
+ sycl::buffer<int > buf1 (vec1.data (), vec1.size ());
912
+ sycl::buffer<int > buf2 (vec2.data (), vec2.size ());
913
+ sycl::queue q;
914
+ q.submit ([&](sycl::handler &cgh) {
915
+ sycl::accessor acc1 (buf1, cgh);
916
+ sycl::accessor acc2 (buf2, cgh);
917
+ acc1.swap (acc2);
918
+ cgh.single_task ([=]() {
919
+ acc1[15 ] = 4 ;
920
+ acc2[7 ] = 4 ;
921
+ });
922
+ });
923
+ }
924
+ assert (vec1[7 ] == 4 && vec2[15 ] == 4 );
925
+ }
926
+ // Test swap on local_accessor
927
+ {
928
+ size_t size1 = 0 , size2 = 0 ;
929
+ {
930
+ sycl::buffer<size_t > buf1 (&size1, 1 );
931
+ sycl::buffer<size_t > buf2 (&size2, 1 );
932
+
933
+ sycl::queue q;
934
+ q.submit ([&](sycl::handler &cgh) {
935
+ sycl::accessor acc1 (buf1, cgh);
936
+ sycl::accessor acc2 (buf2, cgh);
937
+ sycl::local_accessor<int , 1 > locAcc1 (8 , cgh), locAcc2 (16 , cgh);
938
+ locAcc1.swap (locAcc2);
939
+ cgh.single_task ([=]() {
940
+ acc1[0 ] = locAcc1.size ();
941
+ acc2[0 ] = locAcc2.size ();
942
+ });
943
+ });
944
+ }
945
+ assert (size1 == 16 && size2 == 8 );
946
+ }
830
947
// Test iterator methods with 1D local_accessor
831
948
{
832
949
std::vector<int > v (32 );
0 commit comments