From 7a55fa4e56cd988b7817ae0fb8bf4a34c4f6e057 Mon Sep 17 00:00:00 2001 From: Pierre Wendling Date: Sun, 15 May 2022 19:03:53 -0400 Subject: [PATCH] Test: Add Scalbn tests to math suite. --- test/testautomation_math.c | 133 +++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/test/testautomation_math.c b/test/testautomation_math.c index be07bddea..14d0afdfe 100644 --- a/test/testautomation_math.c +++ b/test/testautomation_math.c @@ -1631,6 +1631,113 @@ sqrt_regularCases(void *args) return helper_dtod("Sqrt", SDL_sqrt, regular_cases, SDL_arraysize(regular_cases)); } +/* SDL_scalbn tests functions */ + +/** + * \brief Checks for positive and negative infinity arg. + */ +static int +scalbn_infCases(void *args) +{ + double result; + + result = SDL_scalbn(INFINITY, 1); + SDLTest_AssertCheck(INFINITY == result, + "Scalbn(%f,%d), expected %f, got %f", + INFINITY, 1, INFINITY, result); + + result = SDL_scalbn(-INFINITY, 1); + SDLTest_AssertCheck(-INFINITY == result, + "Scalbn(%f,%d), expected %f, got %f", + -INFINITY, 1, -INFINITY, result); + + return TEST_COMPLETED; +} + +/** + * \brief Checks for positive and negative zero arg. + */ +static int +scalbn_baseZeroCases(void *args) +{ + double result; + + result = SDL_scalbn(0.0, 1); + SDLTest_AssertCheck(0.0 == result, + "Scalbn(%f,%d), expected %f, got %f", + 0.0, 1, 0.0, result); + + result = SDL_scalbn(-0.0, 1); + SDLTest_AssertCheck(-0.0 == result, + "Scalbn(%f,%d), expected %f, got %f", + -0.0, 1, -0.0, result); + + return TEST_COMPLETED; +} + +/** + * \brief Checks for zero exp. + */ +static int +scalbn_expZeroCase(void *args) +{ + const double result = SDL_scalbn(42.0, 0); + SDLTest_AssertCheck(42.0 == result, + "Scalbn(%f,%d), expected %f, got %f", + 42.0, 0, 42.0, result); + return TEST_COMPLETED; +} + +/** + * \brief Checks for NAN arg. + */ +static int +scalbn_nanCase(void *args) +{ + const double result = SDL_scalbn(NAN, 2); + SDLTest_AssertCheck(isnan(result), + "Scalbn(%f,%d), expected %f, got %f", + NAN, 2, NAN, result); + return TEST_COMPLETED; +} + +/** + * \brief Checks a set of regular values. + * + * This test depends on SDL_pow functionning. + */ +static int +scalbn_regularCases(void *args) +{ + double result, expected; + + result = SDL_scalbn(2.0, 2); + expected = 2.0 * SDL_pow(FLT_RADIX, 2); + SDLTest_AssertCheck(result == expected, + "Scalbn(%f,%d), expected %f, got %f", + 2.0, 2, expected, result); + + result = SDL_scalbn(1.0, 13); + expected = 1.0 * SDL_pow(FLT_RADIX, 13); + SDLTest_AssertCheck(result == expected, + "Scalbn(%f,%d), expected %f, got %f", + 1.0, 13, expected, result); + + result = SDL_scalbn(2.0, -5); + expected = 2.0 * SDL_pow(FLT_RADIX, -5); + SDLTest_AssertCheck(result == expected, + "Scalbn(%f,%d), expected %f, got %f", + 2.0, -5, expected, result); + + result = SDL_scalbn(-1.0, -13); + expected = -1.0 * SDL_pow(FLT_RADIX, -13); + SDLTest_AssertCheck(result == expected, + "Scalbn(%f,%d), expected %f, got %f", + -1.0, -13, expected, result); + + return TEST_COMPLETED; +} + /* ================= Test References ================== */ /* SDL_floor test cases */ @@ -1961,6 +2068,29 @@ static const SDLTest_TestCaseReference sqrtTestRegular = { "Check a set of regular values", TEST_ENABLED }; +/* SDL_scalbn test cases */ + +static const SDLTest_TestCaseReference scalbnTestInf = { + (SDLTest_TestCaseFp) scalbn_infCases, "scalbn_infCases", + "Check positive and negative infinity arg", TEST_ENABLED +}; +static const SDLTest_TestCaseReference scalbnTestBaseZero = { + (SDLTest_TestCaseFp) scalbn_baseZeroCases, "scalbn_baseZeroCases", + "Check for positive and negative zero arg", TEST_ENABLED +}; +static const SDLTest_TestCaseReference scalbnTestExpZero = { + (SDLTest_TestCaseFp) scalbn_expZeroCase, "scalbn_expZeroCase", + "Check for zero exp", TEST_ENABLED +}; +static const SDLTest_TestCaseReference scalbnTestNan = { + (SDLTest_TestCaseFp) scalbn_nanCase, "scalbn_nanCase", + "Check the NaN special case", TEST_ENABLED +}; +static const SDLTest_TestCaseReference scalbnTestRegular = { + (SDLTest_TestCaseFp) scalbn_regularCases, "scalbn_regularCases", + "Check a set of regular cases", TEST_ENABLED +}; + static const SDLTest_TestCaseReference *mathTests[] = { &floorTestInf, &floorTestZero, &floorTestNan, &floorTestRound, &floorTestFraction, &floorTestRange, @@ -1999,6 +2129,9 @@ static const SDLTest_TestCaseReference *mathTests[] = { &sqrtTestInf, &sqrtTestNan, &sqrtTestDomain, &sqrtTestBase, &sqrtTestRegular, + &scalbnTestInf, &scalbnTestBaseZero, &scalbnTestExpZero, + &scalbnTestNan, &scalbnTestRegular, + NULL };