blob: a08222a52806914491a1960129868e591f5f3c07 [file] [log] [blame]
Timothy B. Terriberry2ec8d9e2007-12-06 15:09:53 +11001#include <stdio.h>
2#include "probenc.h"
3#include "probdec.h"
4
5int main(int _argc,char **_argv){
6 ec_byte_buffer buf;
7 ec_enc enc;
8 ec_dec dec;
9 ec_probmod mod;
10 int ft;
11 int ftb;
12 int sym;
13 int sz;
14 int s;
15 int i;
16 /*Testing encoding of raw bit values.*/
17 ec_byte_writeinit(&buf);
18 ec_enc_init(&enc,&buf);
19 for(ft=0;ft<1024;ft++){
20 for(i=0;i<ft;i++){
21 ec_enc_uint(&enc,i,ft);
22 }
23 }
24 /*Testing encoding of raw bit values.*/
25 for(ftb=0;ftb<16;ftb++){
26 for(i=0;i<(1<<ftb);i++){
27 ec_enc_bits(&enc,i,ftb);
28 }
29 }
30 for(sz=1;sz<256;sz++){
31 ec_probmod_init_full(&mod,sz,1,sz+(sz>>1),NULL);
32 for(i=0;i<sz;i++){
33 s=((unsigned)(i*45678901+7))%sz;
34 ec_probmod_write(&mod,&enc,s);
35 }
36 ec_probmod_clear(&mod);
37 }
38 for(sz=11;sz<256;sz++){
39 ec_probmod_init_full(&mod,sz,1,sz+(sz>>1),NULL);
40 for(i=0;i<sz;i++){
41 s=((unsigned)(i*45678901+7))%sz;
42 ec_probmod_write_range(&mod,&enc,s,EC_MAXI(s-5,0),EC_MINI(s+6,sz));
43 }
44 ec_probmod_clear(&mod);
45 }
46 ec_enc_done(&enc);
47 fprintf(stderr,"Encoded to %li bytes.\n",(long)(buf.ptr-buf.buf));
48 ec_byte_readinit(&buf,ec_byte_get_buffer(&buf),ec_byte_bytes(&buf));
49 ec_dec_init(&dec,&buf);
50 for(ft=0;ft<1024;ft++){
51 for(i=0;i<ft;i++){
52 sym=ec_dec_uint(&dec,ft);
53 if(sym!=i){
54 fprintf(stderr,"Decoded %i instead of %i with ft of %i.\n",sym,i,ft);
55 return -1;
56 }
57 }
58 }
59 for(ftb=0;ftb<16;ftb++){
60 for(i=0;i<(1<<ftb);i++){
61 sym=ec_dec_bits(&dec,ftb);
62 if(sym!=i){
63 fprintf(stderr,"Decoded %i instead of %i with ftb of %i.\n",sym,i,ftb);
64 return -1;
65 }
66 }
67 }
68 for(sz=1;sz<256;sz++){
69 ec_probmod_init_full(&mod,sz,1,sz+(sz>>1),NULL);
70 for(i=0;i<sz;i++){
71 s=((unsigned)(i*45678901+7))%sz;
72 sym=ec_probmod_read(&mod,&dec);
73 if(sym!=s){
74 fprintf(stderr,"Decoded %i instead of %i with sz of %i.\n",sym,s,sz);
75 return -1;
76 }
77 }
78 ec_probmod_clear(&mod);
79 }
80 for(sz=11;sz<256;sz++){
81 ec_probmod_init_full(&mod,sz,1,sz+(sz>>1),NULL);
82 for(i=0;i<sz;i++){
83 s=((unsigned)(i*45678901+7))%sz;
84 sym=ec_probmod_read_range(&mod,&dec,EC_MAXI(s-5,0),EC_MINI(s+6,sz));
85 if(sym!=s){
86 fprintf(stderr,"Decoded %i instead of %i with sz of %i.\n",sym,s,sz);
87 return -1;
88 }
89 }
90 ec_probmod_clear(&mod);
91 }
92 ec_byte_writeclear(&buf);
93 fprintf(stderr,"All tests passed.\n");
94 return 0;
95}