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