Blame tests/mathops-test.c
|
Packit |
664db3 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
664db3 |
#include "config.h"
|
|
Packit |
664db3 |
#endif
|
|
Packit |
664db3 |
|
|
Packit |
664db3 |
#include "mathops.h"
|
|
Packit |
664db3 |
#include <stdio.h>
|
|
Packit |
664db3 |
#include <math.h>
|
|
Packit |
664db3 |
|
|
Packit |
664db3 |
#ifdef FIXED_POINT
|
|
Packit |
664db3 |
#define WORD "%d"
|
|
Packit |
664db3 |
#else
|
|
Packit |
664db3 |
#define WORD "%f"
|
|
Packit |
664db3 |
#endif
|
|
Packit |
664db3 |
|
|
Packit |
664db3 |
int ret = 0;
|
|
Packit |
664db3 |
|
|
Packit |
664db3 |
void testdiv(void)
|
|
Packit |
664db3 |
{
|
|
Packit |
664db3 |
celt_int32_t i;
|
|
Packit |
664db3 |
for (i=1;i<=327670;i++)
|
|
Packit |
664db3 |
{
|
|
Packit |
664db3 |
double prod;
|
|
Packit |
664db3 |
celt_word32_t val;
|
|
Packit |
664db3 |
val = celt_rcp(i);
|
|
Packit |
664db3 |
#ifdef FIXED_POINT
|
|
Packit |
664db3 |
prod = (1./32768./65526.)*val*i;
|
|
Packit |
664db3 |
#else
|
|
Packit |
664db3 |
prod = val*i;
|
|
Packit |
664db3 |
#endif
|
|
Packit |
664db3 |
if (fabs(prod-1) > .001)
|
|
Packit |
664db3 |
{
|
|
Packit |
664db3 |
fprintf (stderr, "div failed: 1/%d="WORD" (product = %f)\n", i, val, prod);
|
|
Packit |
664db3 |
ret = 1;
|
|
Packit |
664db3 |
}
|
|
Packit |
664db3 |
}
|
|
Packit |
664db3 |
}
|
|
Packit |
664db3 |
|
|
Packit |
664db3 |
void testsqrt(void)
|
|
Packit |
664db3 |
{
|
|
Packit |
664db3 |
celt_int32_t i;
|
|
Packit |
664db3 |
for (i=1;i<=1000000000;i++)
|
|
Packit |
664db3 |
{
|
|
Packit |
664db3 |
double ratio;
|
|
Packit |
664db3 |
celt_word16_t val;
|
|
Packit |
664db3 |
val = celt_sqrt(i);
|
|
Packit |
664db3 |
ratio = val/sqrt(i);
|
|
Packit |
664db3 |
if (fabs(ratio - 1) > .001 && fabs(val-sqrt(i)) > 2)
|
|
Packit |
664db3 |
{
|
|
Packit |
664db3 |
fprintf (stderr, "sqrt failed: sqrt(%d)="WORD" (ratio = %f)\n", i, val, ratio);
|
|
Packit |
664db3 |
ret = 1;
|
|
Packit |
664db3 |
}
|
|
Packit |
664db3 |
i+= i>>10;
|
|
Packit |
664db3 |
}
|
|
Packit |
664db3 |
}
|
|
Packit |
664db3 |
|
|
Packit |
664db3 |
void testrsqrt(void)
|
|
Packit |
664db3 |
{
|
|
Packit |
664db3 |
celt_int32_t i;
|
|
Packit |
664db3 |
for (i=1;i<=2000000;i++)
|
|
Packit |
664db3 |
{
|
|
Packit |
664db3 |
double ratio;
|
|
Packit |
664db3 |
celt_word16_t val;
|
|
Packit |
664db3 |
val = celt_rsqrt(i);
|
|
Packit |
664db3 |
ratio = val*sqrt(i)/Q15ONE;
|
|
Packit |
664db3 |
if (fabs(ratio - 1) > .05)
|
|
Packit |
664db3 |
{
|
|
Packit |
664db3 |
fprintf (stderr, "rsqrt failed: rsqrt(%d)="WORD" (ratio = %f)\n", i, val, ratio);
|
|
Packit |
664db3 |
ret = 1;
|
|
Packit |
664db3 |
}
|
|
Packit |
664db3 |
i+= i>>10;
|
|
Packit |
664db3 |
}
|
|
Packit |
664db3 |
}
|
|
Packit |
664db3 |
|
|
Packit |
664db3 |
int main(void)
|
|
Packit |
664db3 |
{
|
|
Packit |
664db3 |
testdiv();
|
|
Packit |
664db3 |
testsqrt();
|
|
Packit |
664db3 |
testrsqrt();
|
|
Packit |
664db3 |
return ret;
|
|
Packit |
664db3 |
}
|