]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/units/test/test_dimensionless_quantity.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / units / test / test_dimensionless_quantity.cpp
CommitLineData
7c673cae
FG
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_dimensionless_quantity.cpp
15
16\details
17Test unit class.
18
19Output:
20@verbatim
21@endverbatim
22**/
23
24#include "test_header.hpp"
25
26#include <boost/units/pow.hpp>
27
28namespace bu = boost::units;
29
11fdf7f2 30BOOST_STATIC_CONSTEXPR double E_ = 2.718281828459045235360287471352662497757;
7c673cae 31
1e59de90 32int main()
7c673cae
FG
33{
34 // default constructor
11fdf7f2 35 BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless> E1;
1e59de90 36 BOOST_TEST(E1.value() == double());
7c673cae
FG
37
38 // value_type constructor
11fdf7f2 39 BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless> E2(E_);
1e59de90 40 BOOST_TEST(E2.value() == E_);
7c673cae
FG
41
42 // copy constructor
11fdf7f2 43 BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless> E3(E2);
1e59de90 44 BOOST_TEST(E3.value() == E_);
7c673cae
FG
45
46 // operator=
11fdf7f2 47 BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless> E4 = E2;
1e59de90 48 BOOST_TEST(E4.value() == E_);
7c673cae
FG
49
50 // implicit copy constructor value_type conversion
11fdf7f2 51 BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless,float> E5(E2);
7c673cae
FG
52 BOOST_UNITS_CHECK_CLOSE(E5.value(), float(E_));
53
11fdf7f2 54 BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless,long> E6(E2);
1e59de90 55 BOOST_TEST(E6.value() == long(E_));
7c673cae
FG
56
57 // implicit operator= value_type conversion
58 // narrowing conversion disallowed
11fdf7f2 59// BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless,float> E7 = E2;
7c673cae
FG
60// BOOST_UNITS_CHECK_CLOSE(E7.value(),float(E_));
61
62 // narrowing conversion disallowed
11fdf7f2 63// BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless,long> E8 = E2;
1e59de90 64// BOOST_TEST(E8.value() == long(E_));
7c673cae
FG
65
66 // const construction
67 bu::quantity<bu::dimensionless> E9(E2);
1e59de90 68 BOOST_TEST(E9.value() == E_);
7c673cae
FG
69
70// // value assignment
71// E9.value() = 1.5*bu::dimensionless();
1e59de90 72// BOOST_TEST(E9.value() == 1.5);
7c673cae
FG
73//
74// // value assignment with implicit conversion
75// E9.value() = 1.5;
1e59de90 76// BOOST_TEST(E9.value() == 1.5);
7c673cae
FG
77//
78// // value assignment with implicit value_type conversion
79// E9.value() = 2*bu::dimensionless();
1e59de90 80// BOOST_TEST(E9.value() == double(2));
7c673cae
FG
81//
82// // value assignment with implicit value_type conversion
83// E9.value() = 2;
1e59de90 84// BOOST_TEST(E9.value() == double(2));
7c673cae
FG
85
86 // operator+=(this_type)
87 E9 = 2.0;
88 E9 += E9;
1e59de90 89 BOOST_TEST(E9.value() == 4.0);
7c673cae
FG
90
91 // operator-=(this_type)
92 E9 = 2.0;
93 E9 -= E9;
1e59de90 94 BOOST_TEST(E9.value() == 0.0);
7c673cae
FG
95
96 // operator*=(value_type)
97 E9 = 2.0;
98 E9 *= 2.0;
1e59de90 99 BOOST_TEST(E9.value() == 4.0);
7c673cae
FG
100
101 // operator/=(value_type)
102 E9 = 2.0;
103 E9 /= 2.0;
1e59de90 104 BOOST_TEST(E9.value() == 1.0);
7c673cae
FG
105
106 // static construct quantity from value_type
11fdf7f2 107 BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless> E(bu::quantity<bu::dimensionless>::from_value(2.5));
1e59de90 108 BOOST_TEST(E.value() == 2.5);
7c673cae
FG
109
110 // implicit conversion to value_type
111 const double V1(E9);
1e59de90 112 BOOST_TEST(V1 == E9.value());
7c673cae
FG
113
114 const double V2 = E9;
1e59de90 115 BOOST_TEST(V2 == E9.value());
7c673cae
FG
116
117 // unit * scalar
1e59de90 118 BOOST_TEST(bu::dimensionless()*2.0 == bu::quantity<bu::dimensionless>::from_value(2.0));
7c673cae
FG
119
120 // unit / scalar
1e59de90 121 BOOST_TEST(bu::dimensionless()/2.0 == bu::quantity<bu::dimensionless>::from_value(0.5));
7c673cae
FG
122
123 // scalar * unit
1e59de90 124 BOOST_TEST(2.0*bu::dimensionless() == bu::quantity<bu::dimensionless>::from_value(2.0));
7c673cae
FG
125
126 // scalar / unit
1e59de90 127 BOOST_TEST(2.0/bu::dimensionless() == bu::quantity<bu::dimensionless>::from_value(2.0));
7c673cae
FG
128
129 // quantity * scalar
1e59de90 130 BOOST_TEST(E*2.0 == bu::quantity<bu::dimensionless>::from_value(5.0));
7c673cae
FG
131
132 // quantity / scalar
1e59de90 133 BOOST_TEST(E/2.0 == bu::quantity<bu::dimensionless>::from_value(1.25));
7c673cae
FG
134
135 // scalar * quantity
1e59de90 136 BOOST_TEST(2.0*E == bu::quantity<bu::dimensionless>::from_value(5.0));
7c673cae
FG
137
138 // scalar / quantity
1e59de90 139 BOOST_TEST(2.0/E == bu::quantity<bu::dimensionless>::from_value(0.8));
7c673cae 140
11fdf7f2
TL
141 BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless> D1(1.0),
142 D2(2.0);
7c673cae
FG
143
144 // unit * quantity
1e59de90 145 BOOST_TEST(bu::dimensionless()*D1 == D1);
7c673cae
FG
146
147 // unit / quantity
1e59de90 148 BOOST_TEST(bu::dimensionless()/D1 == D1);
7c673cae
FG
149
150 // quantity * unit
1e59de90 151 BOOST_TEST(D1*bu::dimensionless() == D1);
7c673cae
FG
152
153 // quantity / unit
1e59de90 154 BOOST_TEST(D1*bu::dimensionless() == D1);
7c673cae
FG
155
156 // +quantity
1e59de90 157 BOOST_TEST(+D1 == 1.0*bu::dimensionless());
7c673cae
FG
158
159 // -quantity
1e59de90 160 BOOST_TEST(-D1 == -1.0*bu::dimensionless());
7c673cae
FG
161
162 // quantity + quantity
1e59de90 163 BOOST_TEST(D2+D1 == 3.0*bu::dimensionless());
7c673cae
FG
164
165 // quantity - quantity
1e59de90 166 BOOST_TEST(D2-D1 == 1.0*bu::dimensionless());
7c673cae
FG
167
168 // quantity * quantity
1e59de90 169 BOOST_TEST(D1*D2 == 2.0*bu::dimensionless());
7c673cae
FG
170
171 // quantity / quantity
1e59de90 172 BOOST_TEST(D2/D1 == 2.0*bu::dimensionless());
7c673cae
FG
173
174 // integer power of quantity
1e59de90 175 BOOST_TEST(2.0*bu::pow<2>(D2) == 2.0*std::pow(2.0,2.0)*bu::dimensionless());
7c673cae
FG
176
177 // rational power of quantity
1e59de90 178 BOOST_TEST((2.0*bu::pow< bu::static_rational<2,3> >(D2) == 2.0*std::pow(2.0,2.0/3.0)*bu::dimensionless()));
7c673cae
FG
179
180 // integer root of quantity
1e59de90 181 BOOST_TEST(2.0*bu::root<2>(D2) == 2.0*std::pow(2.0,1.0/2.0)*bu::dimensionless());
7c673cae
FG
182
183 // rational root of quantity
1e59de90 184 BOOST_TEST((2.0*bu::root< bu::static_rational<3,2> >(D2) == 2.0*std::pow(2.0,2.0/3.0)*bu::dimensionless()));
7c673cae 185
11fdf7f2
TL
186 BOOST_CONSTEXPR_OR_CONST bu::quantity<bu::dimensionless> A1(0.0),
187 A2(0.0),
188 A3(1.0),
189 A4(-1.0);
7c673cae
FG
190
191 // operator==
1e59de90
TL
192 BOOST_TEST((A1 == A2) == true);
193 BOOST_TEST((A1 == A3) == false);
7c673cae
FG
194
195 // operator!=
1e59de90
TL
196 BOOST_TEST((A1 != A2) == false);
197 BOOST_TEST((A1 != A3) == true);
7c673cae
FG
198
199 // operator<
1e59de90
TL
200 BOOST_TEST((A1 < A2) == false);
201 BOOST_TEST((A1 < A3) == true);
7c673cae
FG
202
203 // operator<=
1e59de90
TL
204 BOOST_TEST((A1 <= A2) == true);
205 BOOST_TEST((A1 <= A3) == true);
7c673cae
FG
206
207 // operator>
1e59de90
TL
208 BOOST_TEST((A1 > A2) == false);
209 BOOST_TEST((A1 > A4) == true);
7c673cae
FG
210
211 // operator>=
1e59de90
TL
212 BOOST_TEST((A1 >= A2) == true);
213 BOOST_TEST((A1 >= A4) == true);
7c673cae 214
1e59de90 215 return boost::report_errors();
7c673cae 216}