libfixmath/tests/tests_sqrt.c

38 lines
1014 B
C

#include "tests_sqrt.h"
#include "tests.h"
int test_sqrt_specific()
{
ASSERT_EQ_INT(fix16_sqrt(fix16_from_int(16)), fix16_from_int(4));
ASSERT_EQ_INT(fix16_sqrt(fix16_from_int(100)), fix16_from_int(10));
ASSERT_EQ_INT(fix16_sqrt(fix16_from_int(1)), fix16_from_int(1));
#ifndef FIXMATH_NO_ROUNDING
ASSERT_EQ_INT(fix16_sqrt(214748302), 3751499);
ASSERT_EQ_INT(fix16_sqrt(214748303), 3751499);
ASSERT_EQ_INT(fix16_sqrt(214748359), 3751499);
ASSERT_EQ_INT(fix16_sqrt(214748360), 3751500);
#endif
return 0;
}
int test_sqrt_short()
{
for (unsigned i = 0; i < TESTCASES_COUNT; ++i)
{
fix16_t a = testcases[i];
double fa = fix16_to_dbl(a);
fix16_t result = fix16_sqrt(a);
double fresult = sqrt(fa);
ASSERT_NEAR_DOUBLE(fresult, fix16_to_dbl(result), fix16_to_dbl(1),
"in: %f", fa);
}
return 0;
}
int test_sqrt()
{
TEST(test_sqrt_specific());
TEST(test_sqrt_short());
return 0;
}