blob: 6e5a0833f31d19811f13da5e6a8bf8a69fd0d879 [file] [log] [blame]
Jean-Marc Valin9caa3342008-02-20 15:00:26 +11001#ifdef HAVE_CONFIG_H
2#include "config.h"
3#endif
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "laplace.h"
Gregory Maxwell083883e2009-06-03 20:02:53 -04008#define CELT_C
9#include "../libcelt/stack_alloc.h"
Jean-Marc Valin9caa3342008-02-20 15:00:26 +110010
Jean-Marc Valin4d108fc2008-12-23 09:31:39 -050011#include "../libcelt/rangeenc.c"
12#include "../libcelt/rangedec.c"
13#include "../libcelt/entenc.c"
14#include "../libcelt/entdec.c"
15#include "../libcelt/entcode.c"
16#include "../libcelt/laplace.c"
17
18
Jean-Marc Valina82dfdd2008-03-13 23:01:55 +110019int main(void)
Jean-Marc Valin9caa3342008-02-20 15:00:26 +110020{
21 int i;
Jean-Marc Valin3df6e272008-02-20 15:08:08 +110022 int ret = 0;
Jean-Marc Valin9caa3342008-02-20 15:00:26 +110023 ec_enc enc;
24 ec_dec dec;
25 ec_byte_buffer buf;
26 int val[10000], decay[10000];
Jean-Marc Valinf7cec832008-04-18 17:29:56 +100027 ALLOC_STACK;
Jean-Marc Valin9caa3342008-02-20 15:00:26 +110028 ec_byte_writeinit(&buf);
29 ec_enc_init(&enc,&buf);
30
Jean-Marc Valin7cdc5a32008-03-01 20:56:17 +110031 val[0] = 3; decay[0] = 6000;
32 val[1] = 0; decay[1] = 5800;
33 val[2] = -1; decay[2] = 5600;
Jean-Marc Valin7ff2cbc2008-03-02 21:25:22 +110034 for (i=3;i<10000;i++)
Jean-Marc Valin9caa3342008-02-20 15:00:26 +110035 {
36 val[i] = rand()%15-7;
37 decay[i] = rand()%11000+5000;
Jean-Marc Valin9caa3342008-02-20 15:00:26 +110038 }
Jean-Marc Valin7cdc5a32008-03-01 20:56:17 +110039 for (i=0;i<10000;i++)
Jean-Marc Valin45e358f2008-05-28 00:58:42 +100040 ec_laplace_encode(&enc, &val[i], decay[i]);
Jean-Marc Valin9caa3342008-02-20 15:00:26 +110041
42 ec_enc_done(&enc);
43
44 ec_byte_readinit(&buf,ec_byte_get_buffer(&buf),ec_byte_bytes(&buf));
45 ec_dec_init(&dec,&buf);
46
47 for (i=0;i<10000;i++)
48 {
49 int d = ec_laplace_decode(&dec, decay[i]);
50 if (d != val[i])
Jean-Marc Valin3df6e272008-02-20 15:08:08 +110051 {
Jean-Marc Valin9caa3342008-02-20 15:00:26 +110052 fprintf (stderr, "Got %d instead of %d\n", d, val[i]);
Jean-Marc Valin3df6e272008-02-20 15:08:08 +110053 ret = 1;
54 }
Jean-Marc Valin9caa3342008-02-20 15:00:26 +110055 }
56
57 ec_byte_writeclear(&buf);
Jean-Marc Valin3df6e272008-02-20 15:08:08 +110058 return ret;
Jean-Marc Valin9caa3342008-02-20 15:00:26 +110059}