]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/qvm/test/vec_traits_array_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/vec_operations.hpp>
12 #include <boost/qvm/vec_traits_array.hpp>
13 #include <boost/core/lightweight_test.hpp>
15 template <class T
,class U
>
24 template <class T
,class P
>
26 test_ref_cast( T
& v
, P
* ptr
)
28 using namespace boost::qvm
;
29 BOOST_QVM_STATIC_ASSERT(is_vec
<T
>::value
);
30 BOOST_QVM_STATIC_ASSERT(vec_traits
<T
>::dim
==3);
31 BOOST_TEST(vec_traits
<T
>::template read_element
<0>(v
)==ptr
[0]);
32 BOOST_TEST(vec_traits
<T
>::template read_element
<1>(v
)==ptr
[1]);
33 BOOST_TEST(vec_traits
<T
>::template read_element
<2>(v
)==ptr
[2]);
34 BOOST_TEST(&vec_traits
<T
>::template write_element
<0>(v
)==&ptr
[0]);
35 BOOST_TEST(&vec_traits
<T
>::template write_element
<1>(v
)==&ptr
[1]);
36 BOOST_TEST(&vec_traits
<T
>::template write_element
<2>(v
)==&ptr
[2]);
37 BOOST_TEST(&v
[0]==&ptr
[0]);
38 BOOST_TEST(&v
[1]==&ptr
[1]);
39 BOOST_TEST(&v
[2]==&ptr
[2]);
45 using namespace boost::qvm
;
47 BOOST_QVM_STATIC_ASSERT(is_vec
<int[3]>::value
);
48 BOOST_QVM_STATIC_ASSERT(!is_vec
<int[3][3]>::value
);
49 BOOST_QVM_STATIC_ASSERT(!is_vec
<int[3][3][3]>::value
);
50 BOOST_QVM_STATIC_ASSERT((vec_traits
<int[3]>::dim
==3));
51 same_type
<vec_traits
<int[3]>::scalar_type
,int>();
52 same_type
< vec
<int,3>, deduce_vec
<int[3]>::type
>();
53 same_type
< vec
<int,3>, deduce_vec
<int const[3]>::type
>();
55 BOOST_TEST((vec_traits
<int[3]>::read_element
<0>(arr
)==0));
56 BOOST_TEST((vec_traits
<int[3]>::read_element
<1>(arr
)==1));
57 BOOST_TEST((vec_traits
<int[3]>::read_element
<2>(arr
)==2));
58 BOOST_TEST((vec_traits
<int const[3]>::read_element
<0>(arr
)==0));
59 BOOST_TEST((vec_traits
<int const[3]>::read_element
<1>(arr
)==1));
60 BOOST_TEST((vec_traits
<int const[3]>::read_element
<2>(arr
)==2));
61 BOOST_TEST((vec_traits
<int[3]>::read_element_idx(0,arr
)==0));
62 BOOST_TEST((vec_traits
<int[3]>::read_element_idx(1,arr
)==1));
63 BOOST_TEST((vec_traits
<int[3]>::read_element_idx(2,arr
)==2));
64 BOOST_TEST((vec_traits
<int const[3]>::read_element_idx(0,arr
)==0));
65 BOOST_TEST((vec_traits
<int const[3]>::read_element_idx(1,arr
)==1));
66 BOOST_TEST((vec_traits
<int const[3]>::read_element_idx(2,arr
)==2));
67 BOOST_TEST((&vec_traits
<int[3]>::write_element
<0>(arr
)==&arr
[0]));
68 BOOST_TEST((&vec_traits
<int[3]>::write_element
<1>(arr
)==&arr
[1]));
69 BOOST_TEST((&vec_traits
<int[3]>::write_element
<2>(arr
)==&arr
[2]));
70 BOOST_TEST((&vec_traits
<int[3]>::write_element_idx(0,arr
)==&arr
[0]));
71 BOOST_TEST((&vec_traits
<int[3]>::write_element_idx(1,arr
)==&arr
[1]));
72 BOOST_TEST((&vec_traits
<int[3]>::write_element_idx(2,arr
)==&arr
[2]));
80 test_ref_cast(ptr_vref
<3>(ptr
),ptr
);
82 ptr_vref
<3>(ptr
) += vref(v
);
83 BOOST_TEST(ptr
[0]==43);
84 BOOST_TEST(ptr
[1]==44);
85 BOOST_TEST(ptr
[2]==45);
87 return boost::report_errors();