]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/units/test/test_dimensionless_quantity.cpp
1 // Boost.Units - A C++ library for zero-overhead dimensional analysis and
2 // unit/quantity manipulation and conversion
4 // Copyright (C) 2003-2008 Matthias Christian Schabel
5 // Copyright (C) 2008 Steven Watanabe
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)
14 \brief test_dimensionless_quantity.cpp
24 #include "test_header.hpp"
26 #include <boost/units/pow.hpp>
28 namespace bu
= boost::units
;
30 static const double E_
= 2.718281828459045235360287471352662497757;
32 int test_main(int,char *[])
34 // default constructor
35 const bu::quantity
<bu::dimensionless
> E1
;
36 BOOST_CHECK(E1
.value() == double());
38 // value_type constructor
39 const bu::quantity
<bu::dimensionless
> E2(E_
);
40 BOOST_CHECK(E2
.value() == E_
);
43 const bu::quantity
<bu::dimensionless
> E3(E2
);
44 BOOST_CHECK(E3
.value() == E_
);
47 const bu::quantity
<bu::dimensionless
> E4
= E2
;
48 BOOST_CHECK(E4
.value() == E_
);
50 // implicit copy constructor value_type conversion
51 const bu::quantity
<bu::dimensionless
,float> E5(E2
);
52 BOOST_UNITS_CHECK_CLOSE(E5
.value(), float(E_
));
54 const bu::quantity
<bu::dimensionless
,long> E6(E2
);
55 BOOST_CHECK(E6
.value() == long(E_
));
57 // implicit operator= value_type conversion
58 // narrowing conversion disallowed
59 // const bu::quantity<bu::dimensionless,float> E7 = E2;
60 // BOOST_UNITS_CHECK_CLOSE(E7.value(),float(E_));
62 // narrowing conversion disallowed
63 // const bu::quantity<bu::dimensionless,long> E8 = E2;
64 // BOOST_CHECK(E8.value() == long(E_));
67 bu::quantity
<bu::dimensionless
> E9(E2
);
68 BOOST_CHECK(E9
.value() == E_
);
70 // // value assignment
71 // E9.value() = 1.5*bu::dimensionless();
72 // BOOST_CHECK(E9.value() == 1.5);
74 // // value assignment with implicit conversion
76 // BOOST_CHECK(E9.value() == 1.5);
78 // // value assignment with implicit value_type conversion
79 // E9.value() = 2*bu::dimensionless();
80 // BOOST_CHECK(E9.value() == double(2));
82 // // value assignment with implicit value_type conversion
84 // BOOST_CHECK(E9.value() == double(2));
86 // operator+=(this_type)
89 BOOST_CHECK(E9
.value() == 4.0);
91 // operator-=(this_type)
94 BOOST_CHECK(E9
.value() == 0.0);
96 // operator*=(value_type)
99 BOOST_CHECK(E9
.value() == 4.0);
101 // operator/=(value_type)
104 BOOST_CHECK(E9
.value() == 1.0);
106 // static construct quantity from value_type
107 const bu::quantity
<bu::dimensionless
> E(bu::quantity
<bu::dimensionless
>::from_value(2.5));
108 BOOST_CHECK(E
.value() == 2.5);
110 // implicit conversion to value_type
112 BOOST_CHECK(V1
== E9
.value());
114 const double V2
= E9
;
115 BOOST_CHECK(V2
== E9
.value());
118 BOOST_CHECK(bu::dimensionless()*2.0 == bu::quantity
<bu::dimensionless
>::from_value(2.0));
121 BOOST_CHECK(bu::dimensionless()/2.0 == bu::quantity
<bu::dimensionless
>::from_value(0.5));
124 BOOST_CHECK(2.0*bu::dimensionless() == bu::quantity
<bu::dimensionless
>::from_value(2.0));
127 BOOST_CHECK(2.0/bu::dimensionless() == bu::quantity
<bu::dimensionless
>::from_value(2.0));
130 BOOST_CHECK(E
*2.0 == bu::quantity
<bu::dimensionless
>::from_value(5.0));
133 BOOST_CHECK(E
/2.0 == bu::quantity
<bu::dimensionless
>::from_value(1.25));
136 BOOST_CHECK(2.0*E
== bu::quantity
<bu::dimensionless
>::from_value(5.0));
139 BOOST_CHECK(2.0/E
== bu::quantity
<bu::dimensionless
>::from_value(0.8));
141 const bu::quantity
<bu::dimensionless
> D1(1.0),
145 BOOST_CHECK(bu::dimensionless()*D1
== D1
);
148 BOOST_CHECK(bu::dimensionless()/D1
== D1
);
151 BOOST_CHECK(D1
*bu::dimensionless() == D1
);
154 BOOST_CHECK(D1
*bu::dimensionless() == D1
);
157 BOOST_CHECK(+D1
== 1.0*bu::dimensionless());
160 BOOST_CHECK(-D1
== -1.0*bu::dimensionless());
162 // quantity + quantity
163 BOOST_CHECK(D2
+D1
== 3.0*bu::dimensionless());
165 // quantity - quantity
166 BOOST_CHECK(D2
-D1
== 1.0*bu::dimensionless());
168 // quantity * quantity
169 BOOST_CHECK(D1
*D2
== 2.0*bu::dimensionless());
171 // quantity / quantity
172 BOOST_CHECK(D2
/D1
== 2.0*bu::dimensionless());
174 // integer power of quantity
175 BOOST_CHECK(2.0*bu::pow
<2>(D2
) == 2.0*std::pow(2.0,2.0)*bu::dimensionless());
177 // rational power of quantity
178 BOOST_CHECK((2.0*bu::pow
< bu::static_rational
<2,3> >(D2
) == 2.0*std::pow(2.0,2.0/3.0)*bu::dimensionless()));
180 // integer root of quantity
181 BOOST_CHECK(2.0*bu::root
<2>(D2
) == 2.0*std::pow(2.0,1.0/2.0)*bu::dimensionless());
183 // rational root of quantity
184 BOOST_CHECK((2.0*bu::root
< bu::static_rational
<3,2> >(D2
) == 2.0*std::pow(2.0,2.0/3.0)*bu::dimensionless()));
186 const bu::quantity
<bu::dimensionless
> A1(0.0),
192 BOOST_CHECK((A1
== A2
) == true);
193 BOOST_CHECK((A1
== A3
) == false);
196 BOOST_CHECK((A1
!= A2
) == false);
197 BOOST_CHECK((A1
!= A3
) == true);
200 BOOST_CHECK((A1
< A2
) == false);
201 BOOST_CHECK((A1
< A3
) == true);
204 BOOST_CHECK((A1
<= A2
) == true);
205 BOOST_CHECK((A1
<= A3
) == true);
208 BOOST_CHECK((A1
> A2
) == false);
209 BOOST_CHECK((A1
> A4
) == true);
212 BOOST_CHECK((A1
>= A2
) == true);
213 BOOST_CHECK((A1
>= A4
) == true);