Chris@69: /* Copyright (c) 2008-2011 Xiph.Org Foundation, Mozilla Corporation Chris@69: Written by Jean-Marc Valin and Timothy B. Terriberry */ Chris@69: /* Chris@69: Redistribution and use in source and binary forms, with or without Chris@69: modification, are permitted provided that the following conditions Chris@69: are met: Chris@69: Chris@69: - Redistributions of source code must retain the above copyright Chris@69: notice, this list of conditions and the following disclaimer. Chris@69: Chris@69: - Redistributions in binary form must reproduce the above copyright Chris@69: notice, this list of conditions and the following disclaimer in the Chris@69: documentation and/or other materials provided with the distribution. Chris@69: Chris@69: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS Chris@69: ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT Chris@69: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR Chris@69: A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER Chris@69: OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, Chris@69: EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, Chris@69: PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR Chris@69: PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF Chris@69: LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING Chris@69: NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS Chris@69: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Chris@69: */ Chris@69: Chris@69: #ifdef HAVE_CONFIG_H Chris@69: #include "config.h" Chris@69: #endif Chris@69: Chris@69: #include Chris@69: #include Chris@69: #define CELT_C Chris@69: #include "laplace.h" Chris@69: #include "stack_alloc.h" Chris@69: Chris@69: #include "entenc.c" Chris@69: #include "entdec.c" Chris@69: #include "entcode.c" Chris@69: #include "laplace.c" Chris@69: Chris@69: #define DATA_SIZE 40000 Chris@69: Chris@69: int ec_laplace_get_start_freq(int decay) Chris@69: { Chris@69: opus_uint32 ft = 32768 - LAPLACE_MINP*(2*LAPLACE_NMIN+1); Chris@69: int fs = (ft*(16384-decay))/(16384+decay); Chris@69: return fs+LAPLACE_MINP; Chris@69: } Chris@69: Chris@69: int main(void) Chris@69: { Chris@69: int i; Chris@69: int ret = 0; Chris@69: ec_enc enc; Chris@69: ec_dec dec; Chris@69: unsigned char *ptr; Chris@69: int val[10000], decay[10000]; Chris@69: ALLOC_STACK; Chris@69: ptr = (unsigned char *)malloc(DATA_SIZE); Chris@69: ec_enc_init(&enc,ptr,DATA_SIZE); Chris@69: Chris@69: val[0] = 3; decay[0] = 6000; Chris@69: val[1] = 0; decay[1] = 5800; Chris@69: val[2] = -1; decay[2] = 5600; Chris@69: for (i=3;i<10000;i++) Chris@69: { Chris@69: val[i] = rand()%15-7; Chris@69: decay[i] = rand()%11000+5000; Chris@69: } Chris@69: for (i=0;i<10000;i++) Chris@69: ec_laplace_encode(&enc, &val[i], Chris@69: ec_laplace_get_start_freq(decay[i]), decay[i]); Chris@69: Chris@69: ec_enc_done(&enc); Chris@69: Chris@69: ec_dec_init(&dec,ec_get_buffer(&enc),ec_range_bytes(&enc)); Chris@69: Chris@69: for (i=0;i<10000;i++) Chris@69: { Chris@69: int d = ec_laplace_decode(&dec, Chris@69: ec_laplace_get_start_freq(decay[i]), decay[i]); Chris@69: if (d != val[i]) Chris@69: { Chris@69: fprintf (stderr, "Got %d instead of %d\n", d, val[i]); Chris@69: ret = 1; Chris@69: } Chris@69: } Chris@69: Chris@69: free(ptr); Chris@69: return ret; Chris@69: }