cwrs32-test.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #ifdef HAVE_CONFIG_H
  2. #include "config.h"
  3. #endif
  4. #include <stdio.h>
  5. #include <string.h>
  6. #define CELT_C
  7. #include "../celt/stack_alloc.h"
  8. #include "../celt/entenc.c"
  9. #include "../celt/entdec.c"
  10. #include "../celt/entcode.c"
  11. #include "../celt/cwrs.c"
  12. #include "../celt/mathops.c"
  13. #include "../celt/rate.h"
  14. #define NMAX (240)
  15. #define KMAX (128)
  16. #ifdef CUSTOM_MODES
  17. #define NDIMS (46)
  18. static const int pn[NDIMS]={
  19. 2, 3, 4, 5, 6, 7, 8, 9, 10,
  20. 11, 12, 13, 14, 15, 16, 18, 20, 22,
  21. 24, 26, 28, 30, 32, 36, 40, 44, 48,
  22. 52, 56, 60, 64, 72, 80, 88, 96, 104,
  23. 112, 120, 128, 144, 160, 176, 192, 208, 224,
  24. 240
  25. };
  26. static const int pkmax[NDIMS]={
  27. 128, 128, 128, 128, 88, 52, 36, 26, 22,
  28. 18, 16, 15, 13, 12, 12, 11, 10, 9,
  29. 9, 8, 8, 7, 7, 7, 7, 6, 6,
  30. 6, 6, 6, 5, 5, 5, 5, 5, 5,
  31. 4, 4, 4, 4, 4, 4, 4, 4, 4,
  32. 4
  33. };
  34. #else /* CUSTOM_MODES */
  35. #define NDIMS (22)
  36. static const int pn[NDIMS]={
  37. 2, 3, 4, 6, 8, 9, 11, 12, 16,
  38. 18, 22, 24, 32, 36, 44, 48, 64, 72,
  39. 88, 96, 144, 176
  40. };
  41. static const int pkmax[NDIMS]={
  42. 128, 128, 128, 88, 36, 26, 18, 16, 12,
  43. 11, 9, 9, 7, 7, 6, 6, 5, 5,
  44. 5, 5, 4, 4
  45. };
  46. #endif
  47. int main(void){
  48. int t;
  49. int n;
  50. ALLOC_STACK;
  51. for(t=0;t<NDIMS;t++){
  52. int pseudo;
  53. n=pn[t];
  54. for(pseudo=1;pseudo<41;pseudo++)
  55. {
  56. int k;
  57. opus_uint32 uu[KMAX+2U];
  58. opus_uint32 inc;
  59. opus_uint32 nc;
  60. opus_uint32 i;
  61. k=get_pulses(pseudo);
  62. if (k>pkmax[t])break;
  63. printf("Testing CWRS with N=%i, K=%i...\n",n,k);
  64. nc=ncwrs_urow(n,k,uu);
  65. inc=nc/20000;
  66. if(inc<1)inc=1;
  67. for(i=0;i<nc;i+=inc){
  68. opus_uint32 u[KMAX+2U];
  69. int y[NMAX];
  70. int sy;
  71. int yy[5];
  72. opus_uint32 v;
  73. opus_uint32 ii;
  74. int kk;
  75. int j;
  76. memcpy(u,uu,(k+2U)*sizeof(*u));
  77. cwrsi(n,k,i,y,u);
  78. sy=0;
  79. for(j=0;j<n;j++)sy+=ABS(y[j]);
  80. if(sy!=k){
  81. fprintf(stderr,"N=%d Pulse count mismatch in cwrsi (%d!=%d).\n",
  82. n,sy,k);
  83. return 99;
  84. }
  85. /*printf("%6u of %u:",i,nc);
  86. for(j=0;j<n;j++)printf(" %+3i",y[j]);
  87. printf(" ->");*/
  88. ii=icwrs(n,k,&v,y,u);
  89. if(ii!=i){
  90. fprintf(stderr,"Combination-index mismatch (%lu!=%lu).\n",
  91. (long)ii,(long)i);
  92. return 1;
  93. }
  94. if(v!=nc){
  95. fprintf(stderr,"Combination count mismatch (%lu!=%lu).\n",
  96. (long)v,(long)nc);
  97. return 2;
  98. }
  99. #ifndef SMALL_FOOTPRINT
  100. if(n==2){
  101. cwrsi2(k,i,yy);
  102. for(j=0;j<2;j++)if(yy[j]!=y[j]){
  103. fprintf(stderr,"N=2 pulse vector mismatch ({%i,%i}!={%i,%i}).\n",
  104. yy[0],yy[1],y[0],y[1]);
  105. return 3;
  106. }
  107. ii=icwrs2(yy,&kk);
  108. if(ii!=i){
  109. fprintf(stderr,"N=2 combination-index mismatch (%lu!=%lu).\n",
  110. (long)ii,(long)i);
  111. return 4;
  112. }
  113. if(kk!=k){
  114. fprintf(stderr,"N=2 pulse count mismatch (%i,%i).\n",kk,k);
  115. return 5;
  116. }
  117. v=ncwrs2(k);
  118. if(v!=nc){
  119. fprintf(stderr,"N=2 combination count mismatch (%lu,%lu).\n",
  120. (long)v,(long)nc);
  121. return 6;
  122. }
  123. }
  124. else if(n==3){
  125. cwrsi3(k,i,yy);
  126. for(j=0;j<3;j++)if(yy[j]!=y[j]){
  127. fprintf(stderr,"N=3 pulse vector mismatch "
  128. "({%i,%i,%i}!={%i,%i,%i}).\n",yy[0],yy[1],yy[2],y[0],y[1],y[2]);
  129. return 7;
  130. }
  131. ii=icwrs3(yy,&kk);
  132. if(ii!=i){
  133. fprintf(stderr,"N=3 combination-index mismatch (%lu!=%lu).\n",
  134. (long)ii,(long)i);
  135. return 8;
  136. }
  137. if(kk!=k){
  138. fprintf(stderr,"N=3 pulse count mismatch (%i!=%i).\n",kk,k);
  139. return 9;
  140. }
  141. v=ncwrs3(k);
  142. if(v!=nc){
  143. fprintf(stderr,"N=3 combination count mismatch (%lu!=%lu).\n",
  144. (long)v,(long)nc);
  145. return 10;
  146. }
  147. }
  148. else if(n==4){
  149. cwrsi4(k,i,yy);
  150. for(j=0;j<4;j++)if(yy[j]!=y[j]){
  151. fprintf(stderr,"N=4 pulse vector mismatch "
  152. "({%i,%i,%i,%i}!={%i,%i,%i,%i}.\n",
  153. yy[0],yy[1],yy[2],yy[3],y[0],y[1],y[2],y[3]);
  154. return 11;
  155. }
  156. ii=icwrs4(yy,&kk);
  157. if(ii!=i){
  158. fprintf(stderr,"N=4 combination-index mismatch (%lu!=%lu).\n",
  159. (long)ii,(long)i);
  160. return 12;
  161. }
  162. if(kk!=k){
  163. fprintf(stderr,"N=4 pulse count mismatch (%i!=%i).\n",kk,k);
  164. return 13;
  165. }
  166. v=ncwrs4(k);
  167. if(v!=nc){
  168. fprintf(stderr,"N=4 combination count mismatch (%lu!=%lu).\n",
  169. (long)v,(long)nc);
  170. return 14;
  171. }
  172. }
  173. #endif /* SMALL_FOOTPRINT */
  174. /*printf(" %6u\n",i);*/
  175. }
  176. /*printf("\n");*/
  177. }
  178. }
  179. return 0;
  180. }