Added mathops-test
[opus.git] / tests / mathops-test.c
1 #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
15 int ret = 0;
16
17 void testdiv()
18 {
19    celt_int32_t i;
20    for (i=-327670;i<=327670;i++)
21    {
22       double prod;
23       celt_word32_t val;
24       if (i==0)
25          continue;
26       val = celt_rcp(i);
27 #ifdef FIXED_POINT
28       prod = (1./32768./65526.)*val*i;
29 #else
30       prod = val*i;
31 #endif
32       if (fabs(prod-1) > .001)
33       {
34          fprintf (stderr, "div failed: 1/%d="WORD" (product = %f)\n", i, val, prod);
35          ret = 1;
36       }
37    }
38 }
39
40 void testsqrt()
41 {
42    celt_int32_t i;
43    for (i=1;i<=1000000000;i++)
44    {
45       double ratio;
46       celt_word16_t val;
47       val = celt_sqrt(i);
48       ratio = val/sqrt(i);
49       if (fabs(ratio - 1) > .001 && fabs(val-sqrt(i)) > 2)
50       {
51          fprintf (stderr, "sqrt failed: sqrt(%d)="WORD" (ratio = %f)\n", i, val, ratio);
52          ret = 1;
53       }
54       i+= i>>10;
55    }
56 }
57
58 int main()
59 {
60    testdiv();
61    testsqrt();
62    return 0;
63 }