blob: dc208da4bb78ee50bd01980fcab0147f27faddb6 [file] [log] [blame]
Jean-Marc Valin92518982008-03-13 17:20:08 +11001#ifdef HAVE_CONFIG_H
2#include "config.h"
3#endif
4
5#include "mathops.h"
6#include <stdio.h>
7#include <math.h>
8
9#ifdef FIXED_POINT
10#define WORD "%d"
11#else
12#define WORD "%f"
13#endif
14
15int ret = 0;
16
Jean-Marc Valina82dfdd2008-03-13 23:01:55 +110017void testdiv(void)
Jean-Marc Valin92518982008-03-13 17:20:08 +110018{
19 celt_int32_t i;
Jean-Marc Valin385795e2008-03-26 15:56:07 +110020 for (i=1;i<=327670;i++)
Jean-Marc Valin92518982008-03-13 17:20:08 +110021 {
22 double prod;
23 celt_word32_t val;
Jean-Marc Valin92518982008-03-13 17:20:08 +110024 val = celt_rcp(i);
25#ifdef FIXED_POINT
26 prod = (1./32768./65526.)*val*i;
27#else
28 prod = val*i;
29#endif
30 if (fabs(prod-1) > .001)
31 {
32 fprintf (stderr, "div failed: 1/%d="WORD" (product = %f)\n", i, val, prod);
33 ret = 1;
34 }
35 }
36}
37
Jean-Marc Valina82dfdd2008-03-13 23:01:55 +110038void testsqrt(void)
Jean-Marc Valin92518982008-03-13 17:20:08 +110039{
40 celt_int32_t i;
41 for (i=1;i<=1000000000;i++)
42 {
43 double ratio;
44 celt_word16_t val;
45 val = celt_sqrt(i);
46 ratio = val/sqrt(i);
47 if (fabs(ratio - 1) > .001 && fabs(val-sqrt(i)) > 2)
48 {
49 fprintf (stderr, "sqrt failed: sqrt(%d)="WORD" (ratio = %f)\n", i, val, ratio);
50 ret = 1;
51 }
52 i+= i>>10;
53 }
54}
55
Jean-Marc Valina82dfdd2008-03-13 23:01:55 +110056int main(void)
Jean-Marc Valin92518982008-03-13 17:20:08 +110057{
58 testdiv();
59 testsqrt();
Jean-Marc Valin385795e2008-03-26 15:56:07 +110060 return ret;
Jean-Marc Valin92518982008-03-13 17:20:08 +110061}