8 int main(int _argc
,char **_argv
){
24 /*Testing encoding of raw bit values.*/
25 ec_byte_writeinit(&buf
);
26 ec_enc_init(&enc
,&buf
);
27 for(ft
=0;ft
<1024;ft
++){
29 entropy
+=log(ft
)*M_LOG2E
;
30 ec_enc_uint(&enc
,i
,ft
);
31 entropy
+=log(ft
)*M_LOG2E
+30
;
32 ec_enc_uint64(&enc
,(ec_uint64
)i
<<30|i
,(ec_uint64
)ft
<<30);
35 /*Testing encoding of raw bit values.*/
36 for(ftb
=0;ftb
<16;ftb
++){
37 for(i
=0;i
<(1<<ftb
);i
++){
39 nbits
=ec_enc_tell(&enc
,0);
40 ec_enc_bits(&enc
,i
,ftb
);
41 nbits2
=ec_enc_tell(&enc
,0);
42 if(nbits2
-nbits
!=ftb
){
43 fprintf(stderr
,"Used %li bits to encode %i bits directly.\n",
48 ec_enc_bits64(&enc
,(ec_uint64
)i
<<30|i
,ftb
+30);
49 nbits2
=ec_enc_tell(&enc
,0);
50 if(nbits2
-nbits
!=ftb
+30){
51 fprintf(stderr
,"Used %li bits to encode %i bits directly.\n",
56 for(sz
=1;sz
<256;sz
++){
57 ec_probmod_init_full(&mod
,sz
,1,sz
+(sz
>>1),NULL
);
59 s
=((unsigned)(i
*45678901+7))%sz
;
60 entropy
+=(log(mod
.ft
)-log(ec_bitree_get_freq(mod
.bitree
,s
)))*M_LOG2E
;
61 ec_probmod_write(&mod
,&enc
,s
);
63 ec_probmod_clear(&mod
);
65 for(sz
=11;sz
<256;sz
++){
66 ec_probmod_init_full(&mod
,sz
,1,sz
+(sz
>>1),NULL
);
68 s
=((unsigned)(i
*45678901+7))%sz
;
69 entropy
+=(log(ec_bitree_get_cumul(mod
.bitree
,EC_MINI(s
+6,sz
))-
70 ec_bitree_get_cumul(mod
.bitree
,EC_MAXI(s
-5,0)))-
71 log(ec_bitree_get_freq(mod
.bitree
,s
)))*M_LOG2E
;
72 ec_probmod_write_range(&mod
,&enc
,s
,EC_MAXI(s
-5,0),EC_MINI(s
+6,sz
));
74 ec_probmod_clear(&mod
);
76 nbits
=ec_enc_tell(&enc
,4);
79 "Encoded %0.2lf bits of entropy to %0.2lf bits (%0.3lf%% wasted).\n",
80 entropy
,ldexp(nbits
,-4),100*(nbits
-ldexp(entropy
,4))/nbits
);
81 fprintf(stderr
,"Packed to %li bytes.\n",(long)(buf
.ptr
-buf
.buf
));
82 ec_byte_readinit(&buf
,ec_byte_get_buffer(&buf
),ec_byte_bytes(&buf
));
83 ec_dec_init(&dec
,&buf
);
84 for(ft
=0;ft
<1024;ft
++){
86 sym
=ec_dec_uint(&dec
,ft
);
88 fprintf(stderr
,"Decoded %i instead of %i with ft of %i.\n",sym
,i
,ft
);
91 sym64
=ec_dec_uint64(&dec
,(ec_uint64
)ft
<<30);
92 if(sym64
!=((ec_uint64
)i
<<30|i
)){
93 fprintf(stderr
,"Decoded %lli instead of %lli with ft of %lli.\n",sym64
,
94 (ec_uint64
)i
<<30|i
,(ec_uint64
)ft
<<30);
98 for(ftb
=0;ftb
<16;ftb
++){
99 for(i
=0;i
<(1<<ftb
);i
++){
100 sym
=ec_dec_bits(&dec
,ftb
);
102 fprintf(stderr
,"Decoded %i instead of %i with ftb of %i.\n",sym
,i
,ftb
);
105 sym64
=ec_dec_bits64(&dec
,ftb
+30);
106 if(sym64
!=((ec_uint64
)i
<<30|i
)){
107 fprintf(stderr
,"Decoded %lli instead of %lli with ftb of %i.\n",
108 sym64
,(ec_uint64
)i
<<30|i
,ftb
+30);
112 for(sz
=1;sz
<256;sz
++){
113 ec_probmod_init_full(&mod
,sz
,1,sz
+(sz
>>1),NULL
);
115 s
=((unsigned)(i
*45678901+7))%sz
;
116 sym
=ec_probmod_read(&mod
,&dec
);
118 fprintf(stderr
,"Decoded %i instead of %i with sz of %i.\n",sym
,s
,sz
);
122 ec_probmod_clear(&mod
);
124 for(sz
=11;sz
<256;sz
++){
125 ec_probmod_init_full(&mod
,sz
,1,sz
+(sz
>>1),NULL
);
127 s
=((unsigned)(i
*45678901+7))%sz
;
128 sym
=ec_probmod_read_range(&mod
,&dec
,EC_MAXI(s
-5,0),EC_MINI(s
+6,sz
));
130 fprintf(stderr
,"Decoded %i instead of %i with sz of %i.\n",sym
,s
,sz
);
134 ec_probmod_clear(&mod
);
136 nbits2
=ec_dec_tell(&dec
,4);
139 "Reported number of bits used was %0.2lf, should be %0.2lf.\n",
140 ldexp(nbits2
,-4),ldexp(nbits
,-4));
142 ec_byte_writeclear(&buf
);
143 fprintf(stderr
,"Testing random streams...\n");
148 ft
=rand()/((RAND_MAX
>>9)+1)+512;
149 sz
=rand()/((RAND_MAX
>>9)+1);
150 data
=(unsigned *)malloc(sz
*sizeof(*data
));
151 ec_byte_writeinit(&buf
);
152 ec_enc_init(&enc
,&buf
);
155 ec_enc_uint(&enc
,data
[j
],ft
);
158 ec_byte_readinit(&buf
,ec_byte_get_buffer(&buf
),ec_byte_bytes(&buf
));
159 ec_dec_init(&dec
,&buf
);
161 sym
=ec_dec_uint(&dec
,ft
);
164 "Decoded %i instead of %i with ft of %i at position %i of %i.\n",
165 sym
,data
[j
],ft
,j
,sz
);
168 ec_byte_writeclear(&buf
);