blob: 0a541265946ac731fce09c4d012808c6a8632ffc [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;
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
Jean-Marc Valina82dfdd2008-03-13 23:01:55 +110040void testsqrt(void)
Jean-Marc Valin92518982008-03-13 17:20:08 +110041{
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
Jean-Marc Valina82dfdd2008-03-13 23:01:55 +110058int main(void)
Jean-Marc Valin92518982008-03-13 17:20:08 +110059{
60 testdiv();
61 testsqrt();
62 return 0;
63}