test_predicates.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 test_predicates.cpp
  13. \details
  14. Test metafunctions is_unit, is_quantity, is_dimension_list ....
  15. Output:
  16. @verbatim
  17. @endverbatim
  18. **/
  19. #include <boost/mpl/assert.hpp>
  20. #include <boost/mpl/list/list0.hpp>
  21. #include <boost/units/base_dimension.hpp>
  22. #include <boost/units/base_unit.hpp>
  23. #include <boost/units/dimension.hpp>
  24. #include <boost/units/is_dimension_list.hpp>
  25. #include <boost/units/is_quantity.hpp>
  26. #include <boost/units/is_quantity_of_dimension.hpp>
  27. #include <boost/units/is_quantity_of_system.hpp>
  28. #include <boost/units/is_unit.hpp>
  29. #include <boost/units/is_unit_of_dimension.hpp>
  30. #include <boost/units/is_unit_of_system.hpp>
  31. #include <boost/units/make_system.hpp>
  32. #include <boost/units/quantity.hpp>
  33. #include <boost/units/unit.hpp>
  34. namespace bu = boost::units;
  35. struct dimension_tag : boost::units::base_dimension<dimension_tag,0> { };
  36. typedef dimension_tag::dimension_type dimension;
  37. struct base_unit1 : bu::base_unit<base_unit1, dimension, 100> {};
  38. struct base_unit2 : bu::base_unit<base_unit2, dimension, 101> {};
  39. typedef bu::make_system<base_unit1>::type system1;
  40. typedef bu::make_system<base_unit2>::type system2;
  41. int main(int,char *[])
  42. {
  43. BOOST_MPL_ASSERT((bu::is_dimension_list<bu::dimensionless_type>));
  44. BOOST_MPL_ASSERT((bu::is_dimension_list<dimension>));
  45. BOOST_MPL_ASSERT_NOT((bu::is_dimension_list<boost::mpl::list0<> >));
  46. BOOST_MPL_ASSERT_NOT((bu::is_dimension_list<int>));
  47. BOOST_MPL_ASSERT((bu::is_unit<bu::unit<bu::dimensionless_type, system1> >));
  48. BOOST_MPL_ASSERT((bu::is_unit<bu::unit<dimension, system1> >));
  49. BOOST_MPL_ASSERT_NOT((bu::is_unit<int>));
  50. BOOST_MPL_ASSERT((bu::is_unit_of_system<bu::unit<bu::dimensionless_type, system1>, system1>));
  51. BOOST_MPL_ASSERT((bu::is_unit_of_system<bu::unit<dimension, system1>, system1>));
  52. BOOST_MPL_ASSERT_NOT((bu::is_unit_of_system<bu::unit<bu::dimensionless_type, system1>, system2>));
  53. BOOST_MPL_ASSERT_NOT((bu::is_unit_of_system<bu::unit<dimension, system1>, system2>));
  54. BOOST_MPL_ASSERT_NOT((bu::is_unit_of_system<int, system1>));
  55. BOOST_MPL_ASSERT_NOT((bu::is_unit_of_system<int, system2>));
  56. BOOST_MPL_ASSERT((bu::is_unit_of_dimension<bu::unit<bu::dimensionless_type, system1>, bu::dimensionless_type>));
  57. BOOST_MPL_ASSERT((bu::is_unit_of_dimension<bu::unit<dimension, system1>, dimension>));
  58. BOOST_MPL_ASSERT_NOT((bu::is_unit_of_dimension<bu::unit<bu::dimensionless_type, system1>, dimension>));
  59. BOOST_MPL_ASSERT_NOT((bu::is_unit_of_dimension<bu::unit<dimension, system1>, bu::dimensionless_type>));
  60. BOOST_MPL_ASSERT_NOT((bu::is_unit_of_dimension<int, bu::dimensionless_type>));
  61. BOOST_MPL_ASSERT_NOT((bu::is_unit_of_dimension<int, dimension>));
  62. BOOST_MPL_ASSERT((bu::is_quantity<bu::quantity<bu::unit<bu::dimensionless_type, system1> > >));
  63. BOOST_MPL_ASSERT((bu::is_quantity<bu::quantity<bu::unit<dimension, system1> > >));
  64. BOOST_MPL_ASSERT_NOT((bu::is_quantity<int>));
  65. BOOST_MPL_ASSERT((bu::is_quantity<bu::quantity<bu::unit<bu::dimensionless_type, system1>, int> >));
  66. BOOST_MPL_ASSERT((bu::is_quantity<bu::quantity<bu::unit<dimension, system1>, int> >));
  67. BOOST_MPL_ASSERT((bu::is_quantity_of_system<bu::quantity<bu::unit<bu::dimensionless_type, system1> >, system1>));
  68. BOOST_MPL_ASSERT((bu::is_quantity_of_system<bu::quantity<bu::unit<dimension, system1> >, system1>));
  69. BOOST_MPL_ASSERT_NOT((bu::is_quantity_of_system<bu::quantity<bu::unit<bu::dimensionless_type, system1> >, system2>));
  70. BOOST_MPL_ASSERT_NOT((bu::is_quantity_of_system<bu::quantity<bu::unit<dimension, system1> >, system2>));
  71. BOOST_MPL_ASSERT_NOT((bu::is_quantity_of_system<int, system1>));
  72. BOOST_MPL_ASSERT_NOT((bu::is_quantity_of_system<int, system2>));
  73. BOOST_MPL_ASSERT((bu::is_quantity_of_dimension<bu::quantity<bu::unit<bu::dimensionless_type, system1> >, bu::dimensionless_type>));
  74. BOOST_MPL_ASSERT((bu::is_quantity_of_dimension<bu::quantity<bu::unit<dimension, system1> >, dimension>));
  75. BOOST_MPL_ASSERT_NOT((bu::is_quantity_of_dimension<bu::quantity<bu::unit<bu::dimensionless_type, system1> >, dimension>));
  76. BOOST_MPL_ASSERT_NOT((bu::is_quantity_of_dimension<bu::quantity<bu::unit<dimension, system1> >, bu::dimensionless_type>));
  77. BOOST_MPL_ASSERT_NOT((bu::is_quantity_of_dimension<int, bu::dimensionless_type>));
  78. BOOST_MPL_ASSERT_NOT((bu::is_quantity_of_dimension<int, dimension>));
  79. return 0;
  80. }