Index: webrtc/modules/audio_coding/codecs/opus/opus/src/celt/tests/test_unit_cwrs32.c |
diff --git a/webrtc/modules/audio_coding/codecs/opus/opus/src/celt/tests/test_unit_cwrs32.c b/webrtc/modules/audio_coding/codecs/opus/opus/src/celt/tests/test_unit_cwrs32.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..36dd8af5f5c4469217c9440fffd4668415ee9acb |
--- /dev/null |
+++ b/webrtc/modules/audio_coding/codecs/opus/opus/src/celt/tests/test_unit_cwrs32.c |
@@ -0,0 +1,161 @@ |
+/* Copyright (c) 2008-2011 Xiph.Org Foundation, Mozilla Corporation, |
+ Gregory Maxwell |
+ Written by Jean-Marc Valin, Gregory Maxwell, and Timothy B. Terriberry */ |
+/* |
+ Redistribution and use in source and binary forms, with or without |
+ modification, are permitted provided that the following conditions |
+ are met: |
+ |
+ - Redistributions of source code must retain the above copyright |
+ notice, this list of conditions and the following disclaimer. |
+ |
+ - Redistributions in binary form must reproduce the above copyright |
+ notice, this list of conditions and the following disclaimer in the |
+ documentation and/or other materials provided with the distribution. |
+ |
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER |
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+*/ |
+ |
+#ifdef HAVE_CONFIG_H |
+#include "config.h" |
+#endif |
+ |
+#include <stdio.h> |
+#include <string.h> |
+ |
+#ifndef CUSTOM_MODES |
+#define CUSTOM_MODES |
+#else |
+#define TEST_CUSTOM_MODES |
+#endif |
+ |
+#define CELT_C |
+#include "stack_alloc.h" |
+#include "entenc.c" |
+#include "entdec.c" |
+#include "entcode.c" |
+#include "cwrs.c" |
+#include "mathops.c" |
+#include "rate.h" |
+ |
+#define NMAX (240) |
+#define KMAX (128) |
+ |
+#ifdef TEST_CUSTOM_MODES |
+ |
+#define NDIMS (44) |
+static const int pn[NDIMS]={ |
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, |
+ 11, 12, 13, 14, 15, 16, 18, 20, 22, |
+ 24, 26, 28, 30, 32, 36, 40, 44, 48, |
+ 52, 56, 60, 64, 72, 80, 88, 96, 104, |
+ 112, 120, 128, 144, 160, 176, 192, 208 |
+}; |
+static const int pkmax[NDIMS]={ |
+ 128, 128, 128, 128, 88, 52, 36, 26, 22, |
+ 18, 16, 15, 13, 12, 12, 11, 10, 9, |
+ 9, 8, 8, 7, 7, 7, 7, 6, 6, |
+ 6, 6, 6, 5, 5, 5, 5, 5, 5, |
+ 4, 4, 4, 4, 4, 4, 4, 4 |
+}; |
+ |
+#else /* TEST_CUSTOM_MODES */ |
+ |
+#define NDIMS (22) |
+static const int pn[NDIMS]={ |
+ 2, 3, 4, 6, 8, 9, 11, 12, 16, |
+ 18, 22, 24, 32, 36, 44, 48, 64, 72, |
+ 88, 96, 144, 176 |
+}; |
+static const int pkmax[NDIMS]={ |
+ 128, 128, 128, 88, 36, 26, 18, 16, 12, |
+ 11, 9, 9, 7, 7, 6, 6, 5, 5, |
+ 5, 5, 4, 4 |
+}; |
+ |
+#endif |
+ |
+int main(void){ |
+ int t; |
+ int n; |
+ ALLOC_STACK; |
+ for(t=0;t<NDIMS;t++){ |
+ int pseudo; |
+ n=pn[t]; |
+ for(pseudo=1;pseudo<41;pseudo++) |
+ { |
+ int k; |
+#if defined(SMALL_FOOTPRINT) |
+ opus_uint32 uu[KMAX+2U]; |
+#endif |
+ opus_uint32 inc; |
+ opus_uint32 nc; |
+ opus_uint32 i; |
+ k=get_pulses(pseudo); |
+ if (k>pkmax[t])break; |
+ printf("Testing CWRS with N=%i, K=%i...\n",n,k); |
+#if defined(SMALL_FOOTPRINT) |
+ nc=ncwrs_urow(n,k,uu); |
+#else |
+ nc=CELT_PVQ_V(n,k); |
+#endif |
+ inc=nc/20000; |
+ if(inc<1)inc=1; |
+ for(i=0;i<nc;i+=inc){ |
+#if defined(SMALL_FOOTPRINT) |
+ opus_uint32 u[KMAX+2U]; |
+#endif |
+ int y[NMAX]; |
+ int sy; |
+ opus_uint32 v; |
+ opus_uint32 ii; |
+ int j; |
+#if defined(SMALL_FOOTPRINT) |
+ memcpy(u,uu,(k+2U)*sizeof(*u)); |
+ cwrsi(n,k,i,y,u); |
+#else |
+ cwrsi(n,k,i,y); |
+#endif |
+ sy=0; |
+ for(j=0;j<n;j++)sy+=abs(y[j]); |
+ if(sy!=k){ |
+ fprintf(stderr,"N=%d Pulse count mismatch in cwrsi (%d!=%d).\n", |
+ n,sy,k); |
+ return 99; |
+ } |
+ /*printf("%6u of %u:",i,nc); |
+ for(j=0;j<n;j++)printf(" %+3i",y[j]); |
+ printf(" ->");*/ |
+#if defined(SMALL_FOOTPRINT) |
+ ii=icwrs(n,k,&v,y,u); |
+#else |
+ ii=icwrs(n,y); |
+ v=CELT_PVQ_V(n,k); |
+#endif |
+ if(ii!=i){ |
+ fprintf(stderr,"Combination-index mismatch (%lu!=%lu).\n", |
+ (long)ii,(long)i); |
+ return 1; |
+ } |
+ if(v!=nc){ |
+ fprintf(stderr,"Combination count mismatch (%lu!=%lu).\n", |
+ (long)v,(long)nc); |
+ return 2; |
+ } |
+ /*printf(" %6u\n",i);*/ |
+ } |
+ /*printf("\n");*/ |
+ } |
+ } |
+ return 0; |
+} |