| Chris@69 | 1 /* Copyright (c) 2008-2011 Xiph.Org Foundation, Mozilla Corporation | 
| Chris@69 | 2    Written by Jean-Marc Valin and Timothy B. Terriberry */ | 
| Chris@69 | 3 /* | 
| Chris@69 | 4    Redistribution and use in source and binary forms, with or without | 
| Chris@69 | 5    modification, are permitted provided that the following conditions | 
| Chris@69 | 6    are met: | 
| Chris@69 | 7 | 
| Chris@69 | 8    - Redistributions of source code must retain the above copyright | 
| Chris@69 | 9    notice, this list of conditions and the following disclaimer. | 
| Chris@69 | 10 | 
| Chris@69 | 11    - Redistributions in binary form must reproduce the above copyright | 
| Chris@69 | 12    notice, this list of conditions and the following disclaimer in the | 
| Chris@69 | 13    documentation and/or other materials provided with the distribution. | 
| Chris@69 | 14 | 
| Chris@69 | 15    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| Chris@69 | 16    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| Chris@69 | 17    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
| Chris@69 | 18    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER | 
| Chris@69 | 19    OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | 
| Chris@69 | 20    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | 
| Chris@69 | 21    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | 
| Chris@69 | 22    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | 
| Chris@69 | 23    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | 
| Chris@69 | 24    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 
| Chris@69 | 25    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| Chris@69 | 26 */ | 
| Chris@69 | 27 | 
| Chris@69 | 28 #ifdef HAVE_CONFIG_H | 
| Chris@69 | 29 #include "config.h" | 
| Chris@69 | 30 #endif | 
| Chris@69 | 31 | 
| Chris@69 | 32 #include <stdio.h> | 
| Chris@69 | 33 #include <stdlib.h> | 
| Chris@69 | 34 #define CELT_C | 
| Chris@69 | 35 #include "laplace.h" | 
| Chris@69 | 36 #include "stack_alloc.h" | 
| Chris@69 | 37 | 
| Chris@69 | 38 #include "entenc.c" | 
| Chris@69 | 39 #include "entdec.c" | 
| Chris@69 | 40 #include "entcode.c" | 
| Chris@69 | 41 #include "laplace.c" | 
| Chris@69 | 42 | 
| Chris@69 | 43 #define DATA_SIZE 40000 | 
| Chris@69 | 44 | 
| Chris@69 | 45 int ec_laplace_get_start_freq(int decay) | 
| Chris@69 | 46 { | 
| Chris@69 | 47    opus_uint32 ft = 32768 - LAPLACE_MINP*(2*LAPLACE_NMIN+1); | 
| Chris@69 | 48    int fs = (ft*(16384-decay))/(16384+decay); | 
| Chris@69 | 49    return fs+LAPLACE_MINP; | 
| Chris@69 | 50 } | 
| Chris@69 | 51 | 
| Chris@69 | 52 int main(void) | 
| Chris@69 | 53 { | 
| Chris@69 | 54    int i; | 
| Chris@69 | 55    int ret = 0; | 
| Chris@69 | 56    ec_enc enc; | 
| Chris@69 | 57    ec_dec dec; | 
| Chris@69 | 58    unsigned char *ptr; | 
| Chris@69 | 59    int val[10000], decay[10000]; | 
| Chris@69 | 60    ALLOC_STACK; | 
| Chris@69 | 61    ptr = (unsigned char *)malloc(DATA_SIZE); | 
| Chris@69 | 62    ec_enc_init(&enc,ptr,DATA_SIZE); | 
| Chris@69 | 63 | 
| Chris@69 | 64    val[0] = 3; decay[0] = 6000; | 
| Chris@69 | 65    val[1] = 0; decay[1] = 5800; | 
| Chris@69 | 66    val[2] = -1; decay[2] = 5600; | 
| Chris@69 | 67    for (i=3;i<10000;i++) | 
| Chris@69 | 68    { | 
| Chris@69 | 69       val[i] = rand()%15-7; | 
| Chris@69 | 70       decay[i] = rand()%11000+5000; | 
| Chris@69 | 71    } | 
| Chris@69 | 72    for (i=0;i<10000;i++) | 
| Chris@69 | 73       ec_laplace_encode(&enc, &val[i], | 
| Chris@69 | 74             ec_laplace_get_start_freq(decay[i]), decay[i]); | 
| Chris@69 | 75 | 
| Chris@69 | 76    ec_enc_done(&enc); | 
| Chris@69 | 77 | 
| Chris@69 | 78    ec_dec_init(&dec,ec_get_buffer(&enc),ec_range_bytes(&enc)); | 
| Chris@69 | 79 | 
| Chris@69 | 80    for (i=0;i<10000;i++) | 
| Chris@69 | 81    { | 
| Chris@69 | 82       int d = ec_laplace_decode(&dec, | 
| Chris@69 | 83             ec_laplace_get_start_freq(decay[i]), decay[i]); | 
| Chris@69 | 84       if (d != val[i]) | 
| Chris@69 | 85       { | 
| Chris@69 | 86          fprintf (stderr, "Got %d instead of %d\n", d, val[i]); | 
| Chris@69 | 87          ret = 1; | 
| Chris@69 | 88       } | 
| Chris@69 | 89    } | 
| Chris@69 | 90 | 
| Chris@69 | 91    free(ptr); | 
| Chris@69 | 92    return ret; | 
| Chris@69 | 93 } |