]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/qvm/test/quat_traits_array_test.cpp
update sources to v12.2.4
[ceph.git] / ceph / src / boost / libs / qvm / test / quat_traits_array_test.cpp
CommitLineData
3a9019d9
FG
1//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.\r
2\r
3//Distributed under the Boost Software License, Version 1.0. (See accompanying\r
4//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\r
5\r
6#include <boost/qvm/quat_traits_array.hpp>\r
7#include <boost/qvm/quat_operations.hpp>\r
8#include <boost/detail/lightweight_test.hpp>\r
9\r
10template <class T,class U>\r
11struct same_type;\r
12\r
13template <class T>\r
14struct\r
15same_type<T,T>\r
16 {\r
17 };\r
18\r
19template <class T,class P>\r
20void\r
21test_ref_cast( T & q, P * ptr )\r
22 {\r
23 using namespace boost::qvm;\r
24 BOOST_QVM_STATIC_ASSERT(is_quat<T>::value);\r
25 BOOST_TEST(quat_traits<T>::template read_element<0>(q)==ptr[0]);\r
26 BOOST_TEST(quat_traits<T>::template read_element<1>(q)==ptr[1]);\r
27 BOOST_TEST(quat_traits<T>::template read_element<2>(q)==ptr[2]);\r
28 BOOST_TEST(quat_traits<T>::template read_element<3>(q)==ptr[3]);\r
29 BOOST_TEST(&quat_traits<T>::template write_element<0>(q)==&ptr[0]);\r
30 BOOST_TEST(&quat_traits<T>::template write_element<1>(q)==&ptr[1]);\r
31 BOOST_TEST(&quat_traits<T>::template write_element<2>(q)==&ptr[2]);\r
32 BOOST_TEST(&quat_traits<T>::template write_element<3>(q)==&ptr[3]);\r
33 BOOST_TEST(&q[0]==&ptr[0]);\r
34 BOOST_TEST(&q[1]==&ptr[1]);\r
35 BOOST_TEST(&q[2]==&ptr[2]);\r
36 BOOST_TEST(&q[3]==&ptr[3]);\r
37 }\r
38\r
39int\r
40main()\r
41 {\r
42 using namespace boost::qvm;\r
43 {\r
44 BOOST_QVM_STATIC_ASSERT(is_quat<int[4]>::value);\r
45 BOOST_QVM_STATIC_ASSERT(!is_quat<int[4][4]>::value);\r
46 BOOST_QVM_STATIC_ASSERT(!is_quat<int[4][4][4]>::value);\r
47 same_type<quat_traits<int[4]>::scalar_type,int>();\r
48 same_type< quat<int>, deduce_quat<int[4]>::type >();\r
49 same_type< quat<int>, deduce_quat<int const[4]>::type >();\r
50 int arr[4] = {0,1,2,3};\r
51 BOOST_TEST((quat_traits<int[4]>::read_element<0>(arr)==0));\r
52 BOOST_TEST((quat_traits<int[4]>::read_element<1>(arr)==1));\r
53 BOOST_TEST((quat_traits<int[4]>::read_element<2>(arr)==2));\r
54 BOOST_TEST((quat_traits<int[4]>::read_element<3>(arr)==3));\r
55 BOOST_TEST((quat_traits<int const[4]>::read_element<0>(arr)==0));\r
56 BOOST_TEST((quat_traits<int const[4]>::read_element<1>(arr)==1));\r
57 BOOST_TEST((quat_traits<int const[4]>::read_element<2>(arr)==2));\r
58 BOOST_TEST((quat_traits<int const[4]>::read_element<3>(arr)==3));\r
59 BOOST_TEST((quat_traits<int[4]>::read_element_idx(0,arr)==0));\r
60 BOOST_TEST((quat_traits<int[4]>::read_element_idx(1,arr)==1));\r
61 BOOST_TEST((quat_traits<int[4]>::read_element_idx(2,arr)==2));\r
62 BOOST_TEST((quat_traits<int[4]>::read_element_idx(3,arr)==3));\r
63 BOOST_TEST((quat_traits<int const[4]>::read_element_idx(0,arr)==0));\r
64 BOOST_TEST((quat_traits<int const[4]>::read_element_idx(1,arr)==1));\r
65 BOOST_TEST((quat_traits<int const[4]>::read_element_idx(2,arr)==2));\r
66 BOOST_TEST((quat_traits<int const[4]>::read_element_idx(3,arr)==3));\r
67 BOOST_TEST((&quat_traits<int[4]>::write_element<0>(arr)==&arr[0]));\r
68 BOOST_TEST((&quat_traits<int[4]>::write_element<1>(arr)==&arr[1]));\r
69 BOOST_TEST((&quat_traits<int[4]>::write_element<2>(arr)==&arr[2]));\r
70 BOOST_TEST((&quat_traits<int[4]>::write_element<3>(arr)==&arr[3]));\r
71 BOOST_TEST((&quat_traits<int[4]>::write_element_idx(0,arr)==&arr[0]));\r
72 BOOST_TEST((&quat_traits<int[4]>::write_element_idx(1,arr)==&arr[1]));\r
73 BOOST_TEST((&quat_traits<int[4]>::write_element_idx(2,arr)==&arr[2]));\r
74 BOOST_TEST((&quat_traits<int[4]>::write_element_idx(3,arr)==&arr[3]));\r
75 }\r
76 {\r
77 int arr[42] = {0};\r
78 int * ptr=arr+5;\r
79 ptr[0]=42;\r
80 ptr[1]=43;\r
81 ptr[2]=44;\r
82 ptr[3]=45;\r
83 test_ref_cast(ptr_qref(ptr),ptr);\r
84 int q[4] = {1,1,1,1};\r
85 ptr_qref(ptr) += qref(q);\r
86 BOOST_TEST(ptr[0]==43);\r
87 BOOST_TEST(ptr[1]==44);\r
88 BOOST_TEST(ptr[2]==45);\r
89 BOOST_TEST(ptr[3]==46);\r
90 }\r
91 return boost::report_errors();\r
92 }\r