]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/qvm/test/deduce_mat_test.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / qvm / test / deduce_mat_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/deduce_mat.hpp>
10 #endif
11
12 template <class T,class U>
13 struct same_type;
14
15 template <class T>
16 struct
17 same_type<T,T>
18 {
19 };
20
21 template <class A,class B,int R,int C,class Result>
22 struct
23 check
24 {
25 same_type<typename boost::qvm::deduce_mat2<A,B,R,C>::type,Result> a;
26 same_type<typename boost::qvm::deduce_mat2<B,A,R,C>::type,Result> b;
27 };
28
29 template <class T,int R,int C> struct m1;
30 template <class T,int R,int C> struct m2;
31
32 namespace
33 boost
34 {
35 namespace
36 qvm
37 {
38 template <class T,int R,int C>
39 struct
40 mat_traits< m1<T,R,C> >
41 {
42 typedef T scalar_type;
43 static int const rows=R;
44 static int const cols=C;
45 };
46
47 template <class T,int R,int C>
48 struct
49 mat_traits< m2<T,R,C> >
50 {
51 typedef T scalar_type;
52 static int const rows=R;
53 static int const cols=C;
54 };
55
56 template <int R,int C,class S,int M2R,int M2C,class M2S>
57 struct
58 deduce_mat<m2<M2S,M2R,M2C>,R,C,S>
59 {
60 typedef m2<S,R,C> type;
61 };
62
63 template <int R,int C,class S,class AS,int AR,int AC,class BS,int BR,int BC>
64 struct
65 deduce_mat2<m2<AS,AR,AC>,m2<BS,BR,BC>,R,C,S>
66 {
67 typedef m2<S,R,C> type;
68 };
69 }
70 }
71
72 int
73 main()
74 {
75 same_type< boost::qvm::deduce_mat< m1<int,4,2> >::type, m1<int,4,2> >();
76 same_type< boost::qvm::deduce_mat< m1<int,4,2>, 4, 4 >::type, boost::qvm::mat<int,4,4> >();
77 check< m1<int,4,2>, m1<int,4,2>, 4, 2, m1<int,4,2> >();
78 check< m1<int,4,2>, m1<float,4,2>, 4, 4, boost::qvm::mat<float,4,4> >();
79
80 same_type< boost::qvm::deduce_mat< m2<int,4,2> >::type, m2<int,4,2> >();
81 same_type< boost::qvm::deduce_mat< m2<int,4,2>, 4, 4 >::type, m2<int,4,4> >();
82 check< m2<int,4,2>, m2<int,4,2>, 4, 2, m2<int,4,2> >();
83 check< m2<int,4,2>, m2<float,4,2>, 4, 4, m2<float,4,4> >();
84 }