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
}