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