]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/qvm/test/vec_traits_array_test.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / qvm / test / vec_traits_array_test.cpp
1 // Copyright 2008-2022 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 #ifdef BOOST_QVM_TEST_SINGLE_HEADER
7 # include BOOST_QVM_TEST_SINGLE_HEADER
8 #else
9 # include <boost/qvm/vec_operations.hpp>
10 #endif
11
12 #include <boost/qvm/vec_traits_array.hpp>
13 #include <boost/core/lightweight_test.hpp>
14
15 template <class T,class U>
16 struct same_type;
17
18 template <class T>
19 struct
20 same_type<T,T>
21 {
22 };
23
24 template <class T,class P>
25 void
26 test_ref_cast( T & v, P * ptr )
27 {
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]);
40 }
41
42 int
43 main()
44 {
45 using namespace boost::qvm;
46 {
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 >();
54 int arr[3] = {0,1,2};
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]));
73 }
74 {
75 int arr[42] = {0};
76 int * ptr=arr+5;
77 ptr[0]=42;
78 ptr[1]=43;
79 ptr[2]=44;
80 test_ref_cast(ptr_vref<3>(ptr),ptr);
81 int v[3] = {1,1,1};
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);
86 }
87 return boost::report_errors();
88 }