Imported Upstream version 1.57.0
[platform/upstream/boost.git] / libs / units / example / systems.cpp
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 systems.cpp
15
16 \details
17 Test various non-si units
18
19 Output:
20 @verbatim
21
22 @endverbatim
23 **/
24
25 #define BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(namespace_,unit_name_,dimension_)              \
26 namespace boost {                                                                            \
27 namespace units {                                                                            \
28 namespace namespace_ {                                                                       \
29 typedef make_system<unit_name_ ## _base_unit>::type    unit_name_ ## system_;                \
30 typedef unit<dimension_ ## _dimension,unit_name_ ## system_> unit_name_ ## _ ## dimension_;  \
31 static const unit_name_ ## _ ## dimension_    unit_name_ ## s;                               \
32 }                                                                                            \
33 }                                                                                            \
34 }                                                                                            \
35
36 #include <iostream>
37 #include <sstream>
38 #include <algorithm>
39
40 #include <boost/units/conversion.hpp>
41 #include <boost/units/io.hpp>
42 #include <boost/units/pow.hpp>
43
44 #include <boost/units/systems/cgs.hpp>
45 #include <boost/units/systems/si.hpp>
46
47 // angle base units
48 #include <boost/units/base_units/angle/arcminute.hpp>
49 #include <boost/units/base_units/angle/arcsecond.hpp>
50 #include <boost/units/base_units/angle/degree.hpp>
51 #include <boost/units/base_units/angle/gradian.hpp>
52 #include <boost/units/base_units/angle/revolution.hpp>
53 #include <boost/units/base_units/angle/radian.hpp>
54 #include <boost/units/base_units/angle/steradian.hpp>
55
56 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(angle,arcminute,plane_angle)
57 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(angle,arcsecond,plane_angle)
58 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(angle,degree,plane_angle)
59 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(angle,gradian,plane_angle)
60 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(angle,radian,plane_angle)
61 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(angle,revolution,plane_angle)
62
63 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(angle,steradian,solid_angle)
64
65 // astronomical base units
66 #include <boost/units/base_units/astronomical/astronomical_unit.hpp>
67 #include <boost/units/base_units/astronomical/light_second.hpp>
68 #include <boost/units/base_units/astronomical/light_minute.hpp>
69 #include <boost/units/base_units/astronomical/light_hour.hpp>
70 #include <boost/units/base_units/astronomical/light_day.hpp>
71 #include <boost/units/base_units/astronomical/light_year.hpp>
72 #include <boost/units/base_units/astronomical/parsec.hpp>
73
74 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(astronomical,astronomical_unit,length)
75 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(astronomical,light_second,length)
76 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(astronomical,light_minute,length)
77 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(astronomical,light_hour,length)
78 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(astronomical,light_day,length)
79 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(astronomical,light_year,length)
80 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(astronomical,parsec,length)
81
82 // imperial base units
83 #include <boost/units/base_units/imperial/thou.hpp>
84 #include <boost/units/base_units/imperial/inch.hpp>
85 #include <boost/units/base_units/imperial/foot.hpp>
86 #include <boost/units/base_units/imperial/yard.hpp>
87 #include <boost/units/base_units/imperial/furlong.hpp>
88 #include <boost/units/base_units/imperial/mile.hpp>
89 #include <boost/units/base_units/imperial/league.hpp>
90
91 #include <boost/units/base_units/imperial/grain.hpp>
92 #include <boost/units/base_units/imperial/drachm.hpp>
93 #include <boost/units/base_units/imperial/ounce.hpp>
94 #include <boost/units/base_units/imperial/pound.hpp>
95 #include <boost/units/base_units/imperial/stone.hpp>
96 #include <boost/units/base_units/imperial/quarter.hpp>
97 #include <boost/units/base_units/imperial/hundredweight.hpp>
98 #include <boost/units/base_units/imperial/ton.hpp>
99
100 #include <boost/units/base_units/imperial/fluid_ounce.hpp>
101 #include <boost/units/base_units/imperial/gill.hpp>
102 #include <boost/units/base_units/imperial/pint.hpp>
103 #include <boost/units/base_units/imperial/quart.hpp>
104 #include <boost/units/base_units/imperial/gallon.hpp>
105
106 #include <boost/units/base_units/imperial/conversions.hpp>
107
108 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,thou,length)
109 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,inch,length)
110 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,foot,length)
111 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,yard,length)
112 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,furlong,length)
113 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,mile,length)
114 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,league,length)
115
116 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,grain,mass)
117 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,drachm,mass)
118 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,ounce,mass)
119 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,pound,mass)
120 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,stone,mass)
121 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,quarter,mass)
122 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,hundredweight,mass)
123 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,ton,mass)
124
125 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,fluid_ounce,volume)
126 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,gill,volume)
127 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,pint,volume)
128 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,quart,volume)
129 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(imperial,gallon,volume)
130
131 // metric base units
132 #include <boost/units/base_units/metric/angstrom.hpp>
133 #include <boost/units/base_units/metric/fermi.hpp>
134 #include <boost/units/base_units/metric/micron.hpp>
135 #include <boost/units/base_units/metric/nautical_mile.hpp>
136
137 #include <boost/units/base_units/metric/ton.hpp>
138
139 #include <boost/units/base_units/metric/day.hpp>
140 #include <boost/units/base_units/metric/hour.hpp>
141 #include <boost/units/base_units/metric/minute.hpp>
142 #include <boost/units/base_units/metric/year.hpp>
143
144 #include <boost/units/base_units/metric/knot.hpp>
145
146 #include <boost/units/base_units/metric/are.hpp>
147 #include <boost/units/base_units/metric/barn.hpp>
148 #include <boost/units/base_units/metric/hectare.hpp>
149
150 #include <boost/units/base_units/metric/liter.hpp>
151
152 #include <boost/units/base_units/metric/atmosphere.hpp>
153 #include <boost/units/base_units/metric/bar.hpp>
154 #include <boost/units/base_units/metric/mmHg.hpp>
155 #include <boost/units/base_units/metric/torr.hpp>
156
157 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,angstrom,length)
158 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,fermi,length)
159 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,micron,length)
160 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,nautical_mile,length)
161
162 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,ton,mass)
163
164 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,day,time)
165 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,hour,time)
166 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,minute,time)
167 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,year,time)
168
169 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,knot,velocity)
170
171 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,are,area)
172 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,barn,area)
173 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,hectare,area)
174
175 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,liter,volume)
176
177 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,atmosphere,pressure)
178 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,bar,pressure)
179 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,mmHg,pressure)
180 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(metric,torr,pressure)
181
182 // us base units
183
184 #include <boost/units/base_units/us/mil.hpp>
185 #include <boost/units/base_units/us/inch.hpp>
186 #include <boost/units/base_units/us/foot.hpp>
187 #include <boost/units/base_units/us/yard.hpp>
188 #include <boost/units/base_units/us/mile.hpp>
189
190 #include <boost/units/base_units/us/grain.hpp>
191 #include <boost/units/base_units/us/dram.hpp>
192 #include <boost/units/base_units/us/ounce.hpp>
193 #include <boost/units/base_units/us/pound.hpp>
194 #include <boost/units/base_units/us/hundredweight.hpp>
195 #include <boost/units/base_units/us/ton.hpp>
196
197 #include <boost/units/base_units/us/minim.hpp>
198 #include <boost/units/base_units/us/fluid_dram.hpp>
199 #include <boost/units/base_units/us/teaspoon.hpp>
200 #include <boost/units/base_units/us/tablespoon.hpp>
201 #include <boost/units/base_units/us/fluid_ounce.hpp>
202 #include <boost/units/base_units/us/gill.hpp>
203 #include <boost/units/base_units/us/cup.hpp>
204 #include <boost/units/base_units/us/pint.hpp>
205 #include <boost/units/base_units/us/quart.hpp>
206 #include <boost/units/base_units/us/gallon.hpp>
207
208 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,mil,length)
209 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,inch,length)
210 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,foot,length)
211 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,yard,length)
212 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,mile,length)
213
214 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,grain,mass)
215 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,dram,mass)
216 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,ounce,mass)
217 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,pound,mass)
218 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,hundredweight,mass)
219 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,ton,mass)
220
221 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,minim,volume)
222 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,fluid_dram,volume)
223 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,teaspoon,volume)
224 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,tablespoon,volume)
225 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,fluid_ounce,volume)
226 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,gill,volume)
227 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,cup,volume)
228 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,pint,volume)
229 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,quart,volume)
230 BOOST_UNITS_DEFINE_SINGLE_UNIT_SYSTEM(us,gallon,volume)
231
232 int main(void)
233 {
234     using namespace boost::units;
235     
236     {
237         using namespace boost::units::angle;
238         
239         std::cout << "Testing angle base units..." << std::endl;
240         
241         quantity<arcsecond_plane_angle>        as(1.0*arcseconds);
242         quantity<arcminute_plane_angle>        am(1.0*arcminutes);
243         quantity<degree_plane_angle>        d(1.0*degrees);
244         quantity<gradian_plane_angle>        g(1.0*gradians);
245         quantity<radian_plane_angle>        r(1.0*radians);
246         quantity<revolution_plane_angle>    rev(1.0*revolutions);
247         
248         std::cout << as << " = " << quantity<si::plane_angle>(as) << std::endl
249                   << am << " = " << quantity<si::plane_angle>(am) << std::endl
250                   << d << " = " << quantity<si::plane_angle>(d) << std::endl
251                   << g << " = " << quantity<si::plane_angle>(g) << std::endl
252                   << r << " = " << quantity<si::plane_angle>(r) << std::endl
253                   << rev << " = " << quantity<si::plane_angle>(rev) << std::endl
254                   << std::endl;
255     
256         std::cout << rev << "/" << as << " = " << quantity<si::dimensionless>(rev/as) << std::endl
257                   << rev << "/" << am << " = " << quantity<si::dimensionless>(rev/am) << std::endl
258                   << rev << "/" << d << " = " << quantity<si::dimensionless>(rev/d) << std::endl
259                   << rev << "/" << g << " = " << quantity<si::dimensionless>(rev/g) << std::endl
260                   << rev << "/" << r << " = " << quantity<si::dimensionless>(rev/r) << std::endl
261                   << std::endl;
262                   
263         // conversions only work with exponent of +/- 1 in scaled_base_unit?
264         std::cout << as << " = " << quantity<arcsecond_plane_angle>(as) << std::endl
265                   << am << " = " << quantity<arcsecond_plane_angle>(am) << std::endl
266                   << d << " = " << quantity<arcsecond_plane_angle>(d) << std::endl
267                   << rev << " = " << quantity<arcsecond_plane_angle>(rev) << std::endl
268                   << std::endl;
269                   
270         // conversions only work with exponent of +/- 1 in scaled_base_unit? see arcsecond.hpp
271         std::cout << as << " = " << quantity<arcminute_plane_angle>(as) << std::endl
272                   << am << " = " << quantity<arcminute_plane_angle>(am) << std::endl
273                   << d << " = " << quantity<arcminute_plane_angle>(d) << std::endl
274                   << rev << " = " << quantity<arcminute_plane_angle>(rev) << std::endl
275                   << std::endl;
276
277         std::cout << as << " = " << quantity<degree_plane_angle>(as) << std::endl
278                   << am << " = " << quantity<degree_plane_angle>(am) << std::endl
279                   << d << " = " << quantity<degree_plane_angle>(d) << std::endl
280                   << rev << " = " << quantity<degree_plane_angle>(rev) << std::endl
281                   << std::endl;
282                   
283         std::cout << as << " = " << quantity<revolution_plane_angle>(as) << std::endl
284                   << am << " = " << quantity<revolution_plane_angle>(am) << std::endl
285                   << d << " = " << quantity<revolution_plane_angle>(d) << std::endl
286                   << rev << " = " << quantity<revolution_plane_angle>(rev) << std::endl
287                   << std::endl;
288                   
289         quantity<steradian_solid_angle>        sa1(1.0*steradians);
290         
291         std::cout << sa1 << std::endl
292                   << std::endl;
293     }
294     
295     {
296         using namespace boost::units::astronomical;
297
298         std::cout << "Testing astronomical base units..." << std::endl;
299         
300         quantity<light_second_length>        ls(1.0*light_seconds);
301         quantity<light_minute_length>        lm(1.0*light_minutes);
302         quantity<astronomical_unit_length>    au(1.0*astronomical_units);
303         quantity<light_hour_length>            lh(1.0*light_hours);
304         quantity<light_day_length>            ld(1.0*light_days);
305         quantity<light_year_length>            ly(1.0*light_years);
306         quantity<parsec_length>                ps(1.0*parsecs);
307         
308         std::cout << ls << " = " << quantity<si::length>(ls) << std::endl
309                   << lm << " = " << quantity<si::length>(lm) << std::endl
310                   << au << " = " << quantity<si::length>(au) << std::endl
311                   << lh << " = " << quantity<si::length>(lh) << std::endl
312                   << ld << " = " << quantity<si::length>(ld) << std::endl
313                   << ly << " = " << quantity<si::length>(ly) << std::endl
314                   << ps << " = " << quantity<si::length>(ps) << std::endl
315                   << std::endl;
316                   
317         std::cout << ly << "/" << ls << " = " << quantity<si::dimensionless>(ly/ls) << std::endl
318                   << ly << "/" << lm << " = " << quantity<si::dimensionless>(ly/lm) << std::endl
319                   << ly << "/" << au << " = " << quantity<si::dimensionless>(ly/au) << std::endl
320                   << ly << "/" << lh << " = " << quantity<si::dimensionless>(ly/ld) << std::endl
321                   << ly << "/" << ld << " = " << quantity<si::dimensionless>(ly/lh) << std::endl
322                   << ly << "/" << ps << " = " << quantity<si::dimensionless>(ly/ps) << std::endl
323                   << std::endl;
324                   
325         std::cout << ls << " = " << quantity<light_second_length>(ls) << std::endl
326                   << lm << " = " << quantity<light_second_length>(lm) << std::endl
327                   << lh << " = " << quantity<light_second_length>(lh) << std::endl
328                   << ld << " = " << quantity<light_second_length>(ld) << std::endl
329                   << ly << " = " << quantity<light_second_length>(ly) << std::endl
330                   << std::endl;
331                   
332         std::cout << ls << " = " << quantity<light_minute_length>(ls) << std::endl
333                   << lm << " = " << quantity<light_minute_length>(lm) << std::endl
334                   << lh << " = " << quantity<light_minute_length>(lh) << std::endl
335                   << ld << " = " << quantity<light_minute_length>(ld) << std::endl
336                   << ly << " = " << quantity<light_minute_length>(ly) << std::endl
337                   << std::endl;
338                   
339         std::cout << ls << " = " << quantity<light_hour_length>(ls) << std::endl
340                   << lm << " = " << quantity<light_hour_length>(lm) << std::endl
341                   << lh << " = " << quantity<light_hour_length>(lh) << std::endl
342                   << ld << " = " << quantity<light_hour_length>(ld) << std::endl
343                   << ly << " = " << quantity<light_hour_length>(ly) << std::endl
344                   << std::endl;
345                   
346         std::cout << ls << " = " << quantity<light_day_length>(ls) << std::endl
347                   << lm << " = " << quantity<light_day_length>(lm) << std::endl
348                   << lh << " = " << quantity<light_day_length>(lh) << std::endl
349                   << ld << " = " << quantity<light_day_length>(ld) << std::endl
350                   << ly << " = " << quantity<light_day_length>(ly) << std::endl
351                   << std::endl;
352                   
353         std::cout << ls << " = " << quantity<light_year_length>(ls) << std::endl
354                   << lm << " = " << quantity<light_year_length>(lm) << std::endl
355                   << lh << " = " << quantity<light_year_length>(ld) << std::endl
356                   << ld << " = " << quantity<light_year_length>(lh) << std::endl
357                   << ly << " = " << quantity<light_year_length>(ly) << std::endl
358                   << std::endl;
359     }
360     
361     {
362         using namespace boost::units::imperial;
363         
364         std::cout << "Testing imperial base units..." << std::endl;
365         
366         quantity<thou_length>            iml1(1.0*thous);
367         quantity<inch_length>            iml2(1.0*inchs);
368         quantity<foot_length>            iml3(1.0*foots);
369         quantity<yard_length>            iml4(1.0*yards);
370         quantity<furlong_length>        iml5(1.0*furlongs);
371         quantity<mile_length>            iml6(1.0*miles);
372         quantity<league_length>            iml7(1.0*leagues);
373         
374         std::cout << iml1 << " = " << quantity<si::length>(iml1) << std::endl
375                   << iml2 << " = " << quantity<si::length>(iml2) << std::endl
376                   << iml3 << " = " << quantity<si::length>(iml3) << std::endl
377                   << iml4 << " = " << quantity<si::length>(iml4) << std::endl
378                   << iml5 << " = " << quantity<si::length>(iml5) << std::endl
379                   << iml6 << " = " << quantity<si::length>(iml6) << std::endl
380                   << iml7 << " = " << quantity<si::length>(iml7) << std::endl
381                   << std::endl;
382
383         std::cout << iml7 << "/" << iml1 << " = " << quantity<si::dimensionless>(iml7/iml1) << std::endl
384                   << iml7 << "/" << iml2 << " = " << quantity<si::dimensionless>(iml7/iml2) << std::endl
385                   << iml7 << "/" << iml3 << " = " << quantity<si::dimensionless>(iml7/iml3) << std::endl
386                   << iml7 << "/" << iml4 << " = " << quantity<si::dimensionless>(iml7/iml4) << std::endl
387                   << iml7 << "/" << iml5 << " = " << quantity<si::dimensionless>(iml7/iml5) << std::endl
388                   << iml7 << "/" << iml6 << " = " << quantity<si::dimensionless>(iml7/iml6) << std::endl
389                   << std::endl;
390                   
391         std::cout << iml1 << " = " << quantity<thou_length>(iml1) << std::endl
392                   << iml2 << " = " << quantity<thou_length>(iml2) << std::endl
393                   << iml3 << " = " << quantity<thou_length>(iml3) << std::endl
394                   << iml4 << " = " << quantity<thou_length>(iml4) << std::endl
395                   << iml5 << " = " << quantity<thou_length>(iml5) << std::endl
396                   << iml6 << " = " << quantity<thou_length>(iml6) << std::endl
397                   << iml7 << " = " << quantity<thou_length>(iml7) << std::endl
398                   << std::endl;
399
400         std::cout << iml1 << " = " << quantity<inch_length>(iml1) << std::endl
401                   << iml2 << " = " << quantity<inch_length>(iml2) << std::endl
402                   << iml3 << " = " << quantity<inch_length>(iml3) << std::endl
403                   << iml4 << " = " << quantity<inch_length>(iml4) << std::endl
404                   << iml5 << " = " << quantity<inch_length>(iml5) << std::endl
405                   << iml6 << " = " << quantity<inch_length>(iml6) << std::endl
406                   << iml7 << " = " << quantity<inch_length>(iml7) << std::endl
407                   << std::endl;
408
409         std::cout << iml1 << " = " << quantity<foot_length>(iml1) << std::endl
410                   << iml2 << " = " << quantity<foot_length>(iml2) << std::endl
411                   << iml3 << " = " << quantity<foot_length>(iml3) << std::endl
412                   << iml4 << " = " << quantity<foot_length>(iml4) << std::endl
413                   << iml5 << " = " << quantity<foot_length>(iml5) << std::endl
414                   << iml6 << " = " << quantity<foot_length>(iml6) << std::endl
415                   << iml7 << " = " << quantity<foot_length>(iml7) << std::endl
416                   << std::endl;
417
418         std::cout << iml1 << " = " << quantity<yard_length>(iml1) << std::endl
419                   << iml2 << " = " << quantity<yard_length>(iml2) << std::endl
420                   << iml3 << " = " << quantity<yard_length>(iml3) << std::endl
421                   << iml4 << " = " << quantity<yard_length>(iml4) << std::endl
422                   << iml5 << " = " << quantity<yard_length>(iml5) << std::endl
423                   << iml6 << " = " << quantity<yard_length>(iml6) << std::endl
424                   << iml7 << " = " << quantity<yard_length>(iml7) << std::endl
425                   << std::endl;
426
427         std::cout << iml1 << " = " << quantity<furlong_length>(iml1) << std::endl
428                   << iml2 << " = " << quantity<furlong_length>(iml2) << std::endl
429                   << iml3 << " = " << quantity<furlong_length>(iml3) << std::endl
430                   << iml4 << " = " << quantity<furlong_length>(iml4) << std::endl
431                   << iml5 << " = " << quantity<furlong_length>(iml5) << std::endl
432                   << iml6 << " = " << quantity<furlong_length>(iml6) << std::endl
433                   << iml7 << " = " << quantity<furlong_length>(iml7) << std::endl
434                   << std::endl;
435
436         std::cout << iml1 << " = " << quantity<mile_length>(iml1) << std::endl
437                   << iml2 << " = " << quantity<mile_length>(iml2) << std::endl
438                   << iml3 << " = " << quantity<mile_length>(iml3) << std::endl
439                   << iml4 << " = " << quantity<mile_length>(iml4) << std::endl
440                   << iml5 << " = " << quantity<mile_length>(iml5) << std::endl
441                   << iml6 << " = " << quantity<mile_length>(iml6) << std::endl
442                   << iml7 << " = " << quantity<mile_length>(iml7) << std::endl
443                   << std::endl;
444
445         std::cout << iml1 << " = " << quantity<league_length>(iml1) << std::endl
446                   << iml2 << " = " << quantity<league_length>(iml2) << std::endl
447                   << iml3 << " = " << quantity<league_length>(iml3) << std::endl
448                   << iml4 << " = " << quantity<league_length>(iml4) << std::endl
449                   << iml5 << " = " << quantity<league_length>(iml5) << std::endl
450                   << iml6 << " = " << quantity<league_length>(iml6) << std::endl
451                   << iml7 << " = " << quantity<league_length>(iml7) << std::endl
452                   << std::endl;
453                   
454         quantity<grain_mass>            imm1(1.0*grains);
455         quantity<drachm_mass>            imm2(1.0*drachms);
456         quantity<ounce_mass>            imm3(1.0*ounces);
457         quantity<pound_mass>            imm4(1.0*pounds);
458         quantity<stone_mass>            imm5(1.0*stones);
459         quantity<quarter_mass>            imm6(1.0*quarters);
460         quantity<hundredweight_mass>    imm7(1.0*hundredweights);
461         quantity<ton_mass>                imm8(1.0*tons);
462
463         std::cout << imm1 << " = " << quantity<si::mass>(imm1) << std::endl
464                   << imm2 << " = " << quantity<si::mass>(imm2) << std::endl
465                   << imm3 << " = " << quantity<si::mass>(imm3) << std::endl
466                   << imm4 << " = " << quantity<si::mass>(imm4) << std::endl
467                   << imm5 << " = " << quantity<si::mass>(imm5) << std::endl
468                   << imm6 << " = " << quantity<si::mass>(imm6) << std::endl
469                   << imm7 << " = " << quantity<si::mass>(imm7) << std::endl
470                   << imm8 << " = " << quantity<si::mass>(imm8) << std::endl
471                   << std::endl;
472                   
473         std::cout << imm8 << "/" << imm1 << " = " << quantity<si::dimensionless>(imm8/imm1) << std::endl
474                   << imm8 << "/" << imm2 << " = " << quantity<si::dimensionless>(imm8/imm2) << std::endl
475                   << imm8 << "/" << imm3 << " = " << quantity<si::dimensionless>(imm8/imm3) << std::endl
476                   << imm8 << "/" << imm4 << " = " << quantity<si::dimensionless>(imm8/imm4) << std::endl
477                   << imm8 << "/" << imm5 << " = " << quantity<si::dimensionless>(imm8/imm5) << std::endl
478                   << imm8 << "/" << imm6 << " = " << quantity<si::dimensionless>(imm8/imm6) << std::endl
479                   << imm8 << "/" << imm7 << " = " << quantity<si::dimensionless>(imm8/imm7) << std::endl
480                   << std::endl;
481
482         std::cout << imm1 << " = " << quantity<grain_mass>(imm1) << std::endl
483                   << imm2 << " = " << quantity<grain_mass>(imm2) << std::endl
484                   << imm3 << " = " << quantity<grain_mass>(imm3) << std::endl
485                   << imm4 << " = " << quantity<grain_mass>(imm4) << std::endl
486                   << imm5 << " = " << quantity<grain_mass>(imm5) << std::endl
487                   << imm6 << " = " << quantity<grain_mass>(imm6) << std::endl
488                   << imm7 << " = " << quantity<grain_mass>(imm7) << std::endl
489                   << imm8 << " = " << quantity<grain_mass>(imm8) << std::endl
490                   << std::endl;
491                   
492         std::cout << imm1 << " = " << quantity<drachm_mass>(imm1) << std::endl
493                   << imm2 << " = " << quantity<drachm_mass>(imm2) << std::endl
494                   << imm3 << " = " << quantity<drachm_mass>(imm3) << std::endl
495                   << imm4 << " = " << quantity<drachm_mass>(imm4) << std::endl
496                   << imm5 << " = " << quantity<drachm_mass>(imm5) << std::endl
497                   << imm6 << " = " << quantity<drachm_mass>(imm6) << std::endl
498                   << imm7 << " = " << quantity<drachm_mass>(imm7) << std::endl
499                   << imm8 << " = " << quantity<drachm_mass>(imm8) << std::endl
500                   << std::endl;
501                   
502         std::cout << imm1 << " = " << quantity<ounce_mass>(imm1) << std::endl
503                   << imm2 << " = " << quantity<ounce_mass>(imm2) << std::endl
504                   << imm3 << " = " << quantity<ounce_mass>(imm3) << std::endl
505                   << imm4 << " = " << quantity<ounce_mass>(imm4) << std::endl
506                   << imm5 << " = " << quantity<ounce_mass>(imm5) << std::endl
507                   << imm6 << " = " << quantity<ounce_mass>(imm6) << std::endl
508                   << imm7 << " = " << quantity<ounce_mass>(imm7) << std::endl
509                   << imm8 << " = " << quantity<ounce_mass>(imm8) << std::endl
510                   << std::endl;
511                   
512         std::cout << imm1 << " = " << quantity<pound_mass>(imm1) << std::endl
513                   << imm2 << " = " << quantity<pound_mass>(imm2) << std::endl
514                   << imm3 << " = " << quantity<pound_mass>(imm3) << std::endl
515                   << imm4 << " = " << quantity<pound_mass>(imm4) << std::endl
516                   << imm5 << " = " << quantity<pound_mass>(imm5) << std::endl
517                   << imm6 << " = " << quantity<pound_mass>(imm6) << std::endl
518                   << imm7 << " = " << quantity<pound_mass>(imm7) << std::endl
519                   << imm8 << " = " << quantity<pound_mass>(imm8) << std::endl
520                   << std::endl;
521                   
522         std::cout << imm1 << " = " << quantity<stone_mass>(imm1) << std::endl
523                   << imm2 << " = " << quantity<stone_mass>(imm2) << std::endl
524                   << imm3 << " = " << quantity<stone_mass>(imm3) << std::endl
525                   << imm4 << " = " << quantity<stone_mass>(imm4) << std::endl
526                   << imm5 << " = " << quantity<stone_mass>(imm5) << std::endl
527                   << imm6 << " = " << quantity<stone_mass>(imm6) << std::endl
528                   << imm7 << " = " << quantity<stone_mass>(imm7) << std::endl
529                   << imm8 << " = " << quantity<stone_mass>(imm8) << std::endl
530                   << std::endl;
531                   
532         std::cout << imm1 << " = " << quantity<quarter_mass>(imm1) << std::endl
533                   << imm2 << " = " << quantity<quarter_mass>(imm2) << std::endl
534                   << imm3 << " = " << quantity<quarter_mass>(imm3) << std::endl
535                   << imm4 << " = " << quantity<quarter_mass>(imm4) << std::endl
536                   << imm5 << " = " << quantity<quarter_mass>(imm5) << std::endl
537                   << imm6 << " = " << quantity<quarter_mass>(imm6) << std::endl
538                   << imm7 << " = " << quantity<quarter_mass>(imm7) << std::endl
539                   << imm8 << " = " << quantity<quarter_mass>(imm8) << std::endl
540                   << std::endl;
541                   
542         std::cout << imm1 << " = " << quantity<hundredweight_mass>(imm1) << std::endl
543                   << imm2 << " = " << quantity<hundredweight_mass>(imm2) << std::endl
544                   << imm3 << " = " << quantity<hundredweight_mass>(imm3) << std::endl
545                   << imm4 << " = " << quantity<hundredweight_mass>(imm4) << std::endl
546                   << imm5 << " = " << quantity<hundredweight_mass>(imm5) << std::endl
547                   << imm6 << " = " << quantity<hundredweight_mass>(imm6) << std::endl
548                   << imm7 << " = " << quantity<hundredweight_mass>(imm7) << std::endl
549                   << imm8 << " = " << quantity<hundredweight_mass>(imm8) << std::endl
550                   << std::endl;
551                   
552         std::cout << imm1 << " = " << quantity<ton_mass>(imm1) << std::endl
553                   << imm2 << " = " << quantity<ton_mass>(imm2) << std::endl
554                   << imm3 << " = " << quantity<ton_mass>(imm3) << std::endl
555                   << imm4 << " = " << quantity<ton_mass>(imm4) << std::endl
556                   << imm5 << " = " << quantity<ton_mass>(imm5) << std::endl
557                   << imm6 << " = " << quantity<ton_mass>(imm6) << std::endl
558                   << imm7 << " = " << quantity<ton_mass>(imm7) << std::endl
559                   << imm8 << " = " << quantity<ton_mass>(imm8) << std::endl
560                   << std::endl;
561                   
562         quantity<fluid_ounce_volume>    imv1(1.0*fluid_ounces);
563         quantity<gill_volume>            imv2(1.0*gills);
564         quantity<pint_volume>            imv3(1.0*pints);
565         quantity<quart_volume>            imv4(1.0*quarts);
566         quantity<gallon_volume>            imv5(1.0*gallons);
567         
568         std::cout << imv1 << " = " << quantity<si::volume>(imv1) << std::endl
569                   << imv2 << " = " << quantity<si::volume>(imv2) << std::endl
570                   << imv3 << " = " << quantity<si::volume>(imv3) << std::endl
571                   << imv4 << " = " << quantity<si::volume>(imv4) << std::endl
572                   << imv5 << " = " << quantity<si::volume>(imv5) << std::endl
573                   << std::endl;
574                   
575         std::cout << imv5 << "/" << imv1 << " = " << quantity<si::dimensionless>(imv5/imv1) << std::endl
576                   << imv5 << "/" << imv2 << " = " << quantity<si::dimensionless>(imv5/imv2) << std::endl
577                   << imv5 << "/" << imv3 << " = " << quantity<si::dimensionless>(imv5/imv3) << std::endl
578                   << imv5 << "/" << imv4 << " = " << quantity<si::dimensionless>(imv5/imv4) << std::endl
579                   << std::endl;
580
581         std::cout << imv1 << " = " << quantity<fluid_ounce_volume>(imv1) << std::endl
582                   << imv2 << " = " << quantity<fluid_ounce_volume>(imv2) << std::endl
583                   << imv3 << " = " << quantity<fluid_ounce_volume>(imv3) << std::endl
584                   << imv4 << " = " << quantity<fluid_ounce_volume>(imv4) << std::endl
585                   << imv5 << " = " << quantity<fluid_ounce_volume>(imv5) << std::endl
586                   << std::endl;
587                   
588         std::cout << imv1 << " = " << quantity<gill_volume>(imv1) << std::endl
589                   << imv2 << " = " << quantity<gill_volume>(imv2) << std::endl
590                   << imv3 << " = " << quantity<gill_volume>(imv3) << std::endl
591                   << imv4 << " = " << quantity<gill_volume>(imv4) << std::endl
592                   << imv5 << " = " << quantity<gill_volume>(imv5) << std::endl
593                   << std::endl;
594                   
595         std::cout << imv1 << " = " << quantity<pint_volume>(imv1) << std::endl
596                   << imv2 << " = " << quantity<pint_volume>(imv2) << std::endl
597                   << imv3 << " = " << quantity<pint_volume>(imv3) << std::endl
598                   << imv4 << " = " << quantity<pint_volume>(imv4) << std::endl
599                   << imv5 << " = " << quantity<pint_volume>(imv5) << std::endl
600                   << std::endl;
601                   
602         std::cout << imv1 << " = " << quantity<quart_volume>(imv1) << std::endl
603                   << imv2 << " = " << quantity<quart_volume>(imv2) << std::endl
604                   << imv3 << " = " << quantity<quart_volume>(imv3) << std::endl
605                   << imv4 << " = " << quantity<quart_volume>(imv4) << std::endl
606                   << imv5 << " = " << quantity<quart_volume>(imv5) << std::endl
607                   << std::endl;
608                   
609         std::cout << imv1 << " = " << quantity<gallon_volume>(imv1) << std::endl
610                   << imv2 << " = " << quantity<gallon_volume>(imv2) << std::endl
611                   << imv3 << " = " << quantity<gallon_volume>(imv3) << std::endl
612                   << imv4 << " = " << quantity<gallon_volume>(imv4) << std::endl
613                   << imv5 << " = " << quantity<gallon_volume>(imv5) << std::endl
614                   << std::endl;
615     }
616     
617     {
618         using namespace boost::units::metric;
619         
620         std::cout << "Testing metric base units..." << std::endl;
621         
622         quantity<fermi_length>            ml1(1.0*fermis);
623         quantity<angstrom_length>        ml2(1.0*angstroms);
624         quantity<micron_length>            ml3(1.0*microns);
625         quantity<nautical_mile_length>    ml4(1.0*nautical_miles);
626     
627         std::cout << ml1 << " = " << quantity<si::length>(ml1) << std::endl
628                   << ml2 << " = " << quantity<si::length>(ml2) << std::endl
629                   << ml3 << " = " << quantity<si::length>(ml3) << std::endl
630                   << ml4 << " = " << quantity<si::length>(ml4) << std::endl
631                   << std::endl;
632
633         std::cout << ml4 << "/" << ml1 << " = " << quantity<si::dimensionless>(ml4/ml1) << std::endl
634                   << ml4 << "/" << ml2 << " = " << quantity<si::dimensionless>(ml4/ml2) << std::endl
635                   << ml4 << "/" << ml3 << " = " << quantity<si::dimensionless>(ml4/ml3) << std::endl
636                   << std::endl;
637
638         std::cout << ml1 << " = " << quantity<fermi_length>(ml1) << std::endl
639                   << ml2 << " = " << quantity<fermi_length>(ml2) << std::endl
640                   << ml3 << " = " << quantity<fermi_length>(ml3) << std::endl
641                   << ml4 << " = " << quantity<fermi_length>(ml4) << std::endl
642                   << std::endl;
643
644         std::cout << ml1 << " = " << quantity<angstrom_length>(ml1) << std::endl
645                   << ml2 << " = " << quantity<angstrom_length>(ml2) << std::endl
646                   << ml3 << " = " << quantity<angstrom_length>(ml3) << std::endl
647                   << ml4 << " = " << quantity<angstrom_length>(ml4) << std::endl
648                   << std::endl;
649
650         std::cout << ml1 << " = " << quantity<micron_length>(ml1) << std::endl
651                   << ml2 << " = " << quantity<micron_length>(ml2) << std::endl
652                   << ml3 << " = " << quantity<micron_length>(ml3) << std::endl
653                   << ml4 << " = " << quantity<micron_length>(ml4) << std::endl
654                   << std::endl;
655
656         std::cout << ml1 << " = " << quantity<nautical_mile_length>(ml1) << std::endl
657                   << ml2 << " = " << quantity<nautical_mile_length>(ml2) << std::endl
658                   << ml3 << " = " << quantity<nautical_mile_length>(ml3) << std::endl
659                   << ml4 << " = " << quantity<nautical_mile_length>(ml4) << std::endl
660                   << std::endl;
661
662         quantity<ton_mass>    mm1(1.0*tons);
663         
664         std::cout << mm1 << " = " << quantity<cgs::mass>(mm1) << std::endl
665                   //<< quantity<si::mass>(mm1) << std::endl    // this should work... 
666                   << std::endl;
667                   
668         quantity<minute_time>    mt1(1.0*minutes);
669         quantity<hour_time>        mt2(1.0*hours);
670         quantity<day_time>        mt3(1.0*days);
671         quantity<year_time>        mt4(1.0*years);
672         
673         std::cout << mt1 << " = " << quantity<si::time>(mt1) << std::endl
674                   << mt2 << " = " << quantity<si::time>(mt2) << std::endl
675                   << mt3 << " = " << quantity<si::time>(mt3) << std::endl
676                   << mt4 << " = " << quantity<si::time>(mt4) << std::endl
677                   << std::endl;
678
679         std::cout << mt4 << "/" << mt1 << " = " << quantity<si::dimensionless>(mt4/mt1) << std::endl
680                   << mt4 << "/" << mt2 << " = " << quantity<si::dimensionless>(mt4/mt2) << std::endl
681                   << mt4 << "/" << mt3 << " = " << quantity<si::dimensionless>(mt4/mt3) << std::endl
682                   << std::endl;
683
684         std::cout << mt1 << " = " << quantity<minute_time>(mt1) << std::endl
685                   << mt2 << " = " << quantity<minute_time>(mt2) << std::endl
686                   << mt3 << " = " << quantity<minute_time>(mt3) << std::endl
687                   << mt4 << " = " << quantity<minute_time>(mt4) << std::endl
688                   << std::endl;
689
690         std::cout << mt1 << " = " << quantity<hour_time>(mt1) << std::endl
691                   << mt2 << " = " << quantity<hour_time>(mt2) << std::endl
692                   << mt3 << " = " << quantity<hour_time>(mt3) << std::endl
693                   << mt4 << " = " << quantity<hour_time>(mt4) << std::endl
694                   << std::endl;
695
696         std::cout << mt1 << " = " << quantity<day_time>(mt1) << std::endl
697                   << mt2 << " = " << quantity<day_time>(mt2) << std::endl
698                   << mt3 << " = " << quantity<day_time>(mt3) << std::endl
699                   << mt4 << " = " << quantity<day_time>(mt4) << std::endl
700                   << std::endl;
701
702         std::cout << mt1 << " = " << quantity<year_time>(mt1) << std::endl
703                   << mt2 << " = " << quantity<year_time>(mt2) << std::endl
704                   << mt3 << " = " << quantity<year_time>(mt3) << std::endl
705                   << mt4 << " = " << quantity<year_time>(mt4) << std::endl
706                   << std::endl;
707                           
708         quantity<knot_velocity>    ms1(1.0*knots);
709         
710         std::cout << ms1 << " = " << quantity<si::velocity>(ms1) << std::endl
711                   << std::endl;
712                   
713         quantity<barn_area>        ma1(1.0*barns);
714         quantity<are_area>        ma2(1.0*ares);
715         quantity<hectare_area>    ma3(1.0*hectares);
716         
717         std::cout << ma1 << " = " << quantity<si::area>(ma1) << std::endl
718                   << ma2 << " = " << quantity<si::area>(ma2) << std::endl
719                   << ma3 << " = " << quantity<si::area>(ma3) << std::endl
720                   << std::endl;
721
722         std::cout << ma3 << "/" << ma1 << " = " << quantity<si::dimensionless>(ma3/ma1) << std::endl
723                   << ma3 << "/" << ma2 << " = " << quantity<si::dimensionless>(ma3/ma2) << std::endl
724                   << std::endl;
725
726         std::cout << ma1 << " = " << quantity<barn_area>(ma1) << std::endl
727                   << ma2 << " = " << quantity<barn_area>(ma2) << std::endl
728                   << ma3 << " = " << quantity<barn_area>(ma3) << std::endl
729                   << std::endl;
730
731         std::cout << ma1 << " = " << quantity<are_area>(ma1) << std::endl
732                   << ma2 << " = " << quantity<are_area>(ma2) << std::endl
733                   << ma3 << " = " << quantity<are_area>(ma3) << std::endl
734                   << std::endl;
735
736         std::cout << ma1 << " = " << quantity<hectare_area>(ma1) << std::endl
737                   << ma2 << " = " << quantity<hectare_area>(ma2) << std::endl
738                   << ma3 << " = " << quantity<hectare_area>(ma3) << std::endl
739                   << std::endl;
740         
741         quantity<liter_volume>    mv1(1.0*liters);
742         
743         std::cout << mv1 << " = " << quantity<si::volume>(mv1) << std::endl
744                   << std::endl;
745         
746         quantity<mmHg_pressure>            mp1(1.0*mmHgs);
747         quantity<torr_pressure>            mp2(1.0*torrs);
748         quantity<bar_pressure>            mp3(1.0*bars);
749         quantity<atmosphere_pressure>    mp4(1.0*atmospheres);
750         
751         std::cout << mp1 << " = " << quantity<si::pressure>(mp1) << std::endl
752                   << mp2 << " = " << quantity<si::pressure>(mp2) << std::endl
753                   << mp3 << " = " << quantity<si::pressure>(mp3) << std::endl
754                   << mp4 << " = " << quantity<si::pressure>(mp4) << std::endl
755                   << std::endl;
756
757         std::cout << mp4 << "/" << mp1 << " = " << quantity<si::dimensionless>(mp4/mp1) << std::endl
758                   << mp4 << "/" << mp2  << " = " << quantity<si::dimensionless>(mp4/mp2) << std::endl
759                   << mp4 << "/" << mp3  << " = " << quantity<si::dimensionless>(mp4/mp3) << std::endl
760                   << std::endl;
761
762         std::cout << mp1 << " = " << quantity<mmHg_pressure>(mp1) << std::endl
763                   << mp2 << " = " << quantity<mmHg_pressure>(mp2) << std::endl
764                   << mp3 << " = " << quantity<mmHg_pressure>(mp3) << std::endl
765                   << mp4 << " = " << quantity<mmHg_pressure>(mp4) << std::endl
766                   << std::endl;
767
768         std::cout << mp1 << " = " << quantity<torr_pressure>(mp1) << std::endl
769                   << mp2 << " = " << quantity<torr_pressure>(mp2) << std::endl
770                   << mp3 << " = " << quantity<torr_pressure>(mp3) << std::endl
771                   << mp4 << " = " << quantity<torr_pressure>(mp4) << std::endl
772                   << std::endl;
773
774         std::cout << mp1 << " = " << quantity<bar_pressure>(mp1) << std::endl
775                   << mp2 << " = " << quantity<bar_pressure>(mp2) << std::endl
776                   << mp3 << " = " << quantity<bar_pressure>(mp3) << std::endl
777                   << mp4 << " = " << quantity<bar_pressure>(mp4) << std::endl
778                   << std::endl;
779
780         std::cout << mp1 << " = " << quantity<atmosphere_pressure>(mp1) << std::endl
781                   << mp2 << " = " << quantity<atmosphere_pressure>(mp2) << std::endl
782                   << mp3 << " = " << quantity<atmosphere_pressure>(mp3) << std::endl
783                   << mp4 << " = " << quantity<atmosphere_pressure>(mp4) << std::endl
784                   << std::endl;
785     }
786     
787     {
788         using namespace boost::units::us;
789         
790         std::cout << "Testing U.S. customary base units..." << std::endl;
791         
792         quantity<mil_length>            iml1(1.0*mils);
793         quantity<inch_length>            iml2(1.0*inchs);
794         quantity<foot_length>            iml3(1.0*foots);
795         quantity<yard_length>            iml4(1.0*yards);
796         quantity<mile_length>            iml5(1.0*miles);
797         
798         std::cout << iml1 << " = " << quantity<si::length>(iml1) << std::endl
799                   << iml2 << " = " << quantity<si::length>(iml2) << std::endl
800                   << iml3 << " = " << quantity<si::length>(iml3) << std::endl
801                   << iml4 << " = " << quantity<si::length>(iml4) << std::endl
802                   << iml5 << " = " << quantity<si::length>(iml5) << std::endl
803                   << std::endl;
804
805         std::cout << iml5 << "/" << iml1 << " = " << quantity<si::dimensionless>(iml5/iml1) << std::endl
806                   << iml5 << "/" << iml2 << " = " << quantity<si::dimensionless>(iml5/iml2) << std::endl
807                   << iml5 << "/" << iml3 << " = " << quantity<si::dimensionless>(iml5/iml3) << std::endl
808                   << iml5 << "/" << iml4 << " = " << quantity<si::dimensionless>(iml5/iml4) << std::endl
809                   << std::endl;
810
811         std::cout << iml1 << " = " << quantity<mil_length>(iml1) << std::endl
812                   << iml2 << " = " << quantity<mil_length>(iml2) << std::endl
813                   << iml3 << " = " << quantity<mil_length>(iml3) << std::endl
814                   << iml4 << " = " << quantity<mil_length>(iml4) << std::endl
815                   << iml5 << " = " << quantity<mil_length>(iml5) << std::endl
816                   << std::endl;
817
818         std::cout << iml1 << " = " << quantity<inch_length>(iml1) << std::endl
819                   << iml2 << " = " << quantity<inch_length>(iml2) << std::endl
820                   << iml3 << " = " << quantity<inch_length>(iml3) << std::endl
821                   << iml4 << " = " << quantity<inch_length>(iml4) << std::endl
822                   << iml5 << " = " << quantity<inch_length>(iml5) << std::endl
823                   << std::endl;
824
825         std::cout << iml1 << " = " << quantity<foot_length>(iml1) << std::endl
826                   << iml2 << " = " << quantity<foot_length>(iml2) << std::endl
827                   << iml3 << " = " << quantity<foot_length>(iml3) << std::endl
828                   << iml4 << " = " << quantity<foot_length>(iml4) << std::endl
829                   << iml5 << " = " << quantity<foot_length>(iml5) << std::endl
830                   << std::endl;
831
832         std::cout << iml1 << " = " << quantity<yard_length>(iml1) << std::endl
833                   << iml2 << " = " << quantity<yard_length>(iml2) << std::endl
834                   << iml3 << " = " << quantity<yard_length>(iml3) << std::endl
835                   << iml4 << " = " << quantity<yard_length>(iml4) << std::endl
836                   << iml5 << " = " << quantity<yard_length>(iml5) << std::endl
837                   << std::endl;
838
839         std::cout << iml1 << " = " << quantity<mile_length>(iml1) << std::endl
840                   << iml2 << " = " << quantity<mile_length>(iml2) << std::endl
841                   << iml3 << " = " << quantity<mile_length>(iml3) << std::endl
842                   << iml4 << " = " << quantity<mile_length>(iml4) << std::endl
843                   << iml5 << " = " << quantity<mile_length>(iml5) << std::endl
844                   << std::endl;
845
846         quantity<grain_mass>            imm1(1.0*grains);
847         quantity<dram_mass>                imm2(1.0*drams);
848         quantity<ounce_mass>            imm3(1.0*ounces);
849         quantity<pound_mass>            imm4(1.0*pounds);
850         quantity<hundredweight_mass>    imm5(1.0*hundredweights);
851         quantity<ton_mass>                imm6(1.0*tons);
852
853         std::cout << imm1 << " = " << quantity<si::mass>(imm1) << std::endl
854                   << imm2 << " = " << quantity<si::mass>(imm2) << std::endl
855                   << imm3 << " = " << quantity<si::mass>(imm3) << std::endl
856                   << imm4 << " = " << quantity<si::mass>(imm4) << std::endl
857                   << imm5 << " = " << quantity<si::mass>(imm5) << std::endl
858                   << imm6 << " = " << quantity<si::mass>(imm6) << std::endl
859                   << std::endl;
860                   
861         std::cout << imm6 << "/" << imm1 << " = " << quantity<si::dimensionless>(imm6/imm1) << std::endl
862                   << imm6 << "/" << imm2 << " = " << quantity<si::dimensionless>(imm6/imm2) << std::endl
863                   << imm6 << "/" << imm3 << " = " << quantity<si::dimensionless>(imm6/imm3) << std::endl
864                   << imm6 << "/" << imm4 << " = " << quantity<si::dimensionless>(imm6/imm4) << std::endl
865                   << imm6 << "/" << imm5 << " = " << quantity<si::dimensionless>(imm6/imm5) << std::endl
866                   << std::endl;
867
868         std::cout << imm1 << " = " << quantity<grain_mass>(imm1) << std::endl
869                   << imm2 << " = " << quantity<grain_mass>(imm2) << std::endl
870                   << imm3 << " = " << quantity<grain_mass>(imm3) << std::endl
871                   << imm4 << " = " << quantity<grain_mass>(imm4) << std::endl
872                   << imm5 << " = " << quantity<grain_mass>(imm5) << std::endl
873                   << imm6 << " = " << quantity<grain_mass>(imm6) << std::endl
874                   << std::endl;
875                   
876         std::cout << imm1 << " = " << quantity<dram_mass>(imm1) << std::endl
877                   << imm2 << " = " << quantity<dram_mass>(imm2) << std::endl
878                   << imm3 << " = " << quantity<dram_mass>(imm3) << std::endl
879                   << imm4 << " = " << quantity<dram_mass>(imm4) << std::endl
880                   << imm5 << " = " << quantity<dram_mass>(imm5) << std::endl
881                   << imm6 << " = " << quantity<dram_mass>(imm6) << std::endl
882                   << std::endl;
883                   
884         std::cout << imm1 << " = " << quantity<ounce_mass>(imm1) << std::endl
885                   << imm2 << " = " << quantity<ounce_mass>(imm2) << std::endl
886                   << imm3 << " = " << quantity<ounce_mass>(imm3) << std::endl
887                   << imm4 << " = " << quantity<ounce_mass>(imm4) << std::endl
888                   << imm5 << " = " << quantity<ounce_mass>(imm5) << std::endl
889                   << imm6 << " = " << quantity<ounce_mass>(imm6) << std::endl
890                   << std::endl;
891                   
892         std::cout << imm1 << " = " << quantity<pound_mass>(imm1) << std::endl
893                   << imm2 << " = " << quantity<pound_mass>(imm2) << std::endl
894                   << imm3 << " = " << quantity<pound_mass>(imm3) << std::endl
895                   << imm4 << " = " << quantity<pound_mass>(imm4) << std::endl
896                   << imm5 << " = " << quantity<pound_mass>(imm5) << std::endl
897                   << imm6 << " = " << quantity<pound_mass>(imm6) << std::endl
898                   << std::endl;
899                   
900         std::cout << imm1 << " = " << quantity<hundredweight_mass>(imm1) << std::endl
901                   << imm2 << " = " << quantity<hundredweight_mass>(imm2) << std::endl
902                   << imm3 << " = " << quantity<hundredweight_mass>(imm3) << std::endl
903                   << imm4 << " = " << quantity<hundredweight_mass>(imm4) << std::endl
904                   << imm5 << " = " << quantity<hundredweight_mass>(imm5) << std::endl
905                   << imm6 << " = " << quantity<hundredweight_mass>(imm6) << std::endl
906                   << std::endl;
907                   
908         std::cout << imm1 << " = " << quantity<ton_mass>(imm1) << std::endl
909                   << imm2 << " = " << quantity<ton_mass>(imm2) << std::endl
910                   << imm3 << " = " << quantity<ton_mass>(imm3) << std::endl
911                   << imm4 << " = " << quantity<ton_mass>(imm4) << std::endl
912                   << imm5 << " = " << quantity<ton_mass>(imm5) << std::endl
913                   << imm6 << " = " << quantity<ton_mass>(imm6) << std::endl
914                   << std::endl;
915                   
916         quantity<minim_volume>            imv1(1.0*minims);
917         quantity<fluid_dram_volume>        imv2(1.0*fluid_drams);
918         quantity<teaspoon_volume>        imv3(1.0*teaspoons);
919         quantity<tablespoon_volume>        imv4(1.0*tablespoons);
920         quantity<fluid_ounce_volume>    imv5(1.0*fluid_ounces);
921         quantity<gill_volume>            imv6(1.0*gills);
922         quantity<cup_volume>            imv7(1.0*cups);
923         quantity<pint_volume>            imv8(1.0*pints);
924         quantity<quart_volume>            imv9(1.0*quarts);
925         quantity<gallon_volume>            imv10(1.0*gallons);
926         
927         std::cout << imv1 << " = " << quantity<si::volume>(imv1) << std::endl
928                   << imv2 << " = " << quantity<si::volume>(imv2) << std::endl
929                   << imv3 << " = " << quantity<si::volume>(imv3) << std::endl
930                   << imv4 << " = " << quantity<si::volume>(imv4) << std::endl
931                   << imv5 << " = " << quantity<si::volume>(imv5) << std::endl
932                   << imv6 << " = " << quantity<si::volume>(imv6) << std::endl
933                   << imv7 << " = " << quantity<si::volume>(imv7) << std::endl
934                   << imv8 << " = " << quantity<si::volume>(imv8) << std::endl
935                   << imv9 << " = " << quantity<si::volume>(imv9) << std::endl
936                   << imv10 << " = " << quantity<si::volume>(imv10) << std::endl
937                   << std::endl;
938
939         std::cout << imv10 << "/" << imv1 << " = " << quantity<si::dimensionless>(imv10/imv1) << std::endl
940                   << imv10 << "/" << imv2 << " = " << quantity<si::dimensionless>(imv10/imv2) << std::endl
941                   << imv10 << "/" << imv3 << " = " << quantity<si::dimensionless>(imv10/imv3) << std::endl
942                   << imv10 << "/" << imv4 << " = " << quantity<si::dimensionless>(imv10/imv4) << std::endl
943                   << imv10 << "/" << imv5 << " = " << quantity<si::dimensionless>(imv10/imv5) << std::endl
944                   << imv10 << "/" << imv6 << " = " << quantity<si::dimensionless>(imv10/imv6) << std::endl
945                   << imv10 << "/" << imv7 << " = " << quantity<si::dimensionless>(imv10/imv7) << std::endl
946                   << imv10 << "/" << imv8 << " = " << quantity<si::dimensionless>(imv10/imv8) << std::endl
947                   << imv10 << "/" << imv9 << " = " << quantity<si::dimensionless>(imv10/imv9) << std::endl
948                   << std::endl;
949
950         std::cout << imv1 << " = " << quantity<minim_volume>(imv1) << std::endl
951                   << imv2 << " = " << quantity<minim_volume>(imv2) << std::endl
952                   << imv3 << " = " << quantity<minim_volume>(imv3) << std::endl
953                   << imv4 << " = " << quantity<minim_volume>(imv4) << std::endl
954                   << imv5 << " = " << quantity<minim_volume>(imv5) << std::endl
955                   << imv6 << " = " << quantity<minim_volume>(imv6) << std::endl
956                   << imv7 << " = " << quantity<minim_volume>(imv7) << std::endl
957                   << imv8 << " = " << quantity<minim_volume>(imv8) << std::endl
958                   << imv9 << " = " << quantity<minim_volume>(imv9) << std::endl
959                   << imv10 << " = " << quantity<minim_volume>(imv10) << std::endl
960                   << std::endl;
961
962         std::cout << imv1 << " = " << quantity<fluid_dram_volume>(imv1) << std::endl
963                   << imv2 << " = " << quantity<fluid_dram_volume>(imv2) << std::endl
964                   << imv3 << " = " << quantity<fluid_dram_volume>(imv3) << std::endl
965                   << imv4 << " = " << quantity<fluid_dram_volume>(imv4) << std::endl
966                   << imv5 << " = " << quantity<fluid_dram_volume>(imv5) << std::endl
967                   << imv6 << " = " << quantity<fluid_dram_volume>(imv6) << std::endl
968                   << imv7 << " = " << quantity<fluid_dram_volume>(imv7) << std::endl
969                   << imv8 << " = " << quantity<fluid_dram_volume>(imv8) << std::endl
970                   << imv9 << " = " << quantity<fluid_dram_volume>(imv9) << std::endl
971                   << imv10 << " = " << quantity<fluid_dram_volume>(imv10) << std::endl
972                   << std::endl;
973
974         std::cout << imv1 << " = " << quantity<teaspoon_volume>(imv1) << std::endl
975                   << imv2 << " = " << quantity<teaspoon_volume>(imv2) << std::endl
976                   << imv3 << " = " << quantity<teaspoon_volume>(imv3) << std::endl
977                   << imv4 << " = " << quantity<teaspoon_volume>(imv4) << std::endl
978                   << imv5 << " = " << quantity<teaspoon_volume>(imv5) << std::endl
979                   << imv6 << " = " << quantity<teaspoon_volume>(imv6) << std::endl
980                   << imv7 << " = " << quantity<teaspoon_volume>(imv7) << std::endl
981                   << imv8 << " = " << quantity<teaspoon_volume>(imv8) << std::endl
982                   << imv9 << " = " << quantity<teaspoon_volume>(imv9) << std::endl
983                   << imv10 << " = " << quantity<teaspoon_volume>(imv10) << std::endl
984                   << std::endl;
985
986         std::cout << imv1 << " = " << quantity<tablespoon_volume>(imv1) << std::endl
987                   << imv2 << " = " << quantity<tablespoon_volume>(imv2) << std::endl
988                   << imv3 << " = " << quantity<tablespoon_volume>(imv3) << std::endl
989                   << imv4 << " = " << quantity<tablespoon_volume>(imv4) << std::endl
990                   << imv5 << " = " << quantity<tablespoon_volume>(imv5) << std::endl
991                   << imv6 << " = " << quantity<tablespoon_volume>(imv6) << std::endl
992                   << imv7 << " = " << quantity<tablespoon_volume>(imv7) << std::endl
993                   << imv8 << " = " << quantity<tablespoon_volume>(imv8) << std::endl
994                   << imv9 << " = " << quantity<tablespoon_volume>(imv9) << std::endl
995                   << imv10 << " = " << quantity<tablespoon_volume>(imv10) << std::endl
996                   << std::endl;
997
998         std::cout << imv1 << " = " << quantity<fluid_ounce_volume>(imv1) << std::endl
999                   << imv2 << " = " << quantity<fluid_ounce_volume>(imv2) << std::endl
1000                   << imv3 << " = " << quantity<fluid_ounce_volume>(imv3) << std::endl
1001                   << imv4 << " = " << quantity<fluid_ounce_volume>(imv4) << std::endl
1002                   << imv5 << " = " << quantity<fluid_ounce_volume>(imv5) << std::endl
1003                   << imv6 << " = " << quantity<fluid_ounce_volume>(imv6) << std::endl
1004                   << imv7 << " = " << quantity<fluid_ounce_volume>(imv7) << std::endl
1005                   << imv8 << " = " << quantity<fluid_ounce_volume>(imv8) << std::endl
1006                   << imv9 << " = " << quantity<fluid_ounce_volume>(imv9) << std::endl
1007                   << imv10 << " = " << quantity<fluid_ounce_volume>(imv10) << std::endl
1008                   << std::endl;
1009
1010         std::cout << imv1 << " = " << quantity<gill_volume>(imv1) << std::endl
1011                   << imv2 << " = " << quantity<gill_volume>(imv2) << std::endl
1012                   << imv3 << " = " << quantity<gill_volume>(imv3) << std::endl
1013                   << imv4 << " = " << quantity<gill_volume>(imv4) << std::endl
1014                   << imv5 << " = " << quantity<gill_volume>(imv5) << std::endl
1015                   << imv6 << " = " << quantity<gill_volume>(imv6) << std::endl
1016                   << imv7 << " = " << quantity<gill_volume>(imv7) << std::endl
1017                   << imv8 << " = " << quantity<gill_volume>(imv8) << std::endl
1018                   << imv9 << " = " << quantity<gill_volume>(imv9) << std::endl
1019                   << imv10 << " = " << quantity<gill_volume>(imv10) << std::endl
1020                   << std::endl;
1021
1022         std::cout << imv1 << " = " << quantity<cup_volume>(imv1) << std::endl
1023                   << imv2 << " = " << quantity<cup_volume>(imv2) << std::endl
1024                   << imv3 << " = " << quantity<cup_volume>(imv3) << std::endl
1025                   << imv4 << " = " << quantity<cup_volume>(imv4) << std::endl
1026                   << imv5 << " = " << quantity<cup_volume>(imv5) << std::endl
1027                   << imv6 << " = " << quantity<cup_volume>(imv6) << std::endl
1028                   << imv7 << " = " << quantity<cup_volume>(imv7) << std::endl
1029                   << imv8 << " = " << quantity<cup_volume>(imv8) << std::endl
1030                   << imv9 << " = " << quantity<cup_volume>(imv9) << std::endl
1031                   << imv10 << " = " << quantity<cup_volume>(imv10) << std::endl
1032                   << std::endl;
1033
1034         std::cout << imv1 << " = " << quantity<pint_volume>(imv1) << std::endl
1035                   << imv2 << " = " << quantity<pint_volume>(imv2) << std::endl
1036                   << imv3 << " = " << quantity<pint_volume>(imv3) << std::endl
1037                   << imv4 << " = " << quantity<pint_volume>(imv4) << std::endl
1038                   << imv5 << " = " << quantity<pint_volume>(imv5) << std::endl
1039                   << imv6 << " = " << quantity<pint_volume>(imv6) << std::endl
1040                   << imv7 << " = " << quantity<pint_volume>(imv7) << std::endl
1041                   << imv8 << " = " << quantity<pint_volume>(imv8) << std::endl
1042                   << imv9 << " = " << quantity<pint_volume>(imv9) << std::endl
1043                   << imv10 << " = " << quantity<pint_volume>(imv10) << std::endl
1044                   << std::endl;
1045
1046         std::cout << imv1 << " = " << quantity<quart_volume>(imv1) << std::endl
1047                   << imv2 << " = " << quantity<quart_volume>(imv2) << std::endl
1048                   << imv3 << " = " << quantity<quart_volume>(imv3) << std::endl
1049                   << imv4 << " = " << quantity<quart_volume>(imv4) << std::endl
1050                   << imv5 << " = " << quantity<quart_volume>(imv5) << std::endl
1051                   << imv6 << " = " << quantity<quart_volume>(imv6) << std::endl
1052                   << imv7 << " = " << quantity<quart_volume>(imv7) << std::endl
1053                   << imv8 << " = " << quantity<quart_volume>(imv8) << std::endl
1054                   << imv9 << " = " << quantity<quart_volume>(imv9) << std::endl
1055                   << imv10 << " = " << quantity<quart_volume>(imv10) << std::endl
1056                   << std::endl;
1057
1058         std::cout << imv1 << " = " << quantity<gallon_volume>(imv1) << std::endl
1059                   << imv2 << " = " << quantity<gallon_volume>(imv2) << std::endl
1060                   << imv3 << " = " << quantity<gallon_volume>(imv3) << std::endl
1061                   << imv4 << " = " << quantity<gallon_volume>(imv4) << std::endl
1062                   << imv5 << " = " << quantity<gallon_volume>(imv5) << std::endl
1063                   << imv6 << " = " << quantity<gallon_volume>(imv6) << std::endl
1064                   << imv7 << " = " << quantity<gallon_volume>(imv7) << std::endl
1065                   << imv8 << " = " << quantity<gallon_volume>(imv8) << std::endl
1066                   << imv9 << " = " << quantity<gallon_volume>(imv9) << std::endl
1067                   << imv10 << " = " << quantity<gallon_volume>(imv10) << std::endl
1068                   << std::endl;
1069     }
1070     
1071     return 0;
1072 }