/* SPDX-FileCopyrightText: Copyright (c) 2025, the adamantine authors. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */ #define BOOST_TEST_MODULE Quaternion #include #include "main.cc" BOOST_AUTO_TEST_CASE(rotation) { // Rotation of 2*Pi/3 adamantine::Quaternion quaternion(0.5, 0.5, 0.5, 0.5); dealii::Point<3, dealii::VectorizedArray> p1(1., 0., 0.); auto rotated_p1 = quaternion.rotate(p1); dealii::Point<3, dealii::VectorizedArray> ref_1(0., 1., 0.); BOOST_TEST(rotated_p1 == ref_1); auto rotated2x_p1 = quaternion.rotate(rotated_p1); dealii::Point<3, dealii::VectorizedArray> ref_2(0., 0., 1.); BOOST_TEST(rotated2x_p1 == ref_2); auto rotated3x_p1 = quaternion.rotate(rotated2x_p1); BOOST_TEST(rotated3x_p1 == p1); auto inv_rotated_p1 = quaternion.inv_rotate(rotated_p1); BOOST_TEST(inv_rotated_p1 == p1); quaternion.pow(0.5); quaternion *= quaternion; bool equal = quaternion == adamantine::Quaternion(0.5, 0.5, 0.5, 0.5); BOOST_TEST(equal); quaternion /= quaternion; equal = quaternion == adamantine::Quaternion(1., 0., 0., 0.); BOOST_TEST(equal); }