Test: Add Asin tests to math suite.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
diff --git a/test/testautomation_math.c b/test/testautomation_math.c
index 78d5828..9ae968e 100644
--- a/test/testautomation_math.c
+++ b/test/testautomation_math.c
@@ -2159,6 +2159,94 @@ acos_precisionTest(void *args)
return helper_dtod_approx("Acos", SDL_acos, precision_cases, SDL_arraysize(precision_cases));
}
+/* SDL_asin tests functions */
+
+/**
+ * \brief Checks limits of the domain (+/-1).
+ */
+static int
+asin_limitCases(void *args)
+{
+ double result;
+
+ result = SDL_asin(1.0);
+ SDLTest_AssertCheck(M_PI / 2.0 == result,
+ "Asin(%f), expected %f, got %f",
+ 1.0, M_PI / 2.0, result);
+
+ result = SDL_asin(-1.0);
+ SDLTest_AssertCheck(-M_PI / 2.0 == result,
+ "Asin(%f), expected %f, got %f",
+ -1.0, -M_PI / 2.0, result);
+
+ return TEST_COMPLETED;
+}
+
+/**
+ * \brief Checks values outside the domain (|x| > 1).
+ */
+static int
+asin_outOfDomainCases(void *args)
+{
+ double result;
+
+ result = SDL_asin(1.1);
+ SDLTest_AssertCheck(isnan(result),
+ "Asin(%f), expected %f, got %f",
+ 1.1, NAN, result);
+
+ result = SDL_asin(-1.1);
+ SDLTest_AssertCheck(isnan(result),
+ "Asin(%f), expected %f, got %f",
+ -1.1, NAN, result);
+
+ return TEST_COMPLETED;
+}
+
+/**
+ * \brief Checks for nan.
+ */
+static int
+asin_nanCase(void *args)
+{
+ const double result = SDL_asin(NAN);
+ SDLTest_AssertCheck(isnan(result),
+ "Asin(%f), expected %f, got %f",
+ NAN, NAN, result);
+ return TEST_COMPLETED;
+}
+
+/**
+ * \brief Checks arc sine precision for the first 10 decimals.
+ */
+static int
+asin_precisionTest(void *args)
+{
+ const d_to_d precision_cases[] = {
+ { 0.9, 11197695149.0 },
+ { 0.8, 9272952180.0 },
+ { 0.7, 7753974966.0 },
+ { 0.6, 6435011087.0 },
+ { 0.5, 5235987755.0 },
+ { 0.4, 4115168460.0 },
+ { 0.3, 3046926540.0 },
+ { 0.2, 2013579207.0 },
+ { 0.1, 1001674211.0 },
+ { 0.0, 0.0 },
+ { -0.0, -0.0 },
+ { -0.1, -1001674211.0 },
+ { -0.2, -2013579207.0 },
+ { -0.3, -3046926540.0 },
+ { -0.4, -4115168460.0 },
+ { -0.5, -5235987755.0 },
+ { -0.6, -6435011087.0 },
+ { -0.7, -7753974966.0 },
+ { -0.8, -9272952180.0 },
+ { -0.9, -11197695149.0 }
+ };
+ return helper_dtod_approx("Asin", SDL_asin, precision_cases, SDL_arraysize(precision_cases));
+}
+
/* ================= Test References ================== */
/* SDL_floor test cases */
@@ -2596,6 +2684,25 @@ static const SDLTest_TestCaseReference acosTestPrecision = {
"Check acos precision to the tenth decimal", TEST_ENABLED
};
+/* SDL_asin test cases */
+
+static const SDLTest_TestCaseReference asinTestLimit = {
+ (SDLTest_TestCaseFp) asin_limitCases, "asin_limitCases",
+ "Check the edge of the domain (+/-1)", TEST_ENABLED
+};
+static const SDLTest_TestCaseReference asinTestOutOfDomain = {
+ (SDLTest_TestCaseFp) asin_outOfDomainCases, "asin_outOfDomainCases",
+ "Check a for value outside the domain", TEST_ENABLED
+};
+static const SDLTest_TestCaseReference asinTestNan = {
+ (SDLTest_TestCaseFp) asin_nanCase, "asin_nanCase",
+ "Check the NaN special case", TEST_ENABLED
+};
+static const SDLTest_TestCaseReference asinTestPrecision = {
+ (SDLTest_TestCaseFp) asin_precisionTest, "asin_precisionTest",
+ "Check asin precision to the tenth decimal", TEST_ENABLED
+};
+
static const SDLTest_TestCaseReference *mathTests[] = {
&floorTestInf, &floorTestZero, &floorTestNan,
&floorTestRound, &floorTestFraction, &floorTestRange,
@@ -2647,6 +2754,8 @@ static const SDLTest_TestCaseReference *mathTests[] = {
&acosTestLimit, &acosTestOutOfDomain, &acosTestNan, &acosTestPrecision,
+ &asinTestLimit, &asinTestOutOfDomain, &asinTestNan, &asinTestPrecision,
+
NULL
};