162 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			162 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /* 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; | ||
|  | } |