@@ -55,6 +55,33 @@ template <typename From> void check_convert_from() {
55
55
check_signed_unsigned_convert_to<From, double >();
56
56
}
57
57
58
+ template <typename T, typename OpT> void check_ops (OpT op, T c1, T c2) {
59
+ auto check = [&](sycl::vec<T, 2 > vres) {
60
+ assert (op (c1, c2) == vres[0 ]);
61
+ assert (op (c1, c2) == vres[1 ]);
62
+ };
63
+
64
+ sycl::vec<T, 2 > v1 (c1);
65
+ sycl::vec<T, 2 > v2 (c2);
66
+ check (op (v1.template swizzle <0 , 1 >(), v2.template swizzle <0 , 1 >()));
67
+ check (op (v1.template swizzle <0 , 1 >(), v2));
68
+ check (op (v1.template swizzle <0 , 1 >(), c2));
69
+ check (op (c1, v2.template swizzle <0 , 1 >()));
70
+ check (op (c1, v2));
71
+ check (op (v1, v2.template swizzle <0 , 1 >()));
72
+ check (op (v1, v2));
73
+ check (op (v1, c2));
74
+
75
+ sycl::vec<T, 2 > v3 = {c1, c2};
76
+ sycl::vec<T, 2 > v4 = op (v3, v3.template swizzle <1 , 0 >());
77
+ assert (v4[0 ] == op (c1, c2) && v4[1 ] == op (c2, c1));
78
+ sycl::vec<T, 2 > v5 = op (v3.template swizzle <1 , 1 >(), v3);
79
+ assert (v5[0 ] == op (c2, c1) && v5[1 ] == op (c2, c2));
80
+ sycl::vec<T, 2 > v6 =
81
+ op (v3.template swizzle <1 , 1 >(), v3.template swizzle <0 , 0 >());
82
+ assert (v6[0 ] == op (c2, c1) && v6[1 ] == op (c2, c1));
83
+ }
84
+
58
85
int main () {
59
86
sycl::int4 a = {1 , 2 , 3 , 4 };
60
87
const sycl::int4 b = {10 , 20 , 30 , 40 };
@@ -91,6 +118,11 @@ int main() {
91
118
assert (static_cast <float >(b_vec.y ()) == static_cast <float >(0.5 ));
92
119
assert (static_cast <float >(b_vec.z ()) == static_cast <float >(0.5 ));
93
120
assert (static_cast <float >(b_vec.w ()) == static_cast <float >(0.5 ));
121
+ b_vec.swizzle <0 , 1 , 2 , 3 >() = 0.6 ;
122
+ assert (static_cast <float >(b_vec.x ()) == static_cast <float >(0.6 ));
123
+ assert (static_cast <float >(b_vec.y ()) == static_cast <float >(0.6 ));
124
+ assert (static_cast <float >(b_vec.z ()) == static_cast <float >(0.6 ));
125
+ assert (static_cast <float >(b_vec.w ()) == static_cast <float >(0.6 ));
94
126
95
127
// Check that vector with 'unsigned long long' elements has enough bits to
96
128
// store value.
@@ -142,5 +174,7 @@ int main() {
142
174
check_convert_from<double >();
143
175
check_convert_from<bool >();
144
176
177
+ check_ops<int >(std::modulus (), 6 , 3 );
178
+
145
179
return 0 ;
146
180
}
0 commit comments