size.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. // Copyright (c) 2011 David Bellot
  2. //
  3. // Distributed under the Boost Software License, Version 1.0. (See
  4. // accompanying file LICENSE_1_0.txt or copy at
  5. // http://www.boost.org/LICENSE_1_0.txt)
  6. #include <boost/numeric/ublas/fwd.hpp>
  7. #include <boost/numeric/ublas/matrix.hpp>
  8. #include <boost/numeric/ublas/matrix_expression.hpp>
  9. #include <boost/numeric/ublas/operation/size.hpp>
  10. #include <boost/numeric/ublas/tags.hpp>
  11. #include <boost/numeric/ublas/vector.hpp>
  12. #include <boost/numeric/ublas/vector_expression.hpp>
  13. #include <iostream>
  14. #include "utils.hpp"
  15. BOOST_UBLAS_TEST_DEF( test_vector_container )
  16. {
  17. BOOST_UBLAS_DEBUG_TRACE( "TEST Vector Container" );
  18. typedef double value_type;
  19. typedef boost::numeric::ublas::vector<value_type> vector_type;
  20. vector_type v(5);
  21. v(0) = 0.555950;
  22. v(1) = 0.108929;
  23. v(2) = 0.948014;
  24. v(3) = 0.023787;
  25. v(4) = 1.023787;
  26. // size(v)
  27. BOOST_UBLAS_DEBUG_TRACE( "size(v) = " << boost::numeric::ublas::size(v) << " ==> " << v.size() );
  28. BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::size(v) == v.size() );
  29. // size<1>(v)
  30. BOOST_UBLAS_DEBUG_TRACE( "size<1>(v) = " << (boost::numeric::ublas::size<1>(v)) << " ==> " << v.size() );
  31. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(v) == v.size()) );
  32. // [NOT_COMPILE]: this should *correctly* cause a compilation error
  33. // size<2>(v)
  34. //BOOST_UBLAS_DEBUG_TRACE( "size<2>(v) = " << (boost::numeric::ublas::size<vector_type,2>(v)) << " ==> " << v.size() );
  35. //BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<2>(v) == v.size()) );
  36. // [/NOT_COMPILE]
  37. }
  38. BOOST_UBLAS_TEST_DEF( test_vector_expression )
  39. {
  40. BOOST_UBLAS_DEBUG_TRACE( "TEST Vector Expression" );
  41. typedef double value_type;
  42. typedef boost::numeric::ublas::vector<value_type> vector_type;
  43. vector_type v(5);
  44. v(0) = 0.555950;
  45. v(1) = 0.108929;
  46. v(2) = 0.948014;
  47. v(3) = 0.023787;
  48. v(4) = 1.023787;
  49. // size(-v)
  50. BOOST_UBLAS_DEBUG_TRACE( "size(-v) = " << boost::numeric::ublas::size(-v) << " ==> " << (-v).size() );
  51. BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::size(-v) == (-v).size() );
  52. // size<1>(-v)
  53. BOOST_UBLAS_DEBUG_TRACE( "size<1>(-v) = " << (boost::numeric::ublas::size<1>(-v)) << " ==> " << (-v).size() );
  54. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(-v) == (-v).size()) );
  55. }
  56. BOOST_UBLAS_TEST_DEF( test_vector_reference )
  57. {
  58. BOOST_UBLAS_DEBUG_TRACE( "TEST Vector Reference" );
  59. typedef double value_type;
  60. typedef boost::numeric::ublas::vector<value_type> vector_type;
  61. typedef boost::numeric::ublas::vector_reference<vector_type> vector_reference_type;
  62. vector_type v(5);
  63. v(0) = 0.555950;
  64. v(1) = 0.108929;
  65. v(2) = 0.948014;
  66. v(3) = 0.023787;
  67. v(4) = 1.023787;
  68. // size(reference(v)
  69. BOOST_UBLAS_DEBUG_TRACE( "size(reference(v)) = " << boost::numeric::ublas::size(vector_reference_type(v)) << " ==> " << vector_reference_type(v).size() );
  70. BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::size(vector_reference_type(v)) == vector_reference_type(v).size() );
  71. // size<1>(reference(v))
  72. BOOST_UBLAS_DEBUG_TRACE( "size<1>(reference(v)) = " << (boost::numeric::ublas::size<1>(vector_reference_type(v))) << " ==> " << vector_reference_type(v).size() );
  73. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(vector_reference_type(v)) == vector_reference_type(v).size()) );
  74. }
  75. BOOST_UBLAS_TEST_DEF( test_row_major_matrix_container )
  76. {
  77. BOOST_UBLAS_DEBUG_TRACE( "TEST Row-major Matrix Container" );
  78. typedef double value_type;
  79. typedef boost::numeric::ublas::matrix<value_type, boost::numeric::ublas::row_major> matrix_type;
  80. matrix_type A(5,4);
  81. A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
  82. A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
  83. A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
  84. A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
  85. A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
  86. // [NOT_COMPILE]
  87. // size(A)
  88. //BOOST_UBLAS_DEBUG_TRACE( "size(A) = " << boost::numeric::ublas::size(A) << " ==> " << A.size1() );
  89. //BOOST_UBLAS_TEST_CHECK( boost::numeric::ublas::size(A) == A.size1() );
  90. // [/NOT_COMPILE]
  91. // size<1>(A)
  92. BOOST_UBLAS_DEBUG_TRACE( "size<1>(A) = " << (boost::numeric::ublas::size<1>(A)) << " ==> " << A.size1() );
  93. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(A) == A.size1()) );
  94. // size<2>(A)
  95. BOOST_UBLAS_DEBUG_TRACE( "size<2>(A) = " << (boost::numeric::ublas::size<2>(A)) << " ==> " << A.size2() );
  96. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<2>(A) == A.size2()) );
  97. // size<major>(A)
  98. BOOST_UBLAS_DEBUG_TRACE( "size<major>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(A)) << " ==> " << A.size1() );
  99. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(A) == A.size1()) );
  100. // size<minor>(A)
  101. BOOST_UBLAS_DEBUG_TRACE( "size<minor>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(A)) << " ==> " << A.size2() );
  102. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(A) == A.size2()) );
  103. // size<leading>(A)
  104. BOOST_UBLAS_DEBUG_TRACE( "size<leading>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(A)) << " ==> " << A.size2() );
  105. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(A) == A.size2()) );
  106. }
  107. BOOST_UBLAS_TEST_DEF( test_col_major_matrix_container )
  108. {
  109. BOOST_UBLAS_DEBUG_TRACE( "TEST Column-major Matrix Container" );
  110. typedef double value_type;
  111. typedef boost::numeric::ublas::matrix<value_type, boost::numeric::ublas::column_major> matrix_type;
  112. matrix_type A(5,4);
  113. A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
  114. A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
  115. A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
  116. A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
  117. A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
  118. // size<1>(A)
  119. BOOST_UBLAS_DEBUG_TRACE( "size<1>(A) = " << (boost::numeric::ublas::size<1>(A)) << " ==> " << A.size1() );
  120. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(A) == A.size1()) );
  121. // size<2>(A)
  122. BOOST_UBLAS_DEBUG_TRACE( "size<2>(A) = " << (boost::numeric::ublas::size<2>(A)) << " ==> " << A.size2() );
  123. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<2>(A) == A.size2()) );
  124. // size<major>(A)
  125. BOOST_UBLAS_DEBUG_TRACE( "size<major>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(A)) << " ==> " << A.size2() );
  126. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(A) == A.size2()) );
  127. // size<minor>(A)
  128. BOOST_UBLAS_DEBUG_TRACE( "size<minor>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(A)) << " ==> " << A.size1() );
  129. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(A) == A.size1()) );
  130. // size<leading>(A)
  131. BOOST_UBLAS_DEBUG_TRACE( "size<leading>(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(A)) << " ==> " << A.size1() );
  132. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(A) == A.size1()) );
  133. }
  134. BOOST_UBLAS_TEST_DEF( test_matrix_expression )
  135. {
  136. BOOST_UBLAS_DEBUG_TRACE( "TEST Matrix Expression" );
  137. typedef double value_type;
  138. typedef boost::numeric::ublas::matrix<value_type> matrix_type;
  139. matrix_type A(5,4);
  140. A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
  141. A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
  142. A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
  143. A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
  144. A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
  145. // size<1>(A')
  146. BOOST_UBLAS_DEBUG_TRACE( "size<1>(A') = " << (boost::numeric::ublas::size<1>(boost::numeric::ublas::trans(A))) << " ==> " << A.size2() );
  147. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(boost::numeric::ublas::trans(A)) == A.size2()) );
  148. // size<2>(A')
  149. BOOST_UBLAS_DEBUG_TRACE( "size<2>(A') = " << (boost::numeric::ublas::size<2>(boost::numeric::ublas::trans(A))) << " ==> " << A.size1() );
  150. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<2>(boost::numeric::ublas::trans(A)) == A.size1()) );
  151. // size<major>(A') [A is row-major => A' column-major, and viceversa]
  152. BOOST_UBLAS_DEBUG_TRACE( "size<major>(A') = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(boost::numeric::ublas::trans(A))) << " ==> " << A.size1() );
  153. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(boost::numeric::ublas::trans(A)) == A.size1()) );
  154. // size<minor>(A') [A is row-major => A' column-major, and viceversa]
  155. BOOST_UBLAS_DEBUG_TRACE( "size<minor>(A') = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(boost::numeric::ublas::trans(A))) << " ==> " << A.size2() );
  156. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(boost::numeric::ublas::trans(A)) == A.size2()) );
  157. // size<leading>(A') [A row-major => A' column-major, and viceversa]
  158. BOOST_UBLAS_DEBUG_TRACE( "size<leading>(A') = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(boost::numeric::ublas::trans(A))) << " ==> " << A.size2() );
  159. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(boost::numeric::ublas::trans(A)) == A.size2()) );
  160. }
  161. BOOST_UBLAS_TEST_DEF( test_matrix_reference )
  162. {
  163. BOOST_UBLAS_DEBUG_TRACE( "TEST Matrix Reference" );
  164. typedef double value_type;
  165. typedef boost::numeric::ublas::matrix<value_type> matrix_type;
  166. typedef boost::numeric::ublas::matrix_reference<matrix_type> matrix_reference_type;
  167. matrix_type A(5,4);
  168. A(0,0) = 0.555950; A(0,1) = 0.274690; A(0,2) = 0.540605; A(0,3) = 0.798938;
  169. A(1,0) = 0.108929; A(1,1) = 0.830123; A(1,2) = 0.891726; A(1,3) = 0.895283;
  170. A(2,0) = 0.948014; A(2,1) = 0.973234; A(2,2) = 0.216504; A(2,3) = 0.883152;
  171. A(3,0) = 0.023787; A(3,1) = 0.675382; A(3,2) = 0.231751; A(3,3) = 0.450332;
  172. A(4,0) = 1.023787; A(4,1) = 1.675382; A(4,2) = 1.231751; A(4,3) = 1.450332;
  173. // size<1>(reference(A))
  174. BOOST_UBLAS_DEBUG_TRACE( "size<1>(reference(A)) = " << (boost::numeric::ublas::size<1>(matrix_reference_type(A))) << " ==> " << matrix_reference_type(A).size1() );
  175. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<1>(matrix_reference_type(A)) == matrix_reference_type(A).size1()) );
  176. // size<2>(reference(A))
  177. BOOST_UBLAS_DEBUG_TRACE( "size<2>(reference(A)) = " << (boost::numeric::ublas::size<2>(matrix_reference_type(A))) << " ==> " << matrix_reference_type(A).size2() );
  178. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<2>(matrix_reference_type(A)) == matrix_reference_type(A).size2()) );
  179. // size<major>(reference(A))
  180. BOOST_UBLAS_DEBUG_TRACE( "size<major>(reference(A) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(matrix_reference_type(A))) << " ==> " << matrix_reference_type(A).size1() );
  181. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::major>(matrix_reference_type(A)) == matrix_reference_type(A).size1()) );
  182. // size<minor>(reference(A))
  183. BOOST_UBLAS_DEBUG_TRACE( "size<minor>(reference(A)) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(matrix_reference_type(A))) << " ==> " << matrix_reference_type(A).size2() );
  184. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::minor>(matrix_reference_type(A)) == matrix_reference_type(A).size2()) );
  185. // size<leading>(reference(A))
  186. BOOST_UBLAS_DEBUG_TRACE( "size<leading>(reference(A)) = " << (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(matrix_reference_type(A))) << " ==> " << matrix_reference_type(A).size2() );
  187. BOOST_UBLAS_TEST_CHECK( (boost::numeric::ublas::size<boost::numeric::ublas::tag::leading>(matrix_reference_type(A)) == matrix_reference_type(A).size2()) );
  188. }
  189. int main()
  190. {
  191. BOOST_UBLAS_TEST_BEGIN();
  192. BOOST_UBLAS_TEST_DO( test_vector_container );
  193. BOOST_UBLAS_TEST_DO( test_vector_expression );
  194. BOOST_UBLAS_TEST_DO( test_vector_reference );
  195. BOOST_UBLAS_TEST_DO( test_row_major_matrix_container );
  196. BOOST_UBLAS_TEST_DO( test_col_major_matrix_container );
  197. BOOST_UBLAS_TEST_DO( test_matrix_expression );
  198. BOOST_UBLAS_TEST_DO( test_matrix_reference );
  199. BOOST_UBLAS_TEST_END();
  200. }