cannam@154: /* Copyright (c) 2007-2011 Xiph.Org Foundation, Mozilla Corporation, cannam@154: Gregory Maxwell cannam@154: Written by Jean-Marc Valin, Gregory Maxwell, and Timothy B. Terriberry */ cannam@154: /* cannam@154: Redistribution and use in source and binary forms, with or without cannam@154: modification, are permitted provided that the following conditions cannam@154: are met: cannam@154: cannam@154: - Redistributions of source code must retain the above copyright cannam@154: notice, this list of conditions and the following disclaimer. cannam@154: cannam@154: - Redistributions in binary form must reproduce the above copyright cannam@154: notice, this list of conditions and the following disclaimer in the cannam@154: documentation and/or other materials provided with the distribution. cannam@154: cannam@154: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS cannam@154: ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT cannam@154: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR cannam@154: A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER cannam@154: OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, cannam@154: EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, cannam@154: PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR cannam@154: PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF cannam@154: LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING cannam@154: NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS cannam@154: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cannam@154: */ cannam@154: cannam@154: #ifdef HAVE_CONFIG_H cannam@154: #include "config.h" cannam@154: #endif cannam@154: cannam@154: #include cannam@154: #include cannam@154: #include cannam@154: #include cannam@154: #define CELT_C cannam@154: #include "entcode.h" cannam@154: #include "entenc.h" cannam@154: #include "entdec.h" cannam@154: #include cannam@154: cannam@154: #include "entenc.c" cannam@154: #include "entdec.c" cannam@154: #include "entcode.c" cannam@154: cannam@154: #ifndef M_LOG2E cannam@154: # define M_LOG2E 1.4426950408889634074 cannam@154: #endif cannam@154: #define DATA_SIZE 10000000 cannam@154: #define DATA_SIZE2 10000 cannam@154: cannam@154: int main(int _argc,char **_argv){ cannam@154: ec_enc enc; cannam@154: ec_dec dec; cannam@154: long nbits; cannam@154: long nbits2; cannam@154: double entropy; cannam@154: int ft; cannam@154: int ftb; cannam@154: int sz; cannam@154: int i; cannam@154: int ret; cannam@154: unsigned int sym; cannam@154: unsigned int seed; cannam@154: unsigned char *ptr; cannam@154: const char *env_seed; cannam@154: ret=0; cannam@154: entropy=0; cannam@154: if (_argc > 2) { cannam@154: fprintf(stderr, "Usage: %s []\n", _argv[0]); cannam@154: return 1; cannam@154: } cannam@154: env_seed = getenv("SEED"); cannam@154: if (_argc > 1) cannam@154: seed = atoi(_argv[1]); cannam@154: else if (env_seed) cannam@154: seed = atoi(env_seed); cannam@154: else cannam@154: seed = time(NULL); cannam@154: /*Testing encoding of raw bit values.*/ cannam@154: ptr = (unsigned char *)malloc(DATA_SIZE); cannam@154: ec_enc_init(&enc,ptr, DATA_SIZE); cannam@154: for(ft=2;ft<1024;ft++){ cannam@154: for(i=0;i>(rand()%11U))+1U)+10; cannam@154: sz=rand()/((RAND_MAX>>(rand()%9U))+1U); cannam@154: data=(unsigned *)malloc(sz*sizeof(*data)); cannam@154: tell=(unsigned *)malloc((sz+1)*sizeof(*tell)); cannam@154: ec_enc_init(&enc,ptr,DATA_SIZE2); cannam@154: zeros = rand()%13==0; cannam@154: tell[0]=ec_tell_frac(&enc); cannam@154: for(j=0;j>(rand()%9U))+1U); cannam@154: logp1=(unsigned *)malloc(sz*sizeof(*logp1)); cannam@154: data=(unsigned *)malloc(sz*sizeof(*data)); cannam@154: tell=(unsigned *)malloc((sz+1)*sizeof(*tell)); cannam@154: enc_method=(unsigned *)malloc(sz*sizeof(*enc_method)); cannam@154: ec_enc_init(&enc,ptr,DATA_SIZE2); cannam@154: tell[0]=ec_tell_frac(&enc); cannam@154: for(j=0;j>1)+1); cannam@154: logp1[j]=(rand()%15)+1; cannam@154: enc_method[j]=rand()/((RAND_MAX>>2)+1); cannam@154: switch(enc_method[j]){ cannam@154: case 0:{ cannam@154: ec_encode(&enc,data[j]?(1<>2)+1); cannam@154: switch(dec_method){ cannam@154: case 0:{ cannam@154: fs=ec_decode(&dec,1<=(1<=(1<