dimension.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // Boost.Units - A C++ library for zero-overhead dimensional analysis and
  2. // unit/quantity manipulation and conversion
  3. //
  4. // Copyright (C) 2003-2008 Matthias Christian Schabel
  5. // Copyright (C) 2008 Steven Watanabe
  6. //
  7. // Distributed under the Boost Software License, Version 1.0. (See
  8. // accompanying file LICENSE_1_0.txt or copy at
  9. // http://www.boost.org/LICENSE_1_0.txt)
  10. /**
  11. \file
  12. \brief dimension.cpp
  13. \details
  14. Test dimension list manipulation.
  15. Output:
  16. @verbatim
  17. //[dimension_output
  18. length_dimension = list<dim<length_base_dimension, static_rational<1l, 1l> >, dimensionless_type>
  19. mass_dimension = list<dim<mass_base_dimension, static_rational<1l, 1l> >, dimensionless_type>
  20. time_dimension = list<dim<time_base_dimension, static_rational<1l, 1l> >, dimensionless_type>
  21. energy_dimension = list<dim<length_base_dimension, static_rational<2l, 1l> >, list<dim<mass_base_dimension, static_rational<1l, 1l> >, list<dim<time_base_dimension, static_rational<-2l, 1l> >, dimensionless_type> > >
  22. LM_type = list<dim<length_base_dimension, static_rational<1l, 1l> >, list<dim<mass_base_dimension, static_rational<1l, 1l> >, dimensionless_type> >
  23. L_T_type = list<dim<length_base_dimension, static_rational<1l, 1l> >, list<dim<time_base_dimension, static_rational<-1l, 1l> >, dimensionless_type> >
  24. V_type = list<dim<length_base_dimension, static_rational<1l, 1l> >, list<dim<time_base_dimension, static_rational<-1l, 1l> >, dimensionless_type> >
  25. //]
  26. @endverbatim
  27. **/
  28. #include <boost/type_traits/is_same.hpp>
  29. #include <boost/mpl/assert.hpp>
  30. #include <iostream>
  31. #include <boost/units/detail/utility.hpp>
  32. #include "test_system.hpp"
  33. namespace mpl = boost::mpl;
  34. int main(void)
  35. {
  36. using namespace boost::units;
  37. BOOST_MPL_ASSERT((boost::is_same<
  38. length_dimension,
  39. mpl::push_front<
  40. dimensionless_type,
  41. dim<length_base_dimension, static_rational<1L, 1L> >
  42. >::type
  43. >));
  44. BOOST_MPL_ASSERT((boost::is_same<
  45. mass_dimension,
  46. mpl::push_front<
  47. dimensionless_type,
  48. dim<mass_base_dimension, static_rational<1L, 1L> >
  49. >::type
  50. >));
  51. BOOST_MPL_ASSERT((boost::is_same<energy_dimension,
  52. mpl::push_front<
  53. mpl::push_front<
  54. mpl::push_front<
  55. dimensionless_type,
  56. dim<time_base_dimension, static_rational<-2L, 1L> > >::type,
  57. dim<mass_base_dimension, static_rational<1L, 1L> > >::type,
  58. dim<length_base_dimension, static_rational<2L, 1L> > >::type>));
  59. std::cout << "length_dimension = "
  60. << simplify_typename(length_dimension()) << std::endl
  61. << "mass_dimension = "
  62. << simplify_typename(mass_dimension()) << std::endl
  63. << "time_dimension = "
  64. << simplify_typename(time_dimension()) << std::endl
  65. << "energy_dimension = "
  66. << simplify_typename(energy_dimension()) << std::endl;
  67. //[dimension_snippet_1
  68. typedef mpl::times<length_dimension,mass_dimension>::type LM_type;
  69. typedef mpl::divides<length_dimension,time_dimension>::type L_T_type;
  70. typedef static_root<
  71. mpl::divides<energy_dimension,mass_dimension>::type,
  72. static_rational<2>
  73. >::type V_type;
  74. //]
  75. BOOST_MPL_ASSERT((boost::is_same<LM_type,
  76. mpl::push_front<
  77. mpl::push_front<
  78. dimensionless_type,
  79. dim<mass_base_dimension, static_rational<1L, 1L> > >::type,
  80. dim<length_base_dimension, static_rational<1L, 1L> > >::type>));
  81. BOOST_MPL_ASSERT((boost::is_same<L_T_type,
  82. mpl::push_front<
  83. mpl::push_front<
  84. dimensionless_type,
  85. dim<time_base_dimension, static_rational<-1L, 1L> > >::type,
  86. dim<length_base_dimension, static_rational<1L, 1L> > >::type>));
  87. BOOST_MPL_ASSERT((boost::is_same<V_type,
  88. mpl::push_front<
  89. mpl::push_front<
  90. dimensionless_type,
  91. dim<time_base_dimension, static_rational<-1L, 1L> > >::type,
  92. dim<length_base_dimension, static_rational<1L, 1L> > >::type>));
  93. std::cout << "LM_type = " << simplify_typename(LM_type()) << std::endl
  94. << "L_T_type = " << simplify_typename(L_T_type()) << std::endl
  95. << "V_type = " << simplify_typename(V_type()) << std::endl;
  96. return 0;
  97. }