diff options
Diffstat (limited to 'src/boost/libs/math/test/quaternion_constexpr_test.cpp')
-rw-r--r-- | src/boost/libs/math/test/quaternion_constexpr_test.cpp | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/src/boost/libs/math/test/quaternion_constexpr_test.cpp b/src/boost/libs/math/test/quaternion_constexpr_test.cpp new file mode 100644 index 000000000..773929c00 --- /dev/null +++ b/src/boost/libs/math/test/quaternion_constexpr_test.cpp @@ -0,0 +1,165 @@ +// test file for quaternion.hpp + +// (C) Copyright Hubert Holin 2001. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + + +#include <boost/math/quaternion.hpp> + +typedef boost::math::quaternion<double> qt; +typedef std::complex<double> ct; + +#ifndef BOOST_NO_CXX14_CONSTEXPR + +constexpr qt full_constexpr_test(qt a, qt b, double d, ct c) +{ + a.swap(b); + qt result(a), t; + result += d; + result += c; + result += b; + t = result; + t = d; + t = c; + result -= d; + result -= c; + result -= a; + result *= d; + result *= c; + result *= a; + result /= d; + result /= c; + result /= b; + + result += a + d; + result += d + a; + result += a + c; + result += c + a; + result += a + b; + + result += a - d; + result += d - a; + result += a - c; + result += c - a; + result += a - b; + + result += a * d; + result += d * a; + result += a * c; + result += c * a; + result += a * b; + + result += a / d; + result += d / a; + result += a / c; + result += c / a; + result += a / b; + + result += norm(a); + result += conj(a); + + return result; +} + +#endif + +int main() +{ +#ifndef BOOST_NO_CXX11_CONSTEXPR + + constexpr qt q1; + constexpr qt q2(2.0); + constexpr qt q3(2.0, 3.0); + constexpr qt q4(2.0, 3.9, 3.0); + constexpr qt q5(2.0, 3.9, 3.0, 5.); + + constexpr ct c1(2., 3.); + constexpr qt q6(c1); + constexpr qt q7(c1, c1); + constexpr qt q8(q1); + + constexpr double d1 = q5.real(); + constexpr qt q9 = q1.unreal(); + constexpr double d2 = q1.R_component_1(); + constexpr double d3 = q1.R_component_2(); + constexpr double d4 = q1.R_component_3(); + constexpr double d5 = q1.R_component_4(); + constexpr ct c2 = q1.C_component_1(); + constexpr ct c3 = q1.C_component_1(); + + constexpr qt q10 = q1 + d1; + constexpr qt q11 = d1 + q1; + constexpr qt q12 = c2 + q1; + constexpr qt q13 = q1 + c2; + constexpr qt q14 = q1 + q2; + + constexpr qt q15 = q1 - d1; + constexpr qt q16 = d1 - q1; + constexpr qt q17 = c2 - q1; + constexpr qt q18 = q1 - c2; + constexpr qt q19 = q1 - q2; + + constexpr qt q20 = q1 * d1; + constexpr qt q21 = d1 * q1; + constexpr qt q22 = q5 / d1; + + constexpr double d6 = real(q5); + constexpr qt q23 = unreal(q1); + + constexpr bool b1 = q1 == d1; + constexpr bool b2 = d1 == q1; + constexpr bool b3 = q1 != d1; + constexpr bool b4 = d1 != q1; + + constexpr bool b5 = q1 == c2; + constexpr bool b6 = c2 == q1; + constexpr bool b7 = q1 != c2; + constexpr bool b8 = c2 != q1; + constexpr bool b9 = q2 == q1; + constexpr bool b10 = q1 != q2; + + (void)q9; + (void)d2; + (void)d3; + (void)d4; + (void)d6; + (void)d5; + (void)c3; + (void)q10; + (void)q11; + (void)q12; + (void)q13; + (void)q14; + (void)q15; + (void)q16; + (void)q17; + (void)q18; + (void)q19; + (void)q20; + (void)q21; + (void)q22; + (void)q23; + (void)b1; + (void)b2; + (void)b3; + (void)b4; + (void)b5; + (void)b6; + (void)b7; + (void)b8; + (void)b9; + (void)b10; + +#endif + +#ifndef BOOST_NO_CXX14_CONSTEXPR + + constexpr qt q24 = full_constexpr_test(q5, q5 + 1, 3.2, q5.C_component_1()); + (void)q24; + +#endif + + return 0; +} |