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