Add AZStd::lerp math function, based on C++20 (#3468)

* Add AZStd::lerp math function, based on c++20

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Add unit test for AZStd::lerp, based on libc++ ones

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* written a reduced set of lerp tests, but now the license is correct

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Update Code/Framework/AzCore/AzCore/std/math.h

Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Update Code/Framework/AzCore/Tests/AZStd/Math.cpp

Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* fix the github suggestion merge

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Copy some AZ::Lerp tests to std::lerp test suite + clang-format

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Cleanup lerp test cases

Remove comments that suggested very heavy tests that required things like `for every t1..`

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Fix unit test compilation issues

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* fix whitespace issue

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Use `TypeParam` in TYPED_TEST

Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* Remove unneeded new-lines

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

* remove unused infinity

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>

Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
This commit is contained in:
Artur K
2021-10-11 12:55:24 +02:00
committed by GitHub
parent 7b1dd01d1d
commit b91d503a82
3 changed files with 92 additions and 0 deletions
@@ -0,0 +1,46 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#include <AzCore/UnitTest/TestTypes.h>
#include <AzCore/std/math.h>
namespace UnitTest
{
template<typename T>
class StdMathTest : public ::testing::Test
{
};
using MathTestConfigs = ::testing::Types<float, double, long double>;
TYPED_TEST_CASE(StdMathTest, MathTestConfigs);
TYPED_TEST(StdMathTest, LerpOperations)
{
using AZStd::lerp;
using ::testing::Eq;
using T = TypeParam;
constexpr T maxNumber = AZStd::numeric_limits<T>::max();
constexpr T eps = AZStd::numeric_limits<T>::epsilon();
constexpr T a{ 42 };
// exactness: lerp(a,b,0)==a && lerp(a,b,1)==b
EXPECT_THAT(lerp(eps, maxNumber, T(0)), Eq(eps));
EXPECT_THAT(lerp(eps, maxNumber, T(1)), Eq(maxNumber));
// consistency: lerp(a,a,t)==a
EXPECT_THAT(lerp(a, a, T(0.5)), Eq(a));
EXPECT_THAT(lerp(eps, eps, T(0.5)), Eq(eps));
// a few generic tests taken from MathUtilTests.cpp
EXPECT_EQ(T(2.5), lerp(T(2), T(4), T(0.25)));
EXPECT_EQ(T(6.0), lerp(T(2), T(4), T(2.0)));
EXPECT_EQ(T(3.5), lerp(T(2), T(4), T(0.75)));
EXPECT_EQ(T(0.0), lerp(T(2), T(4), T(-1.0)));
}
} // namespace UnitTest