]>
Commit | Line | Data |
---|---|---|
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 | |
17 | Test unit class. | |
18 | ||
19 | Output: | |
20 | @verbatim | |
21 | @endverbatim | |
22 | **/ | |
23 | ||
24 | #include "test_header.hpp" | |
25 | ||
26 | #include <boost/units/pow.hpp> | |
27 | ||
28 | namespace bu = boost::units; | |
29 | ||
11fdf7f2 | 30 | BOOST_STATIC_CONSTEXPR double E_ = 2.718281828459045235360287471352662497757; |
7c673cae | 31 | |
1e59de90 | 32 | int 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 | } |