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;
 | |
| }
 |