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