1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <cmath> 17 18 #include "gtest/gtest.h" 19 20 #include "base/geometry/quaternion.h" 21 22 using namespace testing; 23 using namespace testing::ext; 24 25 namespace OHOS::Ace { 26 namespace { 27 const double NUM_D1 = 1.0; 28 const double NUM_D2 = 0.2; 29 const double NUM_D3 = std::sin(std::acos(0.8)) / 3; 30 } // namespace 31 32 class QuaternionTest : public testing::Test {}; 33 34 /** 35 * @tc.name: QuaternionTest001 36 * @tc.desc: Test all functions of the class Quaternion. 37 * @tc.type: FUNC 38 */ 39 HWTEST_F(QuaternionTest, QuaternionTest001, TestSize.Level1) 40 { 41 Quaternion quaternion1; 42 quaternion1.SetX(NUM_D1); 43 quaternion1.SetY(NUM_D1); 44 quaternion1.SetZ(NUM_D1); 45 quaternion1.SetW(NUM_D1); 46 EXPECT_DOUBLE_EQ(quaternion1.GetX(), NUM_D1); 47 EXPECT_DOUBLE_EQ(quaternion1.GetY(), NUM_D1); 48 EXPECT_DOUBLE_EQ(quaternion1.GetZ(), NUM_D1); 49 EXPECT_DOUBLE_EQ(quaternion1.GetW(), NUM_D1); 50 51 Quaternion quaternion2 = quaternion1.inverse(); 52 EXPECT_DOUBLE_EQ(quaternion2.GetX(), -NUM_D1); 53 EXPECT_DOUBLE_EQ(quaternion2.GetY(), -NUM_D1); 54 EXPECT_DOUBLE_EQ(quaternion2.GetZ(), -NUM_D1); 55 EXPECT_DOUBLE_EQ(quaternion2.GetW(), NUM_D1); 56 57 Quaternion quaternion3 = quaternion1.Slerp(quaternion2, -1.0); 58 EXPECT_DOUBLE_EQ(quaternion3.GetX(), NUM_D1); 59 EXPECT_DOUBLE_EQ(quaternion3.GetY(), NUM_D1); 60 EXPECT_DOUBLE_EQ(quaternion3.GetZ(), NUM_D1); 61 EXPECT_DOUBLE_EQ(quaternion3.GetW(), NUM_D1); 62 63 Quaternion quaternion4 = quaternion1.Slerp(quaternion2, 2.0); 64 EXPECT_DOUBLE_EQ(quaternion4.GetX(), NUM_D1); 65 EXPECT_DOUBLE_EQ(quaternion4.GetY(), NUM_D1); 66 EXPECT_DOUBLE_EQ(quaternion4.GetZ(), NUM_D1); 67 EXPECT_DOUBLE_EQ(quaternion4.GetW(), NUM_D1); 68 69 quaternion2.SetW(-NUM_D1); 70 Quaternion quaternion5 = quaternion1.Slerp(quaternion2, 1.0); 71 EXPECT_DOUBLE_EQ(quaternion5.GetX(), NUM_D1); 72 EXPECT_DOUBLE_EQ(quaternion5.GetY(), NUM_D1); 73 EXPECT_DOUBLE_EQ(quaternion5.GetZ(), NUM_D1); 74 EXPECT_DOUBLE_EQ(quaternion5.GetW(), NUM_D1); 75 76 Quaternion quaternion6(NUM_D2, NUM_D2, NUM_D2, NUM_D2); 77 Quaternion quaternion7 = quaternion1.Slerp(quaternion6, 1.0); 78 EXPECT_DOUBLE_EQ(quaternion7.GetX(), NUM_D3); 79 EXPECT_DOUBLE_EQ(quaternion7.GetY(), NUM_D3); 80 EXPECT_DOUBLE_EQ(quaternion7.GetZ(), NUM_D3); 81 EXPECT_DOUBLE_EQ(quaternion7.GetW(), NUM_D3); 82 } 83 } // namespace OHOS::Ace 84