blob: 0299dfdcf9a9d26149bff3248b690055d957e335 [file] [log] [blame]
Brian Silvermana8ce4c32018-08-04 23:57:09 -07001// 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 conversion.cpp
15
16\details
17Test explicit and implicit unit conversion.
18
19Output:
20@verbatim
21
22//[conversion_output_1
23L1 = 2 m
24L2 = 2 m
25L3 = 2 m
26L4 = 200 cm
27L5 = 5 m
28L6 = 4 m
29L7 = 200 cm
30//]
31
32//[conversion_output_2
33volume (m^3) = 1 m^3
34volume (cm^3) = 1e+06 cm^3
35volume (m^3) = 1 m^3
36
37energy (joules) = 1 J
38energy (ergs) = 1e+07 erg
39energy (joules) = 1 J
40
41velocity (2 m/s) = 2 m s^-1
42velocity (2 cm/s) = 0.02 m s^-1
43//]
44
45@endverbatim
46**/
47
48#include <iostream>
49
50#include <boost/units/io.hpp>
51#include <boost/units/pow.hpp>
52#include <boost/units/systems/cgs.hpp>
53#include <boost/units/systems/cgs/io.hpp>
54#include <boost/units/systems/si.hpp>
55#include <boost/units/systems/si/io.hpp>
56
57using namespace boost::units;
58
59int main()
60{
61 // test quantity_cast
62 {
63 // implicit value_type conversions
64 //[conversion_snippet_1
65 quantity<si::length> L1 = quantity<si::length,int>(int(2.5)*si::meters);
66 quantity<si::length,int> L2(quantity<si::length,double>(2.5*si::meters));
67 //]
68
69 //[conversion_snippet_3
70 quantity<si::length,int> L3 = static_cast<quantity<si::length,int> >(L1);
71 //]
72
73 //[conversion_snippet_4
74 quantity<cgs::length> L4 = static_cast<quantity<cgs::length> >(L1);
75 //]
76
77 quantity<si::length,int> L5(4*si::meters),
78 L6(5*si::meters);
79 quantity<cgs::length> L7(L1);
80
81 swap(L5,L6);
82
83 std::cout << "L1 = " << L1 << std::endl
84 << "L2 = " << L2 << std::endl
85 << "L3 = " << L3 << std::endl
86 << "L4 = " << L4 << std::endl
87 << "L5 = " << L5 << std::endl
88 << "L6 = " << L6 << std::endl
89 << "L7 = " << L7 << std::endl
90 << std::endl;
91 }
92
93 // test explicit unit system conversion
94 {
95 //[conversion_snippet_5
96 quantity<si::volume> vs(1.0*pow<3>(si::meter));
97 quantity<cgs::volume> vc(vs);
98 quantity<si::volume> vs2(vc);
99
100 quantity<si::energy> es(1.0*si::joule);
101 quantity<cgs::energy> ec(es);
102 quantity<si::energy> es2(ec);
103
104 quantity<si::velocity> v1 = 2.0*si::meters/si::second,
105 v2(2.0*cgs::centimeters/cgs::second);
106 //]
107
108 std::cout << "volume (m^3) = " << vs << std::endl
109 << "volume (cm^3) = " << vc << std::endl
110 << "volume (m^3) = " << vs2 << std::endl
111 << std::endl;
112
113 std::cout << "energy (joules) = " << es << std::endl
114 << "energy (ergs) = " << ec << std::endl
115 << "energy (joules) = " << es2 << std::endl
116 << std::endl;
117
118 std::cout << "velocity (2 m/s) = " << v1 << std::endl
119 << "velocity (2 cm/s) = " << v2 << std::endl
120 << std::endl;
121 }
122
123 return 0;
124}