| 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 | #if __cplusplus <= 199711L |
| 7 | |
| 8 | #include <iostream> |
| 9 | |
| 10 | int main() |
| 11 | { |
| 12 | std::cout << "Test not applicable due to lack of C++11 support in the compiler" << std::endl; |
| 13 | return 0; |
| 14 | } |
| 15 | |
| 16 | #else |
| 17 | |
| 18 | |
| 19 | #ifdef BOOST_QVM_TEST_SINGLE_HEADER |
| 20 | # include BOOST_QVM_TEST_SINGLE_HEADER |
| 21 | #else |
| 22 | # include <boost/qvm/mat_operations.hpp> |
| 23 | #endif |
| 24 | |
| 25 | #include <boost/qvm/mat_traits_array.hpp> |
| 26 | #include <boost/core/lightweight_test.hpp> |
| 27 | |
| 28 | template <class T,class U> |
| 29 | struct same_type; |
| 30 | |
| 31 | template <class T> |
| 32 | struct |
| 33 | same_type<T,T> |
| 34 | { |
| 35 | }; |
| 36 | |
| 37 | int |
| 38 | main() |
| 39 | { |
| 40 | using namespace boost::qvm; |
| 41 | BOOST_QVM_STATIC_ASSERT((!is_mat<std::array<int,3>>::value)); |
| 42 | BOOST_QVM_STATIC_ASSERT((!is_mat<std::array<std::array<std::array<int,3>,3>,3>>::value)); |
| 43 | BOOST_QVM_STATIC_ASSERT((is_mat<std::array<std::array<int,3>,4>>::value)); |
| 44 | BOOST_QVM_STATIC_ASSERT((is_mat<std::array<std::array<int const,3>,4>>::value)); |
| 45 | BOOST_QVM_STATIC_ASSERT((is_mat<std::array<std::array<int,3>,4> const>::value)); |
| 46 | BOOST_QVM_STATIC_ASSERT((is_mat<std::array<std::array<int const,3>,4> const>::value)); |
| 47 | BOOST_QVM_STATIC_ASSERT((mat_traits<std::array<std::array<int,3>,4>>::rows==3)); |
| 48 | BOOST_QVM_STATIC_ASSERT((mat_traits<std::array<std::array<int,3>,4>>::cols==4)); |
| 49 | same_type<mat_traits<std::array<std::array<int,3>,4>>::scalar_type,int>(); |
| 50 | same_type< mat<int,3,3>, deduce_mat<std::array<std::array<int,3>,3>>::type >(); |
| 51 | same_type< mat<int const,3,3>, deduce_mat<std::array<std::array<int const,3>,3>>::type >(); |
| 52 | same_type< mat<int,3,3>, deduce_mat<std::array<std::array<int,3>,3> const>::type >(); |
| 53 | same_type< mat<int const,3,3>, deduce_mat<std::array<std::array<int const,3>,3> const>::type >(); |
| 54 | std::array<std::array<int,3>,3> arr1 = {std::array<int,3>{00,01,02},std::array<int,3>{10,11,12},std::array<int,3>{20,21,22}}; |
| 55 | std::array<std::array<int const,3>,3> arr2 = {std::array<int const,3>{00,01,02},std::array<int const,3>{10,11,12},std::array<int const,3>{20,21,22}}; |
| 56 | std::array<std::array<int,3>,3> const arr3 = {std::array<int,3>{00,01,02},std::array<int,3>{10,11,12},std::array<int,3>{20,21,22}}; |
| 57 | std::array<std::array<int const,3>,3> const arr4 = {std::array<int const,3>{00,01,02},std::array<int const,3>{10,11,12},std::array<int const,3>{20,21,22}}; |
| 58 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element<0,0>(arr1)==00)); |
| 59 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element<0,1>(arr1)==01)); |
| 60 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element<0,2>(arr1)==02)); |
| 61 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element<1,0>(arr1)==10)); |
| 62 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element<1,1>(arr1)==11)); |
| 63 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element<1,2>(arr1)==12)); |
| 64 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element<2,0>(arr1)==20)); |
| 65 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element<2,1>(arr1)==21)); |
| 66 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element<2,2>(arr1)==22)); |
| 67 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element<0,0>(arr2)==00)); |
| 68 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element<0,1>(arr2)==01)); |
| 69 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element<0,2>(arr2)==02)); |
| 70 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element<1,0>(arr2)==10)); |
| 71 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element<1,1>(arr2)==11)); |
| 72 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element<1,2>(arr2)==12)); |
| 73 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element<2,0>(arr2)==20)); |
| 74 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element<2,1>(arr2)==21)); |
| 75 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element<2,2>(arr2)==22)); |
| 76 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element<0,0>(arr3)==00)); |
| 77 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element<0,1>(arr3)==01)); |
| 78 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element<0,2>(arr3)==02)); |
| 79 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element<1,0>(arr3)==10)); |
| 80 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element<1,1>(arr3)==11)); |
| 81 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element<1,2>(arr3)==12)); |
| 82 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element<2,0>(arr3)==20)); |
| 83 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element<2,1>(arr3)==21)); |
| 84 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element<2,2>(arr3)==22)); |
| 85 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element<0,0>(arr4)==00)); |
| 86 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element<0,1>(arr4)==01)); |
| 87 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element<0,2>(arr4)==02)); |
| 88 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element<1,0>(arr4)==10)); |
| 89 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element<1,1>(arr4)==11)); |
| 90 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element<1,2>(arr4)==12)); |
| 91 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element<2,0>(arr4)==20)); |
| 92 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element<2,1>(arr4)==21)); |
| 93 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element<2,2>(arr4)==22)); |
| 94 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element_idx(0,0,arr1)==00)); |
| 95 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element_idx(0,1,arr1)==01)); |
| 96 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element_idx(0,2,arr1)==02)); |
| 97 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element_idx(1,0,arr1)==10)); |
| 98 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element_idx(1,1,arr1)==11)); |
| 99 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element_idx(1,2,arr1)==12)); |
| 100 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element_idx(2,0,arr1)==20)); |
| 101 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element_idx(2,1,arr1)==21)); |
| 102 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3>>::read_element_idx(2,2,arr1)==22)); |
| 103 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element_idx(0,0,arr2)==00)); |
| 104 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element_idx(0,1,arr2)==01)); |
| 105 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element_idx(0,2,arr2)==02)); |
| 106 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element_idx(1,0,arr2)==10)); |
| 107 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element_idx(1,1,arr2)==11)); |
| 108 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element_idx(1,2,arr2)==12)); |
| 109 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element_idx(2,0,arr2)==20)); |
| 110 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element_idx(2,1,arr2)==21)); |
| 111 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3>>::read_element_idx(2,2,arr2)==22)); |
| 112 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element_idx(0,0,arr3)==00)); |
| 113 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element_idx(0,1,arr3)==01)); |
| 114 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element_idx(0,2,arr3)==02)); |
| 115 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element_idx(1,0,arr3)==10)); |
| 116 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element_idx(1,1,arr3)==11)); |
| 117 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element_idx(1,2,arr3)==12)); |
| 118 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element_idx(2,0,arr3)==20)); |
| 119 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element_idx(2,1,arr3)==21)); |
| 120 | BOOST_TEST((mat_traits<std::array<std::array<int,3>,3> const>::read_element_idx(2,2,arr3)==22)); |
| 121 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element_idx(0,0,arr4)==00)); |
| 122 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element_idx(0,1,arr4)==01)); |
| 123 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element_idx(0,2,arr4)==02)); |
| 124 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element_idx(1,0,arr4)==10)); |
| 125 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element_idx(1,1,arr4)==11)); |
| 126 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element_idx(1,2,arr4)==12)); |
| 127 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element_idx(2,0,arr4)==20)); |
| 128 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element_idx(2,1,arr4)==21)); |
| 129 | BOOST_TEST((mat_traits<std::array<std::array<int const,3>,3> const>::read_element_idx(2,2,arr4)==22)); |
| 130 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element<0,0>(arr1)==&arr1[0][0])); |
| 131 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element<0,1>(arr1)==&arr1[0][1])); |
| 132 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element<0,2>(arr1)==&arr1[0][2])); |
| 133 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element<1,0>(arr1)==&arr1[1][0])); |
| 134 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element<1,1>(arr1)==&arr1[1][1])); |
| 135 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element<1,2>(arr1)==&arr1[1][2])); |
| 136 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element<2,0>(arr1)==&arr1[2][0])); |
| 137 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element<2,1>(arr1)==&arr1[2][1])); |
| 138 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element<2,2>(arr1)==&arr1[2][2])); |
| 139 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element_idx(0,0,arr1)==&arr1[0][0])); |
| 140 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element_idx(0,1,arr1)==&arr1[0][1])); |
| 141 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element_idx(0,2,arr1)==&arr1[0][2])); |
| 142 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element_idx(1,0,arr1)==&arr1[1][0])); |
| 143 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element_idx(1,1,arr1)==&arr1[1][1])); |
| 144 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element_idx(1,2,arr1)==&arr1[1][2])); |
| 145 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element_idx(2,0,arr1)==&arr1[2][0])); |
| 146 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element_idx(2,1,arr1)==&arr1[2][1])); |
| 147 | BOOST_TEST((&mat_traits<std::array<std::array<int,3>,3>>::write_element_idx(2,2,arr1)==&arr1[2][2])); |
| 148 | return boost::report_errors(); |
| 149 | } |
| 150 | |
| 151 | #endif |
| 152 | |