blob: b7ffdacd15e920881d8f1cce390ca1305d80bb26 [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 Valin189acec2008-03-26 16:42:42 +110056void testrsqrt(void)
57{
58 celt_int32_t i;
59 for (i=1;i<=2000000;i++)
60 {
61 double ratio;
62 celt_word16_t val;
63 val = celt_rsqrt(i);
64 ratio = val*sqrt(i)/32768;
65 if (fabs(ratio - 1) > .05)
66 {
67 fprintf (stderr, "sqrt failed: sqrt(%d)="WORD" (ratio = %f)\n", i, val, ratio);
68 ret = 1;
69 }
70 i+= i>>10;
71 }
72}
73
Jean-Marc Valina82dfdd2008-03-13 23:01:55 +110074int main(void)
Jean-Marc Valin92518982008-03-13 17:20:08 +110075{
76 testdiv();
77 testsqrt();
Jean-Marc Valin189acec2008-03-26 16:42:42 +110078 testrsqrt();
Jean-Marc Valin385795e2008-03-26 15:56:07 +110079 return ret;
Jean-Marc Valin92518982008-03-13 17:20:08 +110080}