summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/math/test/quaternion_constexpr_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/math/test/quaternion_constexpr_test.cpp')
-rw-r--r--src/boost/libs/math/test/quaternion_constexpr_test.cpp165
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;
+}