]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/qvm/test/interop_test.cpp
1 // Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #ifdef BOOST_QVM_TEST_SINGLE_HEADER
7 # include BOOST_QVM_TEST_SINGLE_HEADER
9 # include <boost/qvm/operations.hpp>
10 # include <boost/qvm/quat.hpp>
11 # include <boost/qvm/vec.hpp>
12 # include <boost/qvm/mat.hpp>
45 mat_traits
<my_stuff::mat
>
47 typedef float scalar_type
;
48 static int const rows
=3;
49 static int const cols
=3;
51 template <int R
,int C
>
54 write_element( my_stuff::mat
& m
)
56 BOOST_QVM_STATIC_ASSERT(R
>=0);
57 BOOST_QVM_STATIC_ASSERT(R
<rows
);
58 BOOST_QVM_STATIC_ASSERT(C
>=0);
59 BOOST_QVM_STATIC_ASSERT(C
<cols
);
63 template <int R
,int C
>
66 read_element( my_stuff::mat
const & m
)
68 BOOST_QVM_STATIC_ASSERT(R
>=0);
69 BOOST_QVM_STATIC_ASSERT(R
<rows
);
70 BOOST_QVM_STATIC_ASSERT(C
>=0);
71 BOOST_QVM_STATIC_ASSERT(C
<cols
);
78 write_element_idx( int r
, int c
, my_stuff::mat
& m
)
80 BOOST_QVM_ASSERT(r
>=0);
81 BOOST_QVM_ASSERT(r
<rows
);
82 BOOST_QVM_ASSERT(c
>=0);
83 BOOST_QVM_ASSERT(c
<cols
);
90 read_element_idx( int r
, int c
, my_stuff::mat
const & m
)
92 BOOST_QVM_ASSERT(r
>=0);
93 BOOST_QVM_ASSERT(r
<rows
);
94 BOOST_QVM_ASSERT(c
>=0);
95 BOOST_QVM_ASSERT(c
<cols
);
102 vec_traits
<my_stuff::vec
>
104 static int const dim
=3;
105 typedef float scalar_type
;
110 write_element( my_stuff::vec
& m
)
112 BOOST_QVM_STATIC_ASSERT(I
>=0);
113 BOOST_QVM_STATIC_ASSERT(I
<dim
);
120 read_element( my_stuff::vec
const & m
)
122 BOOST_QVM_STATIC_ASSERT(I
>=0);
123 BOOST_QVM_STATIC_ASSERT(I
<dim
);
130 write_element_idx( int i
, my_stuff::vec
& m
)
132 BOOST_QVM_ASSERT(i
>=0);
133 BOOST_QVM_ASSERT(i
<dim
);
140 read_element_idx( int i
, my_stuff::vec
const & m
)
142 BOOST_QVM_ASSERT(i
>=0);
143 BOOST_QVM_ASSERT(i
<dim
);
150 quat_traits
<my_stuff::quat
>
152 typedef float scalar_type
;
157 write_element( my_stuff::quat
& m
)
159 BOOST_QVM_STATIC_ASSERT(I
>=0);
160 BOOST_QVM_STATIC_ASSERT(I
<4);
167 read_element( my_stuff::quat
const & m
)
169 BOOST_QVM_STATIC_ASSERT(I
>=0);
170 BOOST_QVM_STATIC_ASSERT(I
<4);
181 operator/=( mat
& x
, float y
)
183 return boost::qvm::operator/=(x
,y
);
187 operator/=( vec
& x
, float y
)
189 return boost::qvm::operator/=(x
,y
);
193 operator/=( quat
& x
, float y
)
195 return boost::qvm::operator/=(x
,y
);
199 operator*=( mat
& x
, float y
)
201 return boost::qvm::operator*=(x
,y
);
205 operator*=( vec
& x
, float y
)
207 return boost::qvm::operator*=(x
,y
);
211 operator*=( quat
& x
, float y
)
213 return boost::qvm::operator*=(x
,y
);
217 operator/( mat
const & x
, float y
)
219 return boost::qvm::operator/(x
,y
);
223 operator/( vec
const & x
, float y
)
225 return boost::qvm::operator/(x
,y
);
229 operator/( quat
const & x
, float y
)
231 return boost::qvm::operator/(x
,y
);
235 operator*( mat
const & x
, float y
)
237 return boost::qvm::operator*(x
,y
);
241 operator*( vec
const & x
, float y
)
243 return boost::qvm::operator*(x
,y
);
247 operator*( quat
const & x
, float y
)
249 return boost::qvm::operator*(x
,y
);
253 operator*=( mat
& x
, mat
const & y
)
255 return boost::qvm::operator*=(x
,y
);
259 operator*=( mat
const & x
, mat
const & y
)
261 return boost::qvm::operator*(x
,y
);
265 operator*( mat
const & x
, vec
const & y
)
267 return boost::qvm::operator*(x
,y
);
271 operator*( quat
const & x
, vec
const & y
)
273 return boost::qvm::operator*(x
,y
);
277 operator*( vec
const & x
, mat
const & y
)
279 return boost::qvm::operator*(x
,y
);
283 operator==( mat
const & x
, mat
const & y
)
285 return boost::qvm::operator==(x
,y
);
289 operator!=( mat
const & x
, mat
const & y
)
291 return boost::qvm::operator!=(x
,y
);
295 operator==( vec
const & x
, vec
const & y
)
297 return boost::qvm::operator==(x
,y
);
301 operator!=( vec
const & x
, vec
const & y
)
303 return boost::qvm::operator!=(x
,y
);
307 operator==( quat
const & x
, quat
const & y
)
309 return boost::qvm::operator==(x
,y
);
313 operator!=( quat
const & x
, quat
const & y
)
315 return boost::qvm::operator!=(x
,y
);
322 using namespace boost::qvm::sfinae
;
323 using namespace my_stuff
;
324 typedef boost::qvm::mat
<double,3,3> mat2
;
325 typedef boost::qvm::vec
<double,3> vec2
;
326 typedef boost::qvm::quat
<double> quat2
;
328 mat ma1
, mb1
; set_zero(ma1
); set_zero(mb1
);
329 vec va1
, vb1
; set_zero(va1
); set_zero(vb1
);
330 quat qa1
, qb1
; set_zero(qa1
); set_zero(qb1
);
331 mat2 ma2
, mb2
; set_zero(ma2
); set_zero(mb2
);
332 vec2 va2
, vb2
; set_zero(va2
); set_zero(vb2
);
333 quat2 qa2
, qb2
; set_zero(qa2
); set_zero(qb2
);
365 mb2
=convert_to
<mat2
>(ma1
/2);
366 vb2
=convert_to
<vec2
>(va1
/2);
367 qb2
=convert_to
<quat2
>(qa1
/2);
368 mb1
=scalar_cast
<float>(ma2
/2);
369 vb1
=scalar_cast
<float>(va2
/2);
370 qb1
=scalar_cast
<float>(qa2
/2);
375 mb2
=convert_to
<mat2
>(ma1
*2);
376 vb2
=convert_to
<vec2
>(va1
*2);
377 qb2
=convert_to
<quat2
>(qa1
*2);
378 mb1
=scalar_cast
<float>(ma2
*2);
379 vb1
=scalar_cast
<float>(va2
*2);
380 qb1
=scalar_cast
<float>(qa2
*2);
383 ma1
*=scalar_cast
<float>(ma2
);
388 va1
=scalar_cast
<float>(ma2
*va1
);
389 va1
=scalar_cast
<float>(ma1
*va2
);
390 va1
=scalar_cast
<float>(ma2
*va2
);
391 va1
=scalar_cast
<float>(qa2
*va1
);
392 va1
=scalar_cast
<float>(qa1
*va2
);
393 va1
=scalar_cast
<float>(qa2
*va2
);
395 va2
=convert_to
<vec2
>(ma1
*va1
);
396 va2
=convert_to
<vec2
>(qa1
*va1
);
405 va1
=scalar_cast
<float>(va1
*ma2
);
406 va1
=scalar_cast
<float>(va2
*ma1
);
407 va1
=scalar_cast
<float>(va2
*ma2
);
409 va2
=convert_to
<vec2
>(va1
*ma1
);