|
|
|
|
@ -39,6 +39,9 @@ struct FunctionsBatchTest: Corrade::TestSuite::Tester {
|
|
|
|
|
void min(); |
|
|
|
|
void max(); |
|
|
|
|
void minmax(); |
|
|
|
|
|
|
|
|
|
void nanIgnoring(); |
|
|
|
|
void nanIgnoringVector(); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
using namespace Literals; |
|
|
|
|
@ -54,7 +57,11 @@ FunctionsBatchTest::FunctionsBatchTest() {
|
|
|
|
|
|
|
|
|
|
&FunctionsBatchTest::min, |
|
|
|
|
&FunctionsBatchTest::max, |
|
|
|
|
&FunctionsBatchTest::minmax}); |
|
|
|
|
&FunctionsBatchTest::minmax, |
|
|
|
|
|
|
|
|
|
&FunctionsBatchTest::nanIgnoring, |
|
|
|
|
&FunctionsBatchTest::nanIgnoringVector, |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FunctionsBatchTest::isInf() { |
|
|
|
|
@ -153,6 +160,89 @@ void FunctionsBatchTest::minmax() {
|
|
|
|
|
CORRADE_COMPARE(Math::minmax({1.0_radf, 2.0_radf, 3.0_radf}), std::make_pair(1.0_radf, 3.0_radf)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FunctionsBatchTest::nanIgnoring() { |
|
|
|
|
auto oneNan = {1.0f, Constants::nan(), -3.0f}; |
|
|
|
|
auto firstNan = {Constants::nan(), 1.0f, -3.0f}; |
|
|
|
|
auto allNan = {Constants::nan(), Constants::nan(), Constants::nan()}; |
|
|
|
|
|
|
|
|
|
CORRADE_COMPARE(Math::min(oneNan), -3.0f); |
|
|
|
|
CORRADE_COMPARE(Math::min(firstNan), -3.0f); |
|
|
|
|
CORRADE_COMPARE(Math::min(allNan), Constants::nan()); |
|
|
|
|
|
|
|
|
|
CORRADE_COMPARE(Math::max(oneNan), 1.0f); |
|
|
|
|
CORRADE_COMPARE(Math::max(firstNan), 1.0f); |
|
|
|
|
CORRADE_COMPARE(Math::max(allNan), Constants::nan()); |
|
|
|
|
|
|
|
|
|
CORRADE_COMPARE(Math::minmax(oneNan), std::make_pair(-3.0f, 1.0f)); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(firstNan), std::make_pair(-3.0f, 1.0f)); |
|
|
|
|
/* Need to compare this way because of NaNs */ |
|
|
|
|
CORRADE_COMPARE(Math::minmax(allNan).first, Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(allNan).second, Constants::nan()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void FunctionsBatchTest::nanIgnoringVector() { |
|
|
|
|
auto oneNan = {Vector2{1.0f, 0.5f}, |
|
|
|
|
Vector2{Constants::nan(), -3.0f}, |
|
|
|
|
Vector2{0.4f, -1.0f}}; |
|
|
|
|
auto firstNan = {Vector2{1.0f, -Constants::nan()}, |
|
|
|
|
Vector2{2.2f, -1.0f}, |
|
|
|
|
Vector2{0.4f, -3.0f}}; |
|
|
|
|
auto nanEveryComponent = {Vector2{0.4f, -Constants::nan()}, |
|
|
|
|
Vector2{Constants::nan(), -1.0f}, |
|
|
|
|
Vector2{2.2f, -3.0f}}; |
|
|
|
|
auto oneComponentNan = {Vector2{Constants::nan(), 1.5f}, |
|
|
|
|
Vector2{Constants::nan(), Constants::nan()}, |
|
|
|
|
Vector2{Constants::nan(), 0.3f}}; |
|
|
|
|
auto firstFullNan = {Vector2{Constants::nan(), Constants::nan()}, |
|
|
|
|
Vector2{1.5f, Constants::nan()}, |
|
|
|
|
Vector2{0.3f, Constants::nan()}}; |
|
|
|
|
auto allNan = {Vector2{Constants::nan(), Constants::nan()}, |
|
|
|
|
Vector2{Constants::nan(), Constants::nan()}, |
|
|
|
|
Vector2{Constants::nan(), Constants::nan()}}; |
|
|
|
|
|
|
|
|
|
CORRADE_COMPARE(Math::min(oneNan), (Vector2{0.4f, -3.0f})); |
|
|
|
|
CORRADE_COMPARE(Math::min(firstNan), (Vector2{0.4f, -3.0f})); |
|
|
|
|
CORRADE_COMPARE(Math::min(nanEveryComponent), (Vector2{0.4f, -3.0f})); |
|
|
|
|
/* Need to compare this way because of NaNs */ |
|
|
|
|
CORRADE_COMPARE(Math::min(oneComponentNan)[0], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::min(oneComponentNan)[1], 0.3f); |
|
|
|
|
CORRADE_COMPARE(Math::min(firstFullNan)[0], 0.3f); |
|
|
|
|
CORRADE_COMPARE(Math::min(firstFullNan)[1], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::min(allNan)[0], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::min(allNan)[1], Constants::nan()); |
|
|
|
|
|
|
|
|
|
CORRADE_COMPARE(Math::max(oneNan), (Vector2{1.0f, 0.5f})); |
|
|
|
|
CORRADE_COMPARE(Math::max(firstNan), (Vector2{2.2f, -1.0f})); |
|
|
|
|
CORRADE_COMPARE(Math::max(nanEveryComponent), (Vector2{2.2f, -1.0f})); |
|
|
|
|
/* Need to compare this way because of NaNs */ |
|
|
|
|
CORRADE_COMPARE(Math::max(oneComponentNan)[0], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::max(oneComponentNan)[1], 1.5f); |
|
|
|
|
CORRADE_COMPARE(Math::max(firstFullNan)[0], 1.5f); |
|
|
|
|
CORRADE_COMPARE(Math::max(firstFullNan)[1], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::max(allNan)[0], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::max(allNan)[1], Constants::nan()); |
|
|
|
|
|
|
|
|
|
CORRADE_COMPARE(Math::minmax(oneNan), std::make_pair( |
|
|
|
|
Vector2{0.4f, -3.0f}, Vector2{1.0f, 0.5f})); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(firstNan), std::make_pair( |
|
|
|
|
Vector2{0.4f, -3.0f}, Vector2{2.2f, -1.0f})); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(nanEveryComponent), std::make_pair( |
|
|
|
|
Vector2{0.4f, -3.0f}, Vector2{2.2f, -1.0f})); |
|
|
|
|
/* Need to compare this way because of NaNs */ |
|
|
|
|
CORRADE_COMPARE(Math::minmax(oneComponentNan).first[0], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(oneComponentNan).first[1], 0.3f); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(oneComponentNan).second[0], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(oneComponentNan).second[1], 1.5f); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(firstFullNan).first[0], 0.3f); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(firstFullNan).first[1], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(firstFullNan).second[0], 1.5f); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(firstFullNan).second[1], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(allNan).first[0], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(allNan).first[1], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(allNan).second[0], Constants::nan()); |
|
|
|
|
CORRADE_COMPARE(Math::minmax(allNan).second[1], Constants::nan()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}}}} |
|
|
|
|
|
|
|
|
|
CORRADE_TEST_MAIN(Magnum::Math::Test::FunctionsBatchTest) |
|
|
|
|
|