1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License. 5e0dac50fSopenharmony_ci * You may obtain a copy of the License at 6e0dac50fSopenharmony_ci * 7e0dac50fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e0dac50fSopenharmony_ci * 9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and 13e0dac50fSopenharmony_ci * limitations under the License. 14e0dac50fSopenharmony_ci */ 15e0dac50fSopenharmony_ci 16e0dac50fSopenharmony_ci#include <gtest/gtest.h> 17e0dac50fSopenharmony_ci 18e0dac50fSopenharmony_ci#include "wm_math.h" 19e0dac50fSopenharmony_ci 20e0dac50fSopenharmony_ciusing namespace testing; 21e0dac50fSopenharmony_ciusing namespace testing::ext; 22e0dac50fSopenharmony_ci 23e0dac50fSopenharmony_cinamespace OHOS { 24e0dac50fSopenharmony_cinamespace Rosen { 25e0dac50fSopenharmony_ciusing namespace TransformHelper; 26e0dac50fSopenharmony_ciclass WmMathTest : public testing::Test { 27e0dac50fSopenharmony_cipublic: 28e0dac50fSopenharmony_ci static void SetUpTestCase(); 29e0dac50fSopenharmony_ci static void TearDownTestCase(); 30e0dac50fSopenharmony_ci virtual void SetUp() override; 31e0dac50fSopenharmony_ci virtual void TearDown() override; 32e0dac50fSopenharmony_ci}; 33e0dac50fSopenharmony_ci 34e0dac50fSopenharmony_civoid WmMathTest::SetUpTestCase() 35e0dac50fSopenharmony_ci{ 36e0dac50fSopenharmony_ci} 37e0dac50fSopenharmony_ci 38e0dac50fSopenharmony_civoid WmMathTest::TearDownTestCase() 39e0dac50fSopenharmony_ci{ 40e0dac50fSopenharmony_ci} 41e0dac50fSopenharmony_ci 42e0dac50fSopenharmony_civoid WmMathTest::SetUp() 43e0dac50fSopenharmony_ci{ 44e0dac50fSopenharmony_ci} 45e0dac50fSopenharmony_ci 46e0dac50fSopenharmony_civoid WmMathTest::TearDown() 47e0dac50fSopenharmony_ci{ 48e0dac50fSopenharmony_ci} 49e0dac50fSopenharmony_ci 50e0dac50fSopenharmony_cinamespace { 51e0dac50fSopenharmony_ci/** 52e0dac50fSopenharmony_ci * @tc.name: MathHalper 53e0dac50fSopenharmony_ci * @tc.desc: MathHalper test 54e0dac50fSopenharmony_ci * @tc.type: FUNC 55e0dac50fSopenharmony_ci */ 56e0dac50fSopenharmony_ciHWTEST_F(WmMathTest, MathHalper, Function | SmallTest | Level2) 57e0dac50fSopenharmony_ci{ 58e0dac50fSopenharmony_ci { 59e0dac50fSopenharmony_ci const float t = 0.5f; 60e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::NearZero(0)); 61e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::NearZero(t * MathHelper::NAG_ZERO)); 62e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::NearZero(t * MathHelper::POS_ZERO)); 63e0dac50fSopenharmony_ci } 64e0dac50fSopenharmony_ci { 65e0dac50fSopenharmony_ci float radians = MathHelper::PI, degrees = 180.f; 66e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::NearZero(MathHelper::ToDegrees(radians) - degrees)); 67e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::NearZero(MathHelper::ToRadians(degrees) - radians)); 68e0dac50fSopenharmony_ci } 69e0dac50fSopenharmony_ci { 70e0dac50fSopenharmony_ci int a = 1, b = 2, c = 3, d = 4; 71e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::Max(a, b, c) == c); 72e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::Min(a, b, c) == a); 73e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::Max(a, b, c, d) == d); 74e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::Min(a, b, c, d) == a); 75e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::Clamp(a, b, c) == b); 76e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::Clamp(b, a, c) == b); 77e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::Clamp(c, a, b) == b); 78e0dac50fSopenharmony_ci } 79e0dac50fSopenharmony_ci} 80e0dac50fSopenharmony_ci 81e0dac50fSopenharmony_ci/** 82e0dac50fSopenharmony_ci * @tc.name: TransformMatrix 83e0dac50fSopenharmony_ci * @tc.desc: Create transform matrix 84e0dac50fSopenharmony_ci * Get scale component from transform matrix 85e0dac50fSopenharmony_ci * Get translation component from transform matrix 86e0dac50fSopenharmony_ci * @tc.type: FUNC 87e0dac50fSopenharmony_ci */ 88e0dac50fSopenharmony_ciHWTEST_F(WmMathTest, TransformMatrix, Function | SmallTest | Level2) 89e0dac50fSopenharmony_ci{ 90e0dac50fSopenharmony_ci Vector3 scale(1.5f, 0.7f, 2.2f), translation(100.f, 132.f, 20.f); 91e0dac50fSopenharmony_ci Matrix4 transformMat = CreateScale(scale.x_, scale.y_, scale.z_); 92e0dac50fSopenharmony_ci float theta = 2.34f; 93e0dac50fSopenharmony_ci transformMat *= CreateRotationY(theta); 94e0dac50fSopenharmony_ci transformMat *= CreateTranslation(translation); 95e0dac50fSopenharmony_ci Vector3 scaleComp = transformMat.GetScale(); 96e0dac50fSopenharmony_ci Vector3 translationComp = transformMat.GetTranslation(); 97e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::NearZero((scale - scaleComp).Length())); 98e0dac50fSopenharmony_ci ASSERT_EQ(true, MathHelper::NearZero((translation - translationComp).Length())); 99e0dac50fSopenharmony_ci} 100e0dac50fSopenharmony_ci/** 101e0dac50fSopenharmony_ci * @tc.name: TransformWithPerspDiv 102e0dac50fSopenharmony_ci * @tc.desc: Create transform matrix 103e0dac50fSopenharmony_ci * Get scale component from transform matrix 104e0dac50fSopenharmony_ci * Get translation component from transform matrix 105e0dac50fSopenharmony_ci * @tc.type: FUNC 106e0dac50fSopenharmony_ci */ 107e0dac50fSopenharmony_ciHWTEST_F(WmMathTest, TransformWithPerspDiv, Function | SmallTest | Level2) 108e0dac50fSopenharmony_ci{ 109e0dac50fSopenharmony_ci Vector3 vec(1.0, 1.0, 1.0); 110e0dac50fSopenharmony_ci Matrix4 mat = Matrix4::Identity; 111e0dac50fSopenharmony_ci auto result = TransformWithPerspDiv(vec, mat, 0.5); 112e0dac50fSopenharmony_ci auto expect = vec * 2; 113e0dac50fSopenharmony_ci ASSERT_EQ(expect.x_, result.x_); 114e0dac50fSopenharmony_ci ASSERT_EQ(expect.y_, result.y_); 115e0dac50fSopenharmony_ci ASSERT_EQ(expect.z_, result.z_); 116e0dac50fSopenharmony_ci 117e0dac50fSopenharmony_ci result = TransformWithPerspDiv(vec, mat, 0); 118e0dac50fSopenharmony_ci ASSERT_EQ(vec.x_, result.x_); 119e0dac50fSopenharmony_ci ASSERT_EQ(vec.y_, result.y_); 120e0dac50fSopenharmony_ci ASSERT_EQ(vec.z_, result.z_); 121e0dac50fSopenharmony_ci} 122e0dac50fSopenharmony_ci 123e0dac50fSopenharmony_ci/** 124e0dac50fSopenharmony_ci * @tc.name: Invert 125e0dac50fSopenharmony_ci * @tc.desc: 126e0dac50fSopenharmony_ci * @tc.type: FUNC 127e0dac50fSopenharmony_ci */ 128e0dac50fSopenharmony_ciHWTEST_F(WmMathTest, Invert, Function | SmallTest | Level2) 129e0dac50fSopenharmony_ci{ 130e0dac50fSopenharmony_ci Matrix4 mat; 131e0dac50fSopenharmony_ci mat.mat_[0][0] = 0.f; 132e0dac50fSopenharmony_ci mat.mat_[1][0] = -1.0f; 133e0dac50fSopenharmony_ci mat.Invert(); 134e0dac50fSopenharmony_ci ASSERT_EQ(false, MathHelper::NearZero(0.f - mat.mat_[1][0])); 135e0dac50fSopenharmony_ci} 136e0dac50fSopenharmony_ci 137e0dac50fSopenharmony_ci/** 138e0dac50fSopenharmony_ci * @tc.name: Invert02 139e0dac50fSopenharmony_ci * @tc.desc: 140e0dac50fSopenharmony_ci * @tc.type: FUNC 141e0dac50fSopenharmony_ci */ 142e0dac50fSopenharmony_ciHWTEST_F(WmMathTest, Invert02, Function | SmallTest | Level2) 143e0dac50fSopenharmony_ci{ 144e0dac50fSopenharmony_ci Matrix4 mat; 145e0dac50fSopenharmony_ci mat.mat_[0][0] = 10.0f; 146e0dac50fSopenharmony_ci mat.mat_[1][0] = -1.0f; 147e0dac50fSopenharmony_ci mat.Invert(); 148e0dac50fSopenharmony_ci ASSERT_EQ(false, MathHelper::NearZero(0.f - mat.mat_[1][0])); 149e0dac50fSopenharmony_ci} 150e0dac50fSopenharmony_ci 151e0dac50fSopenharmony_ci/** 152e0dac50fSopenharmony_ci * @tc.name: Invert02 153e0dac50fSopenharmony_ci * @tc.desc: 154e0dac50fSopenharmony_ci * @tc.type: FUNC 155e0dac50fSopenharmony_ci */ 156e0dac50fSopenharmony_ciHWTEST_F(WmMathTest, Invert03, Function | SmallTest | Level2) 157e0dac50fSopenharmony_ci{ 158e0dac50fSopenharmony_ci Matrix4 mat; 159e0dac50fSopenharmony_ci mat.mat_[0][0] = 0.f; 160e0dac50fSopenharmony_ci mat.mat_[1][0] = 0.f; 161e0dac50fSopenharmony_ci mat.Invert(); 162e0dac50fSopenharmony_ci ASSERT_EQ(false, MathHelper::NearZero(0.f - mat.mat_[1][0])); 163e0dac50fSopenharmony_ci} 164e0dac50fSopenharmony_ci 165e0dac50fSopenharmony_ci/** 166e0dac50fSopenharmony_ci * @tc.name: Invert02 167e0dac50fSopenharmony_ci * @tc.desc: 168e0dac50fSopenharmony_ci * @tc.type: FUNC 169e0dac50fSopenharmony_ci */ 170e0dac50fSopenharmony_ciHWTEST_F(WmMathTest, Invert04, Function | SmallTest | Level2) 171e0dac50fSopenharmony_ci{ 172e0dac50fSopenharmony_ci Matrix4 mat; 173e0dac50fSopenharmony_ci mat.mat_[0][0] = 10.0f; 174e0dac50fSopenharmony_ci mat.mat_[1][0] = 0.f; 175e0dac50fSopenharmony_ci mat.Invert(); 176e0dac50fSopenharmony_ci ASSERT_EQ(false, MathHelper::NearZero(0.f - mat.mat_[1][0])); 177e0dac50fSopenharmony_ci} 178e0dac50fSopenharmony_ci} 179e0dac50fSopenharmony_ci} // namespace Rosen 180e0dac50fSopenharmony_ci} // namespace OHOS