1*a58d3d2aSXin Li /* Copyright (c) 2008-2011 Xiph.Org Foundation, Mozilla Corporation,
2*a58d3d2aSXin Li Gregory Maxwell
3*a58d3d2aSXin Li Written by Jean-Marc Valin, Gregory Maxwell, and Timothy B. Terriberry */
4*a58d3d2aSXin Li /*
5*a58d3d2aSXin Li Redistribution and use in source and binary forms, with or without
6*a58d3d2aSXin Li modification, are permitted provided that the following conditions
7*a58d3d2aSXin Li are met:
8*a58d3d2aSXin Li
9*a58d3d2aSXin Li - Redistributions of source code must retain the above copyright
10*a58d3d2aSXin Li notice, this list of conditions and the following disclaimer.
11*a58d3d2aSXin Li
12*a58d3d2aSXin Li - Redistributions in binary form must reproduce the above copyright
13*a58d3d2aSXin Li notice, this list of conditions and the following disclaimer in the
14*a58d3d2aSXin Li documentation and/or other materials provided with the distribution.
15*a58d3d2aSXin Li
16*a58d3d2aSXin Li THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17*a58d3d2aSXin Li ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18*a58d3d2aSXin Li LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19*a58d3d2aSXin Li A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
20*a58d3d2aSXin Li OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21*a58d3d2aSXin Li EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22*a58d3d2aSXin Li PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23*a58d3d2aSXin Li PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24*a58d3d2aSXin Li LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25*a58d3d2aSXin Li NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26*a58d3d2aSXin Li SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*a58d3d2aSXin Li */
28*a58d3d2aSXin Li
29*a58d3d2aSXin Li #ifdef HAVE_CONFIG_H
30*a58d3d2aSXin Li #include "config.h"
31*a58d3d2aSXin Li #endif
32*a58d3d2aSXin Li
33*a58d3d2aSXin Li #include <stdio.h>
34*a58d3d2aSXin Li #include <string.h>
35*a58d3d2aSXin Li
36*a58d3d2aSXin Li #ifndef CUSTOM_MODES
37*a58d3d2aSXin Li #define CUSTOM_MODES
38*a58d3d2aSXin Li #else
39*a58d3d2aSXin Li #define TEST_CUSTOM_MODES
40*a58d3d2aSXin Li #endif
41*a58d3d2aSXin Li
42*a58d3d2aSXin Li #define CELT_C
43*a58d3d2aSXin Li #include "stack_alloc.h"
44*a58d3d2aSXin Li #include "entenc.c"
45*a58d3d2aSXin Li #include "entdec.c"
46*a58d3d2aSXin Li #include "entcode.c"
47*a58d3d2aSXin Li #include "cwrs.c"
48*a58d3d2aSXin Li #include "mathops.c"
49*a58d3d2aSXin Li #include "rate.h"
50*a58d3d2aSXin Li
51*a58d3d2aSXin Li #define NMAX (240)
52*a58d3d2aSXin Li #define KMAX (128)
53*a58d3d2aSXin Li
54*a58d3d2aSXin Li #ifdef TEST_CUSTOM_MODES
55*a58d3d2aSXin Li
56*a58d3d2aSXin Li #define NDIMS (44)
57*a58d3d2aSXin Li static const int pn[NDIMS]={
58*a58d3d2aSXin Li 2, 3, 4, 5, 6, 7, 8, 9, 10,
59*a58d3d2aSXin Li 11, 12, 13, 14, 15, 16, 18, 20, 22,
60*a58d3d2aSXin Li 24, 26, 28, 30, 32, 36, 40, 44, 48,
61*a58d3d2aSXin Li 52, 56, 60, 64, 72, 80, 88, 96, 104,
62*a58d3d2aSXin Li 112, 120, 128, 144, 160, 176, 192, 208
63*a58d3d2aSXin Li };
64*a58d3d2aSXin Li static const int pkmax[NDIMS]={
65*a58d3d2aSXin Li 128, 128, 128, 128, 88, 52, 36, 26, 22,
66*a58d3d2aSXin Li 18, 16, 15, 13, 12, 12, 11, 10, 9,
67*a58d3d2aSXin Li 9, 8, 8, 7, 7, 7, 7, 6, 6,
68*a58d3d2aSXin Li 6, 6, 6, 5, 5, 5, 5, 5, 5,
69*a58d3d2aSXin Li 4, 4, 4, 4, 4, 4, 4, 4
70*a58d3d2aSXin Li };
71*a58d3d2aSXin Li
72*a58d3d2aSXin Li #else /* TEST_CUSTOM_MODES */
73*a58d3d2aSXin Li
74*a58d3d2aSXin Li #define NDIMS (22)
75*a58d3d2aSXin Li static const int pn[NDIMS]={
76*a58d3d2aSXin Li 2, 3, 4, 6, 8, 9, 11, 12, 16,
77*a58d3d2aSXin Li 18, 22, 24, 32, 36, 44, 48, 64, 72,
78*a58d3d2aSXin Li 88, 96, 144, 176
79*a58d3d2aSXin Li };
80*a58d3d2aSXin Li static const int pkmax[NDIMS]={
81*a58d3d2aSXin Li 128, 128, 128, 88, 36, 26, 18, 16, 12,
82*a58d3d2aSXin Li 11, 9, 9, 7, 7, 6, 6, 5, 5,
83*a58d3d2aSXin Li 5, 5, 4, 4
84*a58d3d2aSXin Li };
85*a58d3d2aSXin Li
86*a58d3d2aSXin Li #endif
87*a58d3d2aSXin Li
main(void)88*a58d3d2aSXin Li int main(void){
89*a58d3d2aSXin Li int t;
90*a58d3d2aSXin Li int n;
91*a58d3d2aSXin Li ALLOC_STACK;
92*a58d3d2aSXin Li for(t=0;t<NDIMS;t++){
93*a58d3d2aSXin Li int pseudo;
94*a58d3d2aSXin Li n=pn[t];
95*a58d3d2aSXin Li for(pseudo=1;pseudo<41;pseudo++)
96*a58d3d2aSXin Li {
97*a58d3d2aSXin Li int k;
98*a58d3d2aSXin Li #if defined(SMALL_FOOTPRINT)
99*a58d3d2aSXin Li opus_uint32 uu[KMAX+2U];
100*a58d3d2aSXin Li #endif
101*a58d3d2aSXin Li opus_uint32 inc;
102*a58d3d2aSXin Li opus_uint32 nc;
103*a58d3d2aSXin Li opus_uint32 i;
104*a58d3d2aSXin Li k=get_pulses(pseudo);
105*a58d3d2aSXin Li if (k>pkmax[t])break;
106*a58d3d2aSXin Li printf("Testing CWRS with N=%i, K=%i...\n",n,k);
107*a58d3d2aSXin Li #if defined(SMALL_FOOTPRINT)
108*a58d3d2aSXin Li nc=ncwrs_urow(n,k,uu);
109*a58d3d2aSXin Li #else
110*a58d3d2aSXin Li nc=CELT_PVQ_V(n,k);
111*a58d3d2aSXin Li #endif
112*a58d3d2aSXin Li inc=nc/20000;
113*a58d3d2aSXin Li if(inc<1)inc=1;
114*a58d3d2aSXin Li for(i=0;i<nc;i+=inc){
115*a58d3d2aSXin Li #if defined(SMALL_FOOTPRINT)
116*a58d3d2aSXin Li opus_uint32 u[KMAX+2U];
117*a58d3d2aSXin Li #endif
118*a58d3d2aSXin Li int y[NMAX];
119*a58d3d2aSXin Li int sy;
120*a58d3d2aSXin Li opus_uint32 v;
121*a58d3d2aSXin Li opus_uint32 ii;
122*a58d3d2aSXin Li int j;
123*a58d3d2aSXin Li #if defined(SMALL_FOOTPRINT)
124*a58d3d2aSXin Li memcpy(u,uu,(k+2U)*sizeof(*u));
125*a58d3d2aSXin Li cwrsi(n,k,i,y,u);
126*a58d3d2aSXin Li #else
127*a58d3d2aSXin Li cwrsi(n,k,i,y);
128*a58d3d2aSXin Li #endif
129*a58d3d2aSXin Li sy=0;
130*a58d3d2aSXin Li for(j=0;j<n;j++)sy+=abs(y[j]);
131*a58d3d2aSXin Li if(sy!=k){
132*a58d3d2aSXin Li fprintf(stderr,"N=%d Pulse count mismatch in cwrsi (%d!=%d).\n",
133*a58d3d2aSXin Li n,sy,k);
134*a58d3d2aSXin Li return 99;
135*a58d3d2aSXin Li }
136*a58d3d2aSXin Li /*printf("%6u of %u:",i,nc);
137*a58d3d2aSXin Li for(j=0;j<n;j++)printf(" %+3i",y[j]);
138*a58d3d2aSXin Li printf(" ->");*/
139*a58d3d2aSXin Li #if defined(SMALL_FOOTPRINT)
140*a58d3d2aSXin Li ii=icwrs(n,k,&v,y,u);
141*a58d3d2aSXin Li #else
142*a58d3d2aSXin Li ii=icwrs(n,y);
143*a58d3d2aSXin Li v=CELT_PVQ_V(n,k);
144*a58d3d2aSXin Li #endif
145*a58d3d2aSXin Li if(ii!=i){
146*a58d3d2aSXin Li fprintf(stderr,"Combination-index mismatch (%lu!=%lu).\n",
147*a58d3d2aSXin Li (long)ii,(long)i);
148*a58d3d2aSXin Li return 1;
149*a58d3d2aSXin Li }
150*a58d3d2aSXin Li if(v!=nc){
151*a58d3d2aSXin Li fprintf(stderr,"Combination count mismatch (%lu!=%lu).\n",
152*a58d3d2aSXin Li (long)v,(long)nc);
153*a58d3d2aSXin Li return 2;
154*a58d3d2aSXin Li }
155*a58d3d2aSXin Li /*printf(" %6u\n",i);*/
156*a58d3d2aSXin Li }
157*a58d3d2aSXin Li /*printf("\n");*/
158*a58d3d2aSXin Li }
159*a58d3d2aSXin Li }
160*a58d3d2aSXin Li RESTORE_STACK;
161*a58d3d2aSXin Li return 0;
162*a58d3d2aSXin Li }
163