• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // test file for quaternion.hpp
2 
3 //  (C) Copyright Hubert Holin 2001.
4 //  Distributed under the Boost Software License, Version 1.0. (See
5 //  accompanying file LICENSE_1_0.txt or copy at
6 //  http://www.boost.org/LICENSE_1_0.txt)
7 
8 
9 #include <boost/math/quaternion.hpp>
10 
11 typedef boost::math::quaternion<double> qt;
12 typedef std::complex<double> ct;
13 
14 #ifndef BOOST_NO_CXX14_CONSTEXPR
15 
full_constexpr_test(qt a,qt b,double d,ct c)16 constexpr qt full_constexpr_test(qt a, qt b, double d, ct c)
17 {
18    a.swap(b);
19    qt result(a), t;
20    result += d;
21    result += c;
22    result += b;
23    t = result;
24    t = d;
25    t = c;
26    result -= d;
27    result -= c;
28    result -= a;
29    result *= d;
30    result *= c;
31    result *= a;
32    result /= d;
33    result /= c;
34    result /= b;
35 
36    result += a + d;
37    result += d + a;
38    result += a + c;
39    result += c + a;
40    result += a + b;
41 
42    result += a - d;
43    result += d - a;
44    result += a - c;
45    result += c - a;
46    result += a - b;
47 
48    result += a * d;
49    result += d * a;
50    result += a * c;
51    result += c * a;
52    result += a * b;
53 
54    result += a / d;
55    result += d / a;
56    result += a / c;
57    result += c / a;
58    result += a / b;
59 
60    result += norm(a);
61    result += conj(a);
62 
63    return result;
64 }
65 
66 #endif
67 
main()68 int main()
69 {
70 #ifndef BOOST_NO_CXX11_CONSTEXPR
71 
72    constexpr qt q1;
73    constexpr qt q2(2.0);
74    constexpr qt q3(2.0, 3.0);
75    constexpr qt q4(2.0, 3.9, 3.0);
76    constexpr qt q5(2.0, 3.9, 3.0, 5.);
77 
78    constexpr ct c1(2., 3.);
79    constexpr qt q6(c1);
80    constexpr qt q7(c1, c1);
81    constexpr qt q8(q1);
82 
83    constexpr double d1 = q5.real();
84    constexpr qt q9 = q1.unreal();
85    constexpr double d2 = q1.R_component_1();
86    constexpr double d3 = q1.R_component_2();
87    constexpr double d4 = q1.R_component_3();
88    constexpr double d5 = q1.R_component_4();
89    constexpr ct c2 = q1.C_component_1();
90    constexpr ct c3 = q1.C_component_1();
91 
92    constexpr qt q10 = q1 + d1;
93    constexpr qt q11 = d1 + q1;
94    constexpr qt q12 = c2 + q1;
95    constexpr qt q13 = q1 + c2;
96    constexpr qt q14 = q1 + q2;
97 
98    constexpr qt q15 = q1 - d1;
99    constexpr qt q16 = d1 - q1;
100    constexpr qt q17 = c2 - q1;
101    constexpr qt q18 = q1 - c2;
102    constexpr qt q19 = q1 - q2;
103 
104    constexpr qt q20 = q1 * d1;
105    constexpr qt q21 = d1 * q1;
106    constexpr qt q22 = q5 / d1;
107 
108    constexpr double d6 = real(q5);
109    constexpr qt q23 = unreal(q1);
110 
111    constexpr bool b1 = q1 == d1;
112    constexpr bool b2 = d1 == q1;
113    constexpr bool b3 = q1 != d1;
114    constexpr bool b4 = d1 != q1;
115 
116    constexpr bool b5 = q1 == c2;
117    constexpr bool b6 = c2 == q1;
118    constexpr bool b7 = q1 != c2;
119    constexpr bool b8 = c2 != q1;
120    constexpr bool b9 = q2 == q1;
121    constexpr bool b10 = q1 != q2;
122 
123    (void)q9;
124    (void)d2;
125    (void)d3;
126    (void)d4;
127    (void)d6;
128    (void)d5;
129    (void)c3;
130    (void)q10;
131    (void)q11;
132    (void)q12;
133    (void)q13;
134    (void)q14;
135    (void)q15;
136    (void)q16;
137    (void)q17;
138    (void)q18;
139    (void)q19;
140    (void)q20;
141    (void)q21;
142    (void)q22;
143    (void)q23;
144    (void)b1;
145    (void)b2;
146    (void)b3;
147    (void)b4;
148    (void)b5;
149    (void)b6;
150    (void)b7;
151    (void)b8;
152    (void)b9;
153    (void)b10;
154 
155 #endif
156 
157 #ifndef BOOST_NO_CXX14_CONSTEXPR
158 
159    constexpr qt q24 = full_constexpr_test(q5, q5 + 1, 3.2, q5.C_component_1());
160    (void)q24;
161 
162 #endif
163 
164    return 0;
165 }
166