]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/qvm/test/vec_traits_array_test.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / qvm / test / vec_traits_array_test.cpp
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/vec_traits_array.hpp>
7 #include <boost/qvm/vec_operations.hpp>
8 #include <boost/detail/lightweight_test.hpp>
9
10 template <class T,class U>
11 struct same_type;
12
13 template <class T>
14 struct
15 same_type<T,T>
16 {
17 };
18
19 template <class T,class P>
20 void
21 test_ref_cast( T & v, P * ptr )
22 {
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]);
35 }
36
37 int
38 main()
39 {
40 using namespace boost::qvm;
41 {
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 >();
49 int arr[3] = {0,1,2};
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]));
68 }
69 {
70 int arr[42] = {0};
71 int * ptr=arr+5;
72 ptr[0]=42;
73 ptr[1]=43;
74 ptr[2]=44;
75 test_ref_cast(ptr_vref<3>(ptr),ptr);
76 int v[3] = {1,1,1};
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);
81 }
82 return boost::report_errors();
83 }