199 lines
5.0 KiB
C++
199 lines
5.0 KiB
C++
// Copyright (C) 2005 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
|
|
|
|
#include <sstream>
|
|
#include <string>
|
|
#include <ctime>
|
|
#include <cstdlib>
|
|
|
|
#include <dlib/entropy_encoder_model.h>
|
|
#include <dlib/entropy_decoder_model.h>
|
|
#include <dlib/entropy_encoder.h>
|
|
#include <dlib/entropy_decoder.h>
|
|
#include "tester.h"
|
|
|
|
namespace
|
|
{
|
|
using namespace test;
|
|
using namespace std;
|
|
using namespace dlib;
|
|
|
|
logger dlog("test.entropy_coder_model");
|
|
|
|
template <
|
|
typename ee,
|
|
typename ed
|
|
>
|
|
void entropy_encoder_model_kernel_test (
|
|
)
|
|
/*!
|
|
requires
|
|
- ee is an implementation of entropy_encoder_model/entropy_encoder_model_kernel_abstract.h
|
|
the alphabet_size for ee is 256
|
|
- ed is an implementation of entropy_decoder_model/entropy_decoder_model_kernel_abstract.h
|
|
the alphabet_size for ed is 256
|
|
- ee and ed must share the same kernel number
|
|
ensures
|
|
- runs tests on ee and ed for compliance with the specs
|
|
!*/
|
|
{
|
|
|
|
print_spinner();
|
|
srand(static_cast<unsigned int>(time(0)));
|
|
|
|
typedef typename ee::entropy_encoder_type ee_type;
|
|
typedef typename ed::entropy_decoder_type ed_type;
|
|
|
|
|
|
|
|
{
|
|
|
|
ee_type ecoder;
|
|
ed_type dcoder;
|
|
|
|
ee elen(ecoder);
|
|
ed dlen(dcoder);
|
|
ee elit(ecoder);
|
|
ed dlit(dcoder);
|
|
|
|
|
|
istringstream sin;
|
|
ostringstream sout;
|
|
|
|
ecoder.set_stream(sout);
|
|
|
|
|
|
unsigned long temp;
|
|
|
|
|
|
elen.encode(0);
|
|
elit.encode(9);
|
|
|
|
elen.encode(0);
|
|
elit.encode(0);
|
|
|
|
elen.encode(0);
|
|
elit.encode(4);
|
|
|
|
elen.encode(0);
|
|
elit.encode(0);
|
|
|
|
elen.encode(0);
|
|
elit.encode(2);
|
|
|
|
elen.encode(0);
|
|
elit.encode(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ecoder.clear();
|
|
sin.str(sout.str());
|
|
dcoder.set_stream(sin);
|
|
|
|
|
|
dlen.decode(temp);
|
|
DLIB_TEST(temp == 0);
|
|
dlit.decode(temp);
|
|
DLIB_TEST(temp == 9);
|
|
|
|
dlen.decode(temp);
|
|
DLIB_TEST(temp == 0);
|
|
dlit.decode(temp);
|
|
DLIB_TEST(temp == 0);
|
|
|
|
dlen.decode(temp);
|
|
DLIB_TEST(temp == 0);
|
|
dlit.decode(temp);
|
|
DLIB_TEST(temp == 4);
|
|
|
|
dlen.decode(temp);
|
|
DLIB_TEST(temp == 0);
|
|
dlit.decode(temp);
|
|
DLIB_TEST(temp == 0);
|
|
|
|
dlen.decode(temp);
|
|
DLIB_TEST(temp == 0);
|
|
dlit.decode(temp);
|
|
DLIB_TEST(temp == 2);
|
|
|
|
dlen.decode(temp);
|
|
DLIB_TEST(temp == 0);
|
|
dlit.decode(temp);
|
|
DLIB_TEST(temp == 0);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class entropy_encoder_model_tester : public tester
|
|
{
|
|
public:
|
|
entropy_encoder_model_tester (
|
|
) :
|
|
tester ("test_entropy_coder_model",
|
|
"Runs tests on the entropy_encoder_model and entropy_decoder_model components.")
|
|
{}
|
|
|
|
void perform_test (
|
|
)
|
|
{
|
|
typedef entropy_encoder::kernel_2a_c ee;
|
|
typedef entropy_decoder::kernel_2a_c ed;
|
|
|
|
dlog << LINFO << "testing kernel_1a";
|
|
entropy_encoder_model_kernel_test<
|
|
entropy_encoder_model<256,ee>::kernel_1a,
|
|
entropy_decoder_model<256,ed>::kernel_1a>();
|
|
|
|
dlog << LINFO << "testing kernel_2a";
|
|
entropy_encoder_model_kernel_test<
|
|
entropy_encoder_model<256,ee>::kernel_2a,
|
|
entropy_decoder_model<256,ed>::kernel_2a>();
|
|
|
|
dlog << LINFO << "testing kernel_3a";
|
|
entropy_encoder_model_kernel_test<
|
|
entropy_encoder_model<256,ee>::kernel_3a,
|
|
entropy_decoder_model<256,ed>::kernel_3a>();
|
|
|
|
dlog << LINFO << "testing kernel_4a";
|
|
entropy_encoder_model_kernel_test<
|
|
entropy_encoder_model<256,ee>::kernel_4a,
|
|
entropy_decoder_model<256,ed>::kernel_4a>();
|
|
|
|
dlog << LINFO << "testing kernel_4b";
|
|
entropy_encoder_model_kernel_test<
|
|
entropy_encoder_model<256,ee>::kernel_4b,
|
|
entropy_decoder_model<256,ed>::kernel_4b>();
|
|
|
|
dlog << LINFO << "testing kernel_5a";
|
|
entropy_encoder_model_kernel_test<
|
|
entropy_encoder_model<256,ee>::kernel_5a,
|
|
entropy_decoder_model<256,ed>::kernel_5a>();
|
|
|
|
dlog << LINFO << "testing kernel_5c";
|
|
entropy_encoder_model_kernel_test<
|
|
entropy_encoder_model<256,ee>::kernel_5c,
|
|
entropy_decoder_model<256,ed>::kernel_5c>();
|
|
|
|
dlog << LINFO << "testing kernel_6a";
|
|
entropy_encoder_model_kernel_test<
|
|
entropy_encoder_model<256,ee>::kernel_6a,
|
|
entropy_decoder_model<256,ed>::kernel_6a>();
|
|
|
|
}
|
|
} a;
|
|
|
|
}
|
|
|