diff options
Diffstat (limited to 'src/boost/libs/units/example/dimension.cpp')
-rw-r--r-- | src/boost/libs/units/example/dimension.cpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/boost/libs/units/example/dimension.cpp b/src/boost/libs/units/example/dimension.cpp new file mode 100644 index 00000000..7f7ffb6b --- /dev/null +++ b/src/boost/libs/units/example/dimension.cpp @@ -0,0 +1,117 @@ +// 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; +} |