16b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org/* Copyright (c) 2008-2011 Xiph.Org Foundation
26b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   Written by Jean-Marc Valin */
36b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org/*
46b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   Redistribution and use in source and binary forms, with or without
56b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   modification, are permitted provided that the following conditions
66b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   are met:
76b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org
86b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   - Redistributions of source code must retain the above copyright
96b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   notice, this list of conditions and the following disclaimer.
106b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org
116b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   - Redistributions in binary form must reproduce the above copyright
126b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   notice, this list of conditions and the following disclaimer in the
136b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   documentation and/or other materials provided with the distribution.
146b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org
156b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
166b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
176b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
186b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
196b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
206b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
216b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
226b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
236b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
246b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
256b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
266b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org*/
276b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org
28885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef HAVE_CONFIG_H
29885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "config.h"
30885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
31885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
32885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SKIP_CONFIG_H
33885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
34885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef CUSTOM_MODES
35885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CUSTOM_MODES
36885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
37885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
38885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdio.h>
39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CELT_C
41885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "mdct.h"
42885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "stack_alloc.h"
43885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "kiss_fft.c"
45885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "mdct.c"
46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "mathops.c"
47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "entcode.c"
48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
49885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef M_PI
50885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define M_PI 3.141592653
51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
53885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint ret = 0;
54885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgvoid check(kiss_fft_scalar  * in,kiss_fft_scalar  * out,int nfft,int isinverse)
55885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{
56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    int bin,k;
57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    double errpow=0,sigpow=0;
58885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    double snr;
59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    for (bin=0;bin<nfft/2;++bin) {
60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        double ansr = 0;
61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        double difr;
62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        for (k=0;k<nfft;++k) {
64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org           double phase = 2*M_PI*(k+.5+.25*nfft)*(bin+.5)/nfft;
65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org           double re = cos(phase);
66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org           re /= nfft/4;
68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org           ansr += in[k] * re;
70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        }
71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        /*printf ("%f %f\n", ansr, out[bin]);*/
72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        difr = ansr - out[bin];
73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        errpow += difr*difr;
74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        sigpow += ansr*ansr;
75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }
76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    snr = 10*log10(sigpow/errpow);
77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    printf("nfft=%d inverse=%d,snr = %f\n",nfft,isinverse,snr );
78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    if (snr<60) {
79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       printf( "** poor snr: %f **\n", snr);
80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       ret = 1;
81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }
82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}
83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
84885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgvoid check_inv(kiss_fft_scalar  * in,kiss_fft_scalar  * out,int nfft,int isinverse)
85885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{
86885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   int bin,k;
87885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   double errpow=0,sigpow=0;
88885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   double snr;
89885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   for (bin=0;bin<nfft;++bin) {
90885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org      double ansr = 0;
91885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org      double difr;
92885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
93885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org      for (k=0;k<nfft/2;++k) {
94885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org         double phase = 2*M_PI*(bin+.5+.25*nfft)*(k+.5)/nfft;
95885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org         double re = cos(phase);
96885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
97885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org         /*re *= 2;*/
98885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
99885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org         ansr += in[k] * re;
100885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org      }
101885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org      /*printf ("%f %f\n", ansr, out[bin]);*/
102885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org      difr = ansr - out[bin];
103885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org      errpow += difr*difr;
104885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org      sigpow += ansr*ansr;
105885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   }
106885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   snr = 10*log10(sigpow/errpow);
107885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   printf("nfft=%d inverse=%d,snr = %f\n",nfft,isinverse,snr );
108885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   if (snr<60) {
109885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org      printf( "** poor snr: %f **\n", snr);
110885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org      ret = 1;
111885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   }
112885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}
113885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
114885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
115885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgvoid test1d(int nfft,int isinverse)
116885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{
117885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    mdct_lookup cfg;
118885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    size_t buflen = sizeof(kiss_fft_scalar)*nfft;
119885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
120885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    kiss_fft_scalar  * in = (kiss_fft_scalar*)malloc(buflen);
121885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    kiss_fft_scalar  * in_copy = (kiss_fft_scalar*)malloc(buflen);
122885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    kiss_fft_scalar  * out= (kiss_fft_scalar*)malloc(buflen);
123885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    opus_val16  * window= (opus_val16*)malloc(sizeof(opus_val16)*nfft/2);
124885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    int k;
125885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
126885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    clt_mdct_init(&cfg, nfft, 0);
127885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    for (k=0;k<nfft;++k) {
128885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        in[k] = (rand() % 32768) - 16384;
129885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }
130885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
131885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    for (k=0;k<nfft/2;++k) {
132885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       window[k] = Q15ONE;
133885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }
134885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    for (k=0;k<nfft;++k) {
135885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       in[k] *= 32768;
136885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }
137885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
138885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    if (isinverse)
139885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    {
140885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       for (k=0;k<nfft;++k) {
141885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org          in[k] /= nfft;
142885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       }
143885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }
144885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
145885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    for (k=0;k<nfft;++k)
146885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       in_copy[k] = in[k];
147885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    /*for (k=0;k<nfft;++k) printf("%d %d ", in[k].r, in[k].i);printf("\n");*/
148885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
149885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    if (isinverse)
150885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    {
151885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       for (k=0;k<nfft;++k)
152885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org          out[k] = 0;
153885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       clt_mdct_backward(&cfg,in,out, window, nfft/2, 0, 1);
154e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org       /* apply TDAC because clt_mdct_backward() no longer does that */
155e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org       for (k=0;k<nfft/4;++k)
156e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org          out[nfft-k-1] = out[nfft/2+k];
157885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       check_inv(in,out,nfft,isinverse);
158885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    } else {
159885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       clt_mdct_forward(&cfg,in,out,window, nfft/2, 0, 1);
160885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org       check(in_copy,out,nfft,isinverse);
161885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }
162885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    /*for (k=0;k<nfft;++k) printf("%d %d ", out[k].r, out[k].i);printf("\n");*/
163885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
164885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
165885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    free(in);
166885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    free(out);
167885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    clt_mdct_clear(&cfg);
168885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}
169885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
170885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint main(int argc,char ** argv)
171885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{
172885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    ALLOC_STACK;
173885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    if (argc>1) {
174885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        int k;
175885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        for (k=1;k<argc;++k) {
176885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            test1d(atoi(argv[k]),0);
177885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            test1d(atoi(argv[k]),1);
178885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        }
179885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }else{
180885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(32,0);
181885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(32,1);
182885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(256,0);
183885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(256,1);
184885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(512,0);
185885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(512,1);
186e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(1024,0);
187e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(1024,1);
188e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(2048,0);
189e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(2048,1);
190885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef RADIX_TWO_ONLY
191e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(36,0);
192e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(36,1);
193885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(40,0);
194885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(40,1);
195e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(60,0);
196e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(60,1);
197885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(120,0);
198885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(120,1);
199885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(240,0);
200885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(240,1);
201885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(480,0);
202885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        test1d(480,1);
203e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(960,0);
204e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(960,1);
205e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(1920,0);
206e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org        test1d(1920,1);
207885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
208885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }
209885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    return ret;
210885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}
211