123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- // Boost.Units - A C++ library for zero-overhead dimensional analysis and
- // unit/quantity manipulation and conversion
- //
- // Copyright (C) 2003-2008 Matthias Christian Schabel
- // Copyright (C) 2008 Steven Watanabe
- //
- // Distributed under the Boost Software License, Version 1.0. (See
- // accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- /**
- \file
-
- \brief dimension.cpp
- \details
- Test dimension list manipulation.
- Output:
- @verbatim
- //[dimension_output
- length_dimension = list<dim<length_base_dimension, static_rational<1l, 1l> >, dimensionless_type>
- mass_dimension = list<dim<mass_base_dimension, static_rational<1l, 1l> >, dimensionless_type>
- time_dimension = list<dim<time_base_dimension, static_rational<1l, 1l> >, dimensionless_type>
- 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> > >
- LM_type = list<dim<length_base_dimension, static_rational<1l, 1l> >, list<dim<mass_base_dimension, static_rational<1l, 1l> >, dimensionless_type> >
- L_T_type = list<dim<length_base_dimension, static_rational<1l, 1l> >, list<dim<time_base_dimension, static_rational<-1l, 1l> >, dimensionless_type> >
- V_type = list<dim<length_base_dimension, static_rational<1l, 1l> >, list<dim<time_base_dimension, static_rational<-1l, 1l> >, dimensionless_type> >
- //]
- @endverbatim
- **/
- #include <boost/type_traits/is_same.hpp>
- #include <boost/mpl/assert.hpp>
- #include <iostream>
- #include <boost/units/detail/utility.hpp>
- #include "test_system.hpp"
- namespace mpl = boost::mpl;
- int main(void)
- {
- using namespace boost::units;
- BOOST_MPL_ASSERT((boost::is_same<
- length_dimension,
- mpl::push_front<
- dimensionless_type,
- dim<length_base_dimension, static_rational<1L, 1L> >
- >::type
- >));
- BOOST_MPL_ASSERT((boost::is_same<
- mass_dimension,
- mpl::push_front<
- dimensionless_type,
- dim<mass_base_dimension, static_rational<1L, 1L> >
- >::type
- >));
- BOOST_MPL_ASSERT((boost::is_same<energy_dimension,
- mpl::push_front<
- mpl::push_front<
- mpl::push_front<
- dimensionless_type,
- dim<time_base_dimension, static_rational<-2L, 1L> > >::type,
- dim<mass_base_dimension, static_rational<1L, 1L> > >::type,
- dim<length_base_dimension, static_rational<2L, 1L> > >::type>));
-
- std::cout << "length_dimension = "
- << simplify_typename(length_dimension()) << std::endl
- << "mass_dimension = "
- << simplify_typename(mass_dimension()) << std::endl
- << "time_dimension = "
- << simplify_typename(time_dimension()) << std::endl
- << "energy_dimension = "
- << simplify_typename(energy_dimension()) << std::endl;
-
- //[dimension_snippet_1
- typedef mpl::times<length_dimension,mass_dimension>::type LM_type;
- typedef mpl::divides<length_dimension,time_dimension>::type L_T_type;
- typedef static_root<
- mpl::divides<energy_dimension,mass_dimension>::type,
- static_rational<2>
- >::type V_type;
- //]
-
- BOOST_MPL_ASSERT((boost::is_same<LM_type,
- mpl::push_front<
- mpl::push_front<
- dimensionless_type,
- dim<mass_base_dimension, static_rational<1L, 1L> > >::type,
- dim<length_base_dimension, static_rational<1L, 1L> > >::type>));
- BOOST_MPL_ASSERT((boost::is_same<L_T_type,
- mpl::push_front<
- mpl::push_front<
- dimensionless_type,
- dim<time_base_dimension, static_rational<-1L, 1L> > >::type,
- dim<length_base_dimension, static_rational<1L, 1L> > >::type>));
- BOOST_MPL_ASSERT((boost::is_same<V_type,
- mpl::push_front<
- mpl::push_front<
- dimensionless_type,
- dim<time_base_dimension, static_rational<-1L, 1L> > >::type,
- dim<length_base_dimension, static_rational<1L, 1L> > >::type>));
-
- std::cout << "LM_type = " << simplify_typename(LM_type()) << std::endl
- << "L_T_type = " << simplify_typename(L_T_type()) << std::endl
- << "V_type = " << simplify_typename(V_type()) << std::endl;
-
- return 0;
- }
|