]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/qvm/test/mat_traits_array_test.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / qvm / test / mat_traits_array_test.cpp
CommitLineData
92f5a8d4
TL
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/mat_traits_array.hpp>
7#include <boost/qvm/mat_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 & v, P * ptr )
22 {
23 using namespace boost::qvm;
24 BOOST_QVM_STATIC_ASSERT(is_mat<T>::value);
25 BOOST_QVM_STATIC_ASSERT(mat_traits<T>::rows==3);
26 BOOST_QVM_STATIC_ASSERT(mat_traits<T>::cols==2);
27 BOOST_TEST((mat_traits<T>::template read_element<0,0>(v)==ptr[0*2+0]));
28 BOOST_TEST((mat_traits<T>::template read_element<0,1>(v)==ptr[0*2+1]));
29 BOOST_TEST((mat_traits<T>::template read_element<1,0>(v)==ptr[1*2+0]));
30 BOOST_TEST((mat_traits<T>::template read_element<1,1>(v)==ptr[1*2+1]));
31 BOOST_TEST((mat_traits<T>::template read_element<2,0>(v)==ptr[2*2+0]));
32 BOOST_TEST((mat_traits<T>::template read_element<2,1>(v)==ptr[2*2+1]));
33 BOOST_TEST((&mat_traits<T>::template write_element<0,0>(v)==&ptr[0*2+0]));
34 BOOST_TEST((&mat_traits<T>::template write_element<0,1>(v)==&ptr[0*2+1]));
35 BOOST_TEST((&mat_traits<T>::template write_element<1,0>(v)==&ptr[1*2+0]));
36 BOOST_TEST((&mat_traits<T>::template write_element<1,1>(v)==&ptr[1*2+1]));
37 BOOST_TEST((&mat_traits<T>::template write_element<2,0>(v)==&ptr[2*2+0]));
38 BOOST_TEST((&mat_traits<T>::template write_element<2,1>(v)==&ptr[2*2+1]));
39 BOOST_TEST(&v[0][0]==&ptr[0*2+0]);
40 BOOST_TEST(&v[0][1]==&ptr[0*2+1]);
41 BOOST_TEST(&v[1][0]==&ptr[1*2+0]);
42 BOOST_TEST(&v[1][1]==&ptr[1*2+1]);
43 BOOST_TEST(&v[2][0]==&ptr[2*2+0]);
44 BOOST_TEST(&v[2][1]==&ptr[2*2+1]);
45 }
46
47int
48main()
49 {
50 using namespace boost::qvm;
51 {
52 BOOST_QVM_STATIC_ASSERT(!is_mat<int[3]>::value);
53 BOOST_QVM_STATIC_ASSERT(!is_mat<int[3][3][3]>::value);
54 BOOST_QVM_STATIC_ASSERT(is_mat<int[3][4]>::value);
55 BOOST_QVM_STATIC_ASSERT(mat_traits<int[3][4]>::rows==3);
56 BOOST_QVM_STATIC_ASSERT(mat_traits<int[3][4]>::cols==4);
57 same_type<mat_traits<int[3][4]>::scalar_type,int>();
58 same_type< mat<int,3,3>, deduce_mat<int[3][3]>::type >();
59 same_type< mat<int,3,3>, deduce_mat<int const[3][3]>::type >();
60 int arr[3][3] = {{00,01,02},{10,11,12},{20,21,22}};
61 BOOST_TEST((mat_traits<int[3][3]>::read_element<0,0>(arr)==00));
62 BOOST_TEST((mat_traits<int[3][3]>::read_element<0,1>(arr)==01));
63 BOOST_TEST((mat_traits<int[3][3]>::read_element<0,2>(arr)==02));
64 BOOST_TEST((mat_traits<int[3][3]>::read_element<1,0>(arr)==10));
65 BOOST_TEST((mat_traits<int[3][3]>::read_element<1,1>(arr)==11));
66 BOOST_TEST((mat_traits<int[3][3]>::read_element<1,2>(arr)==12));
67 BOOST_TEST((mat_traits<int[3][3]>::read_element<2,0>(arr)==20));
68 BOOST_TEST((mat_traits<int[3][3]>::read_element<2,1>(arr)==21));
69 BOOST_TEST((mat_traits<int[3][3]>::read_element<2,2>(arr)==22));
70 BOOST_TEST((mat_traits<int const[3][3]>::read_element<0,0>(arr)==00));
71 BOOST_TEST((mat_traits<int const[3][3]>::read_element<0,1>(arr)==01));
72 BOOST_TEST((mat_traits<int const[3][3]>::read_element<0,2>(arr)==02));
73 BOOST_TEST((mat_traits<int const[3][3]>::read_element<1,0>(arr)==10));
74 BOOST_TEST((mat_traits<int const[3][3]>::read_element<1,1>(arr)==11));
75 BOOST_TEST((mat_traits<int const[3][3]>::read_element<1,2>(arr)==12));
76 BOOST_TEST((mat_traits<int const[3][3]>::read_element<2,0>(arr)==20));
77 BOOST_TEST((mat_traits<int const[3][3]>::read_element<2,1>(arr)==21));
78 BOOST_TEST((mat_traits<int const[3][3]>::read_element<2,2>(arr)==22));
79 BOOST_TEST((mat_traits<int[3][3]>::read_element_idx(0,0,arr)==00));
80 BOOST_TEST((mat_traits<int[3][3]>::read_element_idx(0,1,arr)==01));
81 BOOST_TEST((mat_traits<int[3][3]>::read_element_idx(0,2,arr)==02));
82 BOOST_TEST((mat_traits<int[3][3]>::read_element_idx(1,0,arr)==10));
83 BOOST_TEST((mat_traits<int[3][3]>::read_element_idx(1,1,arr)==11));
84 BOOST_TEST((mat_traits<int[3][3]>::read_element_idx(1,2,arr)==12));
85 BOOST_TEST((mat_traits<int[3][3]>::read_element_idx(2,0,arr)==20));
86 BOOST_TEST((mat_traits<int[3][3]>::read_element_idx(2,1,arr)==21));
87 BOOST_TEST((mat_traits<int[3][3]>::read_element_idx(2,2,arr)==22));
88 BOOST_TEST((mat_traits<int const[3][3]>::read_element_idx(0,0,arr)==00));
89 BOOST_TEST((mat_traits<int const[3][3]>::read_element_idx(0,1,arr)==01));
90 BOOST_TEST((mat_traits<int const[3][3]>::read_element_idx(0,2,arr)==02));
91 BOOST_TEST((mat_traits<int const[3][3]>::read_element_idx(1,0,arr)==10));
92 BOOST_TEST((mat_traits<int const[3][3]>::read_element_idx(1,1,arr)==11));
93 BOOST_TEST((mat_traits<int const[3][3]>::read_element_idx(1,2,arr)==12));
94 BOOST_TEST((mat_traits<int const[3][3]>::read_element_idx(2,0,arr)==20));
95 BOOST_TEST((mat_traits<int const[3][3]>::read_element_idx(2,1,arr)==21));
96 BOOST_TEST((mat_traits<int const[3][3]>::read_element_idx(2,2,arr)==22));
97 BOOST_TEST((&mat_traits<int[3][3]>::write_element<0,0>(arr)==&arr[0][0]));
98 BOOST_TEST((&mat_traits<int[3][3]>::write_element<0,1>(arr)==&arr[0][1]));
99 BOOST_TEST((&mat_traits<int[3][3]>::write_element<0,2>(arr)==&arr[0][2]));
100 BOOST_TEST((&mat_traits<int[3][3]>::write_element<1,0>(arr)==&arr[1][0]));
101 BOOST_TEST((&mat_traits<int[3][3]>::write_element<1,1>(arr)==&arr[1][1]));
102 BOOST_TEST((&mat_traits<int[3][3]>::write_element<1,2>(arr)==&arr[1][2]));
103 BOOST_TEST((&mat_traits<int[3][3]>::write_element<2,0>(arr)==&arr[2][0]));
104 BOOST_TEST((&mat_traits<int[3][3]>::write_element<2,1>(arr)==&arr[2][1]));
105 BOOST_TEST((&mat_traits<int[3][3]>::write_element<2,2>(arr)==&arr[2][2]));
106 BOOST_TEST((&mat_traits<int[3][3]>::write_element_idx(0,0,arr)==&arr[0][0]));
107 BOOST_TEST((&mat_traits<int[3][3]>::write_element_idx(0,1,arr)==&arr[0][1]));
108 BOOST_TEST((&mat_traits<int[3][3]>::write_element_idx(0,2,arr)==&arr[0][2]));
109 BOOST_TEST((&mat_traits<int[3][3]>::write_element_idx(1,0,arr)==&arr[1][0]));
110 BOOST_TEST((&mat_traits<int[3][3]>::write_element_idx(1,1,arr)==&arr[1][1]));
111 BOOST_TEST((&mat_traits<int[3][3]>::write_element_idx(1,2,arr)==&arr[1][2]));
112 BOOST_TEST((&mat_traits<int[3][3]>::write_element_idx(2,0,arr)==&arr[2][0]));
113 BOOST_TEST((&mat_traits<int[3][3]>::write_element_idx(2,1,arr)==&arr[2][1]));
114 BOOST_TEST((&mat_traits<int[3][3]>::write_element_idx(2,2,arr)==&arr[2][2]));
115 }
116 {
117 int arr[42] = {0};
118 int * ptr=arr+5;
119 ptr[0*2+0]=42;
120 ptr[0*2+1]=43;
121 ptr[1*2+0]=44;
122 ptr[1*2+1]=45;
123 ptr[2*2+0]=46;
124 ptr[2*2+1]=47;
125 test_ref_cast(ptr_mref<3,2>(ptr),ptr);
126 int m[3][2] = {{1,1},{1,1},{1,1}};
127 ptr_mref<3,2>(ptr) += mref(m);
128 BOOST_TEST(ptr[0*2+0]=43);
129 BOOST_TEST(ptr[0*2+1]=44);
130 BOOST_TEST(ptr[1*2+0]=45);
131 BOOST_TEST(ptr[1*2+1]=46);
132 BOOST_TEST(ptr[2*2+0]=47);
133 BOOST_TEST(ptr[2*2+1]=48);
134 }
135 return boost::report_errors();
136 }