1 // Copyright (C) 2005  Davis E. King (davis@dlib.net)
2 // License: Boost Software License   See LICENSE.txt for the full license.
3 
4 
5 #include <sstream>
6 #include <string>
7 #include <ctime>
8 #include <cstdlib>
9 
10 #include <dlib/entropy_encoder_model.h>
11 #include <dlib/entropy_decoder_model.h>
12 #include <dlib/entropy_encoder.h>
13 #include <dlib/entropy_decoder.h>
14 #include "tester.h"
15 
16 namespace
17 {
18     using namespace test;
19     using namespace std;
20     using namespace dlib;
21 
22     logger dlog("test.entropy_coder_model");
23 
24     template <
25         typename ee,
26         typename ed
27         >
entropy_encoder_model_kernel_test()28     void entropy_encoder_model_kernel_test (
29     )
30     /*!
31         requires
32             - ee is an implementation of entropy_encoder_model/entropy_encoder_model_kernel_abstract.h
33               the alphabet_size for ee is 256
34             - ed is an implementation of entropy_decoder_model/entropy_decoder_model_kernel_abstract.h
35               the alphabet_size for ed is 256
36             - ee and ed must share the same kernel number
37         ensures
38             - runs tests on ee and ed for compliance with the specs
39     !*/
40     {
41 
42         print_spinner();
43         srand(static_cast<unsigned int>(time(0)));
44 
45         typedef typename ee::entropy_encoder_type ee_type;
46         typedef typename ed::entropy_decoder_type ed_type;
47 
48 
49 
50         {
51 
52             ee_type ecoder;
53             ed_type dcoder;
54 
55             ee elen(ecoder);
56             ed dlen(dcoder);
57             ee elit(ecoder);
58             ed dlit(dcoder);
59 
60 
61             istringstream sin;
62             ostringstream sout;
63 
64             ecoder.set_stream(sout);
65 
66 
67             unsigned long temp;
68 
69 
70             elen.encode(0);
71             elit.encode(9);
72 
73             elen.encode(0);
74             elit.encode(0);
75 
76             elen.encode(0);
77             elit.encode(4);
78 
79             elen.encode(0);
80             elit.encode(0);
81 
82             elen.encode(0);
83             elit.encode(2);
84 
85             elen.encode(0);
86             elit.encode(0);
87 
88 
89 
90 
91 
92 
93 
94             ecoder.clear();
95             sin.str(sout.str());
96             dcoder.set_stream(sin);
97 
98 
99             dlen.decode(temp);
100             DLIB_TEST(temp == 0);
101             dlit.decode(temp);
102             DLIB_TEST(temp == 9);
103 
104             dlen.decode(temp);
105             DLIB_TEST(temp == 0);
106             dlit.decode(temp);
107             DLIB_TEST(temp == 0);
108 
109             dlen.decode(temp);
110             DLIB_TEST(temp == 0);
111             dlit.decode(temp);
112             DLIB_TEST(temp == 4);
113 
114             dlen.decode(temp);
115             DLIB_TEST(temp == 0);
116             dlit.decode(temp);
117             DLIB_TEST(temp == 0);
118 
119             dlen.decode(temp);
120             DLIB_TEST(temp == 0);
121             dlit.decode(temp);
122             DLIB_TEST(temp == 2);
123 
124             dlen.decode(temp);
125             DLIB_TEST(temp == 0);
126             dlit.decode(temp);
127             DLIB_TEST(temp == 0);
128 
129 
130 
131 
132         }
133 
134     }
135 
136 
137 
138 
139     class entropy_encoder_model_tester : public tester
140     {
141     public:
entropy_encoder_model_tester()142         entropy_encoder_model_tester (
143         ) :
144             tester ("test_entropy_coder_model",
145                     "Runs tests on the entropy_encoder_model and entropy_decoder_model components.")
146         {}
147 
perform_test()148         void perform_test (
149         )
150         {
151             typedef entropy_encoder::kernel_2a_c ee;
152             typedef entropy_decoder::kernel_2a_c ed;
153 
154             dlog << LINFO << "testing kernel_1a";
155             entropy_encoder_model_kernel_test<
156                 entropy_encoder_model<256,ee>::kernel_1a,
157                 entropy_decoder_model<256,ed>::kernel_1a>();
158 
159             dlog << LINFO << "testing kernel_2a";
160             entropy_encoder_model_kernel_test<
161                 entropy_encoder_model<256,ee>::kernel_2a,
162                 entropy_decoder_model<256,ed>::kernel_2a>();
163 
164             dlog << LINFO << "testing kernel_3a";
165             entropy_encoder_model_kernel_test<
166                 entropy_encoder_model<256,ee>::kernel_3a,
167                 entropy_decoder_model<256,ed>::kernel_3a>();
168 
169             dlog << LINFO << "testing kernel_4a";
170             entropy_encoder_model_kernel_test<
171                 entropy_encoder_model<256,ee>::kernel_4a,
172                 entropy_decoder_model<256,ed>::kernel_4a>();
173 
174             dlog << LINFO << "testing kernel_4b";
175             entropy_encoder_model_kernel_test<
176                 entropy_encoder_model<256,ee>::kernel_4b,
177                 entropy_decoder_model<256,ed>::kernel_4b>();
178 
179             dlog << LINFO << "testing kernel_5a";
180             entropy_encoder_model_kernel_test<
181                 entropy_encoder_model<256,ee>::kernel_5a,
182                 entropy_decoder_model<256,ed>::kernel_5a>();
183 
184             dlog << LINFO << "testing kernel_5c";
185             entropy_encoder_model_kernel_test<
186                 entropy_encoder_model<256,ee>::kernel_5c,
187                 entropy_decoder_model<256,ed>::kernel_5c>();
188 
189             dlog << LINFO << "testing kernel_6a";
190             entropy_encoder_model_kernel_test<
191                 entropy_encoder_model<256,ee>::kernel_6a,
192                 entropy_decoder_model<256,ed>::kernel_6a>();
193 
194         }
195     } a;
196 
197 }
198 
199