Further simplifications to comb2pulses() to remove all conditional branches.
[opus.git] / tests / cwrs64-test.c
1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #endif
4
5 #include <stdio.h>
6 #include "cwrs.h"
7 #include <string.h>
8
9 #define NMAX (32)
10 #define MMAX (16)
11
12 int main(int _argc,char **_argv){
13   int n;
14   for(n=2;n<=NMAX;n+=3){
15     int m;
16     for(m=1;m<=MMAX;m++){
17       celt_uint64_t uu[NMAX];
18       celt_uint64_t inc;
19       celt_uint64_t nc;
20       celt_uint64_t i;
21       nc=ncwrs_u64(n,m,uu);
22       /*Testing all cases just wouldn't work!*/
23       inc=nc/1000;
24       if(inc<1)inc=1;
25       /*printf("%d/%d: %llu",n,m, nc);*/
26       for(i=0;i<nc;i+=inc){
27         celt_uint64_t u[NMAX];
28         int           x[MMAX];
29         int           s[MMAX];
30         int           x2[MMAX];
31         int           s2[MMAX];
32         int           y[NMAX];
33         int           k;
34         memcpy(u,uu,n*sizeof(*u));
35         cwrsi64(n,m,i,x,s,u);
36         /*printf("%llu of %llu:",i,nc);
37         for(k=0;k<m;k++){
38           printf(" %c%i",k>0&&x[k]==x[k-1]?' ':s[k]?'-':'+',x[k]);
39         }
40         printf(" ->");*/
41         memcpy(u,uu,n*sizeof(*u));
42         if(icwrs64(n,m,x,s,u)!=i){
43           fprintf(stderr,"Combination-index mismatch.\n");
44           return 1;
45         }
46         comb2pulse(n,m,y,x,s);
47         /*for(j=0;j<n;j++)printf(" %c%i",y[j]?y[j]<0?'-':'+':' ',abs(y[j]));
48         printf("\n");*/
49         pulse2comb(n,m,x2,s2,y);
50         for(k=0;k<m;k++)if(x[k]!=x2[k]||s[k]!=s2[k]){
51           fprintf(stderr,"Pulse-combination mismatch.\n");
52           return 1;
53         }
54       }
55       /*printf("\n");*/
56     }
57   }
58   return 0;
59 }