sustaining_gazes/lib/3rdParty/dlib/include/dlib/test/entropy_encoder_model.cpp

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;
}