]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/qvm/test/vec_register_test.cpp
bump version to 18.2.4-pve3
[ceph.git] / ceph / src / boost / libs / qvm / test / vec_register_test.cpp
CommitLineData
1e59de90
TL
1// Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
2// Copyright 2018 agate-pris
92f5a8d4
TL
3
4//Distributed under the Boost Software License, Version 1.0. (See accompanying
5//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
1e59de90
TL
7#ifdef BOOST_QVM_TEST_SINGLE_HEADER
8# include BOOST_QVM_TEST_SINGLE_HEADER
9#else
10# include <boost/qvm/vec_register.hpp>
11#endif
12
92f5a8d4 13#include <boost/core/lightweight_test.hpp>
92f5a8d4
TL
14
15struct v2
16{
17 float x;
18 float y;
19};
20
21struct v3 : v2
22{
23 float z;
24};
25
26struct v4 : v3
27{
28 float w;
29};
30
31struct v2r
32{
33 float xr;
34 float yr;
35};
36
37struct v3r : v2r
38{
39 float zr;
40};
41
42struct v4r : v3r
43{
44 float wr;
45};
46
47struct v2rw : v2, v2r { };
48struct v3rw : v3, v3r { };
49struct v4rw : v4, v4r { };
50
51BOOST_QVM_REGISTER_VEC_2(v2, float, x, y)
52BOOST_QVM_REGISTER_VEC_3(v3, float, x, y, z)
53BOOST_QVM_REGISTER_VEC_4(v4, float, x, y, z, w)
54
55BOOST_QVM_REGISTER_VEC_2_READ(v2r, float, xr, yr)
56BOOST_QVM_REGISTER_VEC_3_READ(v3r, float, xr, yr, zr)
57BOOST_QVM_REGISTER_VEC_4_READ(v4r, float, xr, yr, zr, wr)
58
59BOOST_QVM_REGISTER_VEC_2_READ_WRITE(v2rw, float, xr, yr, x, y)
60BOOST_QVM_REGISTER_VEC_3_READ_WRITE(v3rw, float, xr, yr, zr, x, y, z)
61BOOST_QVM_REGISTER_VEC_4_READ_WRITE(v4rw, float, xr, yr, zr, wr, x, y, z, w)
62
63int main()
64{
65 using namespace boost::qvm;
66
67 v2 v_v2;
68 v3 v_v3;
69 v4 v_v4;
70 v2r v_v2r;
71 v3r v_v3r;
72 v4r v_v4r;
73 v2rw v_v2rw;
74 v3rw v_v3rw;
75 v4rw v_v4rw;
76
77 v_v2.x = 41.f;
78 v_v3.x = 42.f;
79 v_v4.x = 43.f;
80 v_v2.y = 44.f;
81 v_v3.y = 45.f;
82 v_v4.y = 46.f;
83 v_v3.z = 47.f;
84 v_v4.z = 48.f;
85 v_v4.w = 49.f;
86
87 v_v2r.xr = 51.f;
88 v_v3r.xr = 52.f;
89 v_v4r.xr = 53.f;
90 v_v2r.yr = 54.f;
91 v_v3r.yr = 55.f;
92 v_v4r.yr = 56.f;
93 v_v3r.zr = 57.f;
94 v_v4r.zr = 58.f;
95 v_v4r.wr = 59.f;
96
97 v_v2rw.x = 61.f;
98 v_v3rw.x = 62.f;
99 v_v4rw.x = 63.f;
100 v_v2rw.y = 64.f;
101 v_v3rw.y = 65.f;
102 v_v4rw.y = 66.f;
103 v_v3rw.z = 67.f;
104 v_v4rw.z = 68.f;
105 v_v4rw.w = 69.f;
106
107 v_v2rw.xr = 71.f;
108 v_v3rw.xr = 72.f;
109 v_v4rw.xr = 73.f;
110 v_v2rw.yr = 74.f;
111 v_v3rw.yr = 75.f;
112 v_v4rw.yr = 76.f;
113 v_v3rw.zr = 77.f;
114 v_v4rw.zr = 78.f;
115 v_v4rw.wr = 79.f;
116
117 BOOST_TEST(vec_traits<v2 >::read_element<0>(v_v2 ) == v_v2 .x );
118 BOOST_TEST(vec_traits<v3 >::read_element<0>(v_v3 ) == v_v3 .x );
119 BOOST_TEST(vec_traits<v4 >::read_element<0>(v_v4 ) == v_v4 .x );
120 BOOST_TEST(vec_traits<v2r >::read_element<0>(v_v2r ) == v_v2r .xr);
121 BOOST_TEST(vec_traits<v3r >::read_element<0>(v_v3r ) == v_v3r .xr);
122 BOOST_TEST(vec_traits<v4r >::read_element<0>(v_v4r ) == v_v4r .xr);
123 BOOST_TEST(vec_traits<v2rw>::read_element<0>(v_v2rw) == v_v2rw.xr);
124 BOOST_TEST(vec_traits<v3rw>::read_element<0>(v_v3rw) == v_v3rw.xr);
125 BOOST_TEST(vec_traits<v4rw>::read_element<0>(v_v4rw) == v_v4rw.xr);
126 BOOST_TEST(vec_traits<v2 >::read_element<1>(v_v2 ) == v_v2 .y );
127 BOOST_TEST(vec_traits<v3 >::read_element<1>(v_v3 ) == v_v3 .y );
128 BOOST_TEST(vec_traits<v4 >::read_element<1>(v_v4 ) == v_v4 .y );
129 BOOST_TEST(vec_traits<v2r >::read_element<1>(v_v2r ) == v_v2r .yr);
130 BOOST_TEST(vec_traits<v3r >::read_element<1>(v_v3r ) == v_v3r .yr);
131 BOOST_TEST(vec_traits<v4r >::read_element<1>(v_v4r ) == v_v4r .yr);
132 BOOST_TEST(vec_traits<v2rw>::read_element<1>(v_v2rw) == v_v2rw.yr);
133 BOOST_TEST(vec_traits<v3rw>::read_element<1>(v_v3rw) == v_v3rw.yr);
134 BOOST_TEST(vec_traits<v4rw>::read_element<1>(v_v4rw) == v_v4rw.yr);
135 BOOST_TEST(vec_traits<v3 >::read_element<2>(v_v3 ) == v_v3 .z );
136 BOOST_TEST(vec_traits<v4 >::read_element<2>(v_v4 ) == v_v4 .z );
137 BOOST_TEST(vec_traits<v3r >::read_element<2>(v_v3r ) == v_v3r .zr);
138 BOOST_TEST(vec_traits<v4r >::read_element<2>(v_v4r ) == v_v4r .zr);
139 BOOST_TEST(vec_traits<v3rw>::read_element<2>(v_v3rw) == v_v3rw.zr);
140 BOOST_TEST(vec_traits<v4rw>::read_element<2>(v_v4rw) == v_v4rw.zr);
141 BOOST_TEST(vec_traits<v4 >::read_element<3>(v_v4 ) == v_v4 .w );
142 BOOST_TEST(vec_traits<v4r >::read_element<3>(v_v4r ) == v_v4r .wr);
143 BOOST_TEST(vec_traits<v4rw>::read_element<3>(v_v4rw) == v_v4rw.wr);
144
145 BOOST_TEST(vec_traits<v2 >::read_element_idx(0, v_v2 ) == v_v2 .x );
146 BOOST_TEST(vec_traits<v3 >::read_element_idx(0, v_v3 ) == v_v3 .x );
147 BOOST_TEST(vec_traits<v4 >::read_element_idx(0, v_v4 ) == v_v4 .x );
148 BOOST_TEST(vec_traits<v2r >::read_element_idx(0, v_v2r ) == v_v2r .xr);
149 BOOST_TEST(vec_traits<v3r >::read_element_idx(0, v_v3r ) == v_v3r .xr);
150 BOOST_TEST(vec_traits<v4r >::read_element_idx(0, v_v4r ) == v_v4r .xr);
151 BOOST_TEST(vec_traits<v2rw>::read_element_idx(0, v_v2rw) == v_v2rw.xr);
152 BOOST_TEST(vec_traits<v3rw>::read_element_idx(0, v_v3rw) == v_v3rw.xr);
153 BOOST_TEST(vec_traits<v4rw>::read_element_idx(0, v_v4rw) == v_v4rw.xr);
154 BOOST_TEST(vec_traits<v2 >::read_element_idx(1, v_v2 ) == v_v2 .y );
155 BOOST_TEST(vec_traits<v3 >::read_element_idx(1, v_v3 ) == v_v3 .y );
156 BOOST_TEST(vec_traits<v4 >::read_element_idx(1, v_v4 ) == v_v4 .y );
157 BOOST_TEST(vec_traits<v2r >::read_element_idx(1, v_v2r ) == v_v2r .yr);
158 BOOST_TEST(vec_traits<v3r >::read_element_idx(1, v_v3r ) == v_v3r .yr);
159 BOOST_TEST(vec_traits<v4r >::read_element_idx(1, v_v4r ) == v_v4r .yr);
160 BOOST_TEST(vec_traits<v2rw>::read_element_idx(1, v_v2rw) == v_v2rw.yr);
161 BOOST_TEST(vec_traits<v3rw>::read_element_idx(1, v_v3rw) == v_v3rw.yr);
162 BOOST_TEST(vec_traits<v4rw>::read_element_idx(1, v_v4rw) == v_v4rw.yr);
163 BOOST_TEST(vec_traits<v3 >::read_element_idx(2, v_v3 ) == v_v3 .z );
164 BOOST_TEST(vec_traits<v4 >::read_element_idx(2, v_v4 ) == v_v4 .z );
165 BOOST_TEST(vec_traits<v3r >::read_element_idx(2, v_v3r ) == v_v3r .zr);
166 BOOST_TEST(vec_traits<v4r >::read_element_idx(2, v_v4r ) == v_v4r .zr);
167 BOOST_TEST(vec_traits<v3rw>::read_element_idx(2, v_v3rw) == v_v3rw.zr);
168 BOOST_TEST(vec_traits<v4rw>::read_element_idx(2, v_v4rw) == v_v4rw.zr);
169 BOOST_TEST(vec_traits<v4 >::read_element_idx(3, v_v4 ) == v_v4 .w );
170 BOOST_TEST(vec_traits<v4r >::read_element_idx(3, v_v4r ) == v_v4r .wr);
171 BOOST_TEST(vec_traits<v4rw>::read_element_idx(3, v_v4rw) == v_v4rw.wr);
172
173 BOOST_TEST(&vec_traits<v2 >::write_element<0>(v_v2 ) == &v_v2 .x );
174 BOOST_TEST(&vec_traits<v3 >::write_element<0>(v_v3 ) == &v_v3 .x );
175 BOOST_TEST(&vec_traits<v4 >::write_element<0>(v_v4 ) == &v_v4 .x );
176 BOOST_TEST_NOT(&vec_traits<v2rw>::write_element<0>(v_v2rw) == &v_v2rw.xr);
177 BOOST_TEST_NOT(&vec_traits<v3rw>::write_element<0>(v_v3rw) == &v_v3rw.xr);
178 BOOST_TEST_NOT(&vec_traits<v4rw>::write_element<0>(v_v4rw) == &v_v4rw.xr);
179 BOOST_TEST(&vec_traits<v2rw>::write_element<0>(v_v2rw) == &v_v2rw.x );
180 BOOST_TEST(&vec_traits<v3rw>::write_element<0>(v_v3rw) == &v_v3rw.x );
181 BOOST_TEST(&vec_traits<v4rw>::write_element<0>(v_v4rw) == &v_v4rw.x );
182 BOOST_TEST(&vec_traits<v2 >::write_element<1>(v_v2 ) == &v_v2 .y );
183 BOOST_TEST(&vec_traits<v3 >::write_element<1>(v_v3 ) == &v_v3 .y );
184 BOOST_TEST(&vec_traits<v4 >::write_element<1>(v_v4 ) == &v_v4 .y );
185 BOOST_TEST_NOT(&vec_traits<v2rw>::write_element<1>(v_v2rw) == &v_v2rw.yr);
186 BOOST_TEST_NOT(&vec_traits<v3rw>::write_element<1>(v_v3rw) == &v_v3rw.yr);
187 BOOST_TEST_NOT(&vec_traits<v4rw>::write_element<1>(v_v4rw) == &v_v4rw.yr);
188 BOOST_TEST(&vec_traits<v2rw>::write_element<1>(v_v2rw) == &v_v2rw.y );
189 BOOST_TEST(&vec_traits<v3rw>::write_element<1>(v_v3rw) == &v_v3rw.y );
190 BOOST_TEST(&vec_traits<v4rw>::write_element<1>(v_v4rw) == &v_v4rw.y );
191 BOOST_TEST(&vec_traits<v3 >::write_element<2>(v_v3 ) == &v_v3 .z );
192 BOOST_TEST(&vec_traits<v4 >::write_element<2>(v_v4 ) == &v_v4 .z );
193 BOOST_TEST_NOT(&vec_traits<v3rw>::write_element<2>(v_v3rw) == &v_v3rw.zr);
194 BOOST_TEST_NOT(&vec_traits<v4rw>::write_element<2>(v_v4rw) == &v_v4rw.zr);
195 BOOST_TEST(&vec_traits<v3rw>::write_element<2>(v_v3rw) == &v_v3rw.z );
196 BOOST_TEST(&vec_traits<v4rw>::write_element<2>(v_v4rw) == &v_v4rw.z );
197 BOOST_TEST(&vec_traits<v4 >::write_element<3>(v_v4 ) == &v_v4 .w );
198 BOOST_TEST_NOT(&vec_traits<v4rw>::write_element<3>(v_v4rw) == &v_v4rw.wr);
199 BOOST_TEST(&vec_traits<v4rw>::write_element<3>(v_v4rw) == &v_v4rw.w );
200
201 BOOST_TEST(&vec_traits<v2 >::write_element_idx(0, v_v2 ) == &v_v2 .x );
202 BOOST_TEST(&vec_traits<v3 >::write_element_idx(0, v_v3 ) == &v_v3 .x );
203 BOOST_TEST(&vec_traits<v4 >::write_element_idx(0, v_v4 ) == &v_v4 .x );
204 BOOST_TEST_NOT(&vec_traits<v2rw>::write_element_idx(0, v_v2rw) == &v_v2rw.xr);
205 BOOST_TEST_NOT(&vec_traits<v3rw>::write_element_idx(0, v_v3rw) == &v_v3rw.xr);
206 BOOST_TEST_NOT(&vec_traits<v4rw>::write_element_idx(0, v_v4rw) == &v_v4rw.xr);
207 BOOST_TEST(&vec_traits<v2rw>::write_element_idx(0, v_v2rw) == &v_v2rw.x );
208 BOOST_TEST(&vec_traits<v3rw>::write_element_idx(0, v_v3rw) == &v_v3rw.x );
209 BOOST_TEST(&vec_traits<v4rw>::write_element_idx(0, v_v4rw) == &v_v4rw.x );
210 BOOST_TEST(&vec_traits<v2 >::write_element_idx(1, v_v2 ) == &v_v2 .y );
211 BOOST_TEST(&vec_traits<v3 >::write_element_idx(1, v_v3 ) == &v_v3 .y );
212 BOOST_TEST(&vec_traits<v4 >::write_element_idx(1, v_v4 ) == &v_v4 .y );
213 BOOST_TEST_NOT(&vec_traits<v2rw>::write_element_idx(1, v_v2rw) == &v_v2rw.yr);
214 BOOST_TEST_NOT(&vec_traits<v3rw>::write_element_idx(1, v_v3rw) == &v_v3rw.yr);
215 BOOST_TEST_NOT(&vec_traits<v4rw>::write_element_idx(1, v_v4rw) == &v_v4rw.yr);
216 BOOST_TEST(&vec_traits<v2rw>::write_element_idx(1, v_v2rw) == &v_v2rw.y );
217 BOOST_TEST(&vec_traits<v3rw>::write_element_idx(1, v_v3rw) == &v_v3rw.y );
218 BOOST_TEST(&vec_traits<v4rw>::write_element_idx(1, v_v4rw) == &v_v4rw.y );
219 BOOST_TEST(&vec_traits<v3 >::write_element_idx(2, v_v3 ) == &v_v3 .z );
220 BOOST_TEST(&vec_traits<v4 >::write_element_idx(2, v_v4 ) == &v_v4 .z );
221 BOOST_TEST_NOT(&vec_traits<v3rw>::write_element_idx(2, v_v3rw) == &v_v3rw.zr);
222 BOOST_TEST_NOT(&vec_traits<v4rw>::write_element_idx(2, v_v4rw) == &v_v4rw.zr);
223 BOOST_TEST(&vec_traits<v3rw>::write_element_idx(2, v_v3rw) == &v_v3rw.z );
224 BOOST_TEST(&vec_traits<v4rw>::write_element_idx(2, v_v4rw) == &v_v4rw.z );
225 BOOST_TEST(&vec_traits<v4 >::write_element_idx(3, v_v4 ) == &v_v4 .w );
226 BOOST_TEST_NOT(&vec_traits<v4rw>::write_element_idx(3, v_v4rw) == &v_v4rw.wr);
227 BOOST_TEST(&vec_traits<v4rw>::write_element_idx(3, v_v4rw) == &v_v4rw.w );
228
229 return boost::report_errors();
230}