1// Boost.Units - A C++ library for zero-overhead dimensional analysis and
2// unit/quantity manipulation and conversion
3//
4// Copyright (C) 2003-2009 Matthias Christian Schabel
5// Copyright (C) 2007-2009 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_constants.cpp
15
16\details
17Test all combinations of operators with the constants.
18
19**/
20
21#include <boost/units/systems/detail/constants.hpp>
22#include <boost/units/quantity.hpp>
23#include <boost/units/pow.hpp>
24#include <boost/units/systems/si/length.hpp>
25#include <boost/units/systems/si/time.hpp>
26
27using boost::units::quantity;
28using boost::units::si::length;
29using boost::units::si::meters;
30using boost::units::si::seconds;
31using boost::units::static_rational;
32using boost::units::pow;
33using boost::units::root;
34
35BOOST_UNITS_PHYSICAL_CONSTANT(length_constant, quantity<length>, 2.0 * meters, 0.5 * meters);
36
37template<class T>
38void check_same(const T&, const T&);
39
40template<class T>
41typename T::value_type unwrap(const boost::units::constant<T>&);
42
43template<class T>
44T unwrap(const T&);
45
46#define BOOST_UNITS_CHECK_RESULT(arg1, op, arg2) check_same((arg1) op (arg2), unwrap(arg1) op unwrap(arg2));
47
48void test_add() {
49 BOOST_UNITS_CHECK_RESULT(length_constant, +, length_constant);
50 BOOST_UNITS_CHECK_RESULT(length_constant, +, 1.0 * meters);
51 BOOST_UNITS_CHECK_RESULT(1.0* meters, +, length_constant);
52}
53
54void test_subtract() {
55 BOOST_UNITS_CHECK_RESULT(length_constant, -, length_constant);
56 BOOST_UNITS_CHECK_RESULT(length_constant, -, 1.0 * meters);
57 BOOST_UNITS_CHECK_RESULT(1.0* meters, -, length_constant);
58}
59
60void test_multiply() {
61 BOOST_UNITS_CHECK_RESULT(length_constant, *, length_constant);
62 BOOST_UNITS_CHECK_RESULT(length_constant, *, 1.0 * seconds);
63 BOOST_UNITS_CHECK_RESULT(1.0 * seconds, *, length_constant);
64 BOOST_UNITS_CHECK_RESULT(length_constant, *, 1.0);
65 BOOST_UNITS_CHECK_RESULT(1.0, *, length_constant);
66 BOOST_UNITS_CHECK_RESULT(length_constant, *, seconds);
67 BOOST_UNITS_CHECK_RESULT(seconds, *, length_constant);
68}
69
70void test_divide() {
71 BOOST_UNITS_CHECK_RESULT(length_constant, /, length_constant);
72 BOOST_UNITS_CHECK_RESULT(length_constant, /, 1.0 * seconds);
73 BOOST_UNITS_CHECK_RESULT(1.0 * seconds, /, length_constant);
74 BOOST_UNITS_CHECK_RESULT(length_constant, /, 1.0);
75 BOOST_UNITS_CHECK_RESULT(1.0, /, length_constant);
76 BOOST_UNITS_CHECK_RESULT(length_constant, /, seconds);
77 BOOST_UNITS_CHECK_RESULT(seconds, /, length_constant);
78}
79
80void test_pow() {
81 check_same(pow<2>(x: length_constant), pow<2>(x: unwrap(length_constant)));
82 check_same(root<2>(x: length_constant), root<2>(x: unwrap(length_constant)));
83 check_same(pow<5>(x: length_constant), pow<5>(x: unwrap(length_constant)));
84 check_same(root<5>(x: length_constant), root<5>(x: unwrap(length_constant)));
85 check_same(pow<static_rational<2, 3> >(x: length_constant), pow<static_rational<2, 3> >(x: unwrap(length_constant)));
86 check_same(root<static_rational<2, 3> >(x: length_constant), root<static_rational<2, 3> >(x: unwrap(length_constant)));
87}
88

source code of boost/libs/units/test/test_constants.cpp