summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/units/example/dimension.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/units/example/dimension.cpp')
-rw-r--r--src/boost/libs/units/example/dimension.cpp117
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;
+}