]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/qvm/test/vec_traits_array_test.cpp
1 //Copyright (c) 2008-2016 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 #include <boost/qvm/vec_traits_array.hpp>
7 #include <boost/qvm/vec_operations.hpp>
8 #include <boost/detail/lightweight_test.hpp>
10 template <class T
,class U
>
19 template <class T
,class P
>
21 test_ref_cast( T
& v
, P
* ptr
)
23 using namespace boost::qvm
;
24 BOOST_QVM_STATIC_ASSERT(is_vec
<T
>::value
);
25 BOOST_QVM_STATIC_ASSERT(vec_traits
<T
>::dim
==3);
26 BOOST_TEST(vec_traits
<T
>::template read_element
<0>(v
)==ptr
[0]);
27 BOOST_TEST(vec_traits
<T
>::template read_element
<1>(v
)==ptr
[1]);
28 BOOST_TEST(vec_traits
<T
>::template read_element
<2>(v
)==ptr
[2]);
29 BOOST_TEST(&vec_traits
<T
>::template write_element
<0>(v
)==&ptr
[0]);
30 BOOST_TEST(&vec_traits
<T
>::template write_element
<1>(v
)==&ptr
[1]);
31 BOOST_TEST(&vec_traits
<T
>::template write_element
<2>(v
)==&ptr
[2]);
32 BOOST_TEST(&v
[0]==&ptr
[0]);
33 BOOST_TEST(&v
[1]==&ptr
[1]);
34 BOOST_TEST(&v
[2]==&ptr
[2]);
40 using namespace boost::qvm
;
42 BOOST_QVM_STATIC_ASSERT(is_vec
<int[3]>::value
);
43 BOOST_QVM_STATIC_ASSERT(!is_vec
<int[3][3]>::value
);
44 BOOST_QVM_STATIC_ASSERT(!is_vec
<int[3][3][3]>::value
);
45 BOOST_QVM_STATIC_ASSERT((vec_traits
<int[3]>::dim
==3));
46 same_type
<vec_traits
<int[3]>::scalar_type
,int>();
47 same_type
< vec
<int,3>, deduce_vec
<int[3]>::type
>();
48 same_type
< vec
<int,3>, deduce_vec
<int const[3]>::type
>();
50 BOOST_TEST((vec_traits
<int[3]>::read_element
<0>(arr
)==0));
51 BOOST_TEST((vec_traits
<int[3]>::read_element
<1>(arr
)==1));
52 BOOST_TEST((vec_traits
<int[3]>::read_element
<2>(arr
)==2));
53 BOOST_TEST((vec_traits
<int const[3]>::read_element
<0>(arr
)==0));
54 BOOST_TEST((vec_traits
<int const[3]>::read_element
<1>(arr
)==1));
55 BOOST_TEST((vec_traits
<int const[3]>::read_element
<2>(arr
)==2));
56 BOOST_TEST((vec_traits
<int[3]>::read_element_idx(0,arr
)==0));
57 BOOST_TEST((vec_traits
<int[3]>::read_element_idx(1,arr
)==1));
58 BOOST_TEST((vec_traits
<int[3]>::read_element_idx(2,arr
)==2));
59 BOOST_TEST((vec_traits
<int const[3]>::read_element_idx(0,arr
)==0));
60 BOOST_TEST((vec_traits
<int const[3]>::read_element_idx(1,arr
)==1));
61 BOOST_TEST((vec_traits
<int const[3]>::read_element_idx(2,arr
)==2));
62 BOOST_TEST((&vec_traits
<int[3]>::write_element
<0>(arr
)==&arr
[0]));
63 BOOST_TEST((&vec_traits
<int[3]>::write_element
<1>(arr
)==&arr
[1]));
64 BOOST_TEST((&vec_traits
<int[3]>::write_element
<2>(arr
)==&arr
[2]));
65 BOOST_TEST((&vec_traits
<int[3]>::write_element_idx(0,arr
)==&arr
[0]));
66 BOOST_TEST((&vec_traits
<int[3]>::write_element_idx(1,arr
)==&arr
[1]));
67 BOOST_TEST((&vec_traits
<int[3]>::write_element_idx(2,arr
)==&arr
[2]));
75 test_ref_cast(ptr_vref
<3>(ptr
),ptr
);
77 ptr_vref
<3>(ptr
) += vref(v
);
78 BOOST_TEST(ptr
[0]==43);
79 BOOST_TEST(ptr
[1]==44);
80 BOOST_TEST(ptr
[2]==45);
82 return boost::report_errors();