sustaining_gazes/lib/3rdParty/dlib/include/dlib/test/tester.h
2016-04-28 15:40:36 -04:00

187 lines
5.3 KiB
C++

// Copyright (C) 2006 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_TESTEr_
#define DLIB_TESTEr_
#include <iostream>
#include <string>
#include <dlib/map.h>
#include <dlib/logger.h>
#include <dlib/assert.h>
#include <dlib/algs.h>
#include <typeinfo>
#ifdef __INTEL_COMPILER
// ignore the bogus warning about not overloading perform_test() all the way
#pragma warning (disable: 654)
#endif
#define DLIB_TEST(_exp) check_test(_exp, __LINE__, __FILE__, #_exp);
#define DLIB_TEST_MSG(_exp,_message) \
{increment_test_count(); if ( !(_exp) ) \
{ \
std::ostringstream dlib_o_out; \
dlib_o_out << "\n\nError occurred at line " << __LINE__ << ".\n"; \
dlib_o_out << "Error occurred in file " << __FILE__ << ".\n"; \
dlib_o_out << "Failing expression was " << #_exp << ".\n"; \
dlib_o_out << _message << "\n"; \
throw dlib::error(dlib_o_out.str()); \
}}
namespace test
{
class tester;
typedef dlib::map<std::string,tester*>::kernel_1a_c map_of_testers;
map_of_testers& testers (
);
// -----------------------------------------------------------------------------
void check_test (
bool _exp,
long line,
const char* file,
const char* _exp_str
);
// -----------------------------------------------------------------------------
// This bool controls any cout statements in this program. Only print to
// standard out if we should be verbose. The default is true
extern bool be_verbose;
// -----------------------------------------------------------------------------
dlib::uint64 number_of_testing_statements_executed (
);
/*!
ensures
- returns the total number of DLIB_TEST and DLIB_TEST_MSG
statements executed since program startup.
!*/
void increment_test_count (
);
/*!
ensures
- increments number_of_testing_statements_executed()
!*/
// -----------------------------------------------------------------------------
void print_spinner (
);
/*!
ensures
- reprints the spinner
!*/
// -----------------------------------------------------------------------------
class tester
{
/*!
WHAT THIS OBJECT REPRESENTS
This object represents a generic regression test.
!*/
public:
tester (
const std::string& switch_name,
const std::string& description_,
unsigned long num_of_args_ = 0
);
/*!
requires
- testers().is_in_domain(switch_name) == false
ensures
- #cmd_line_switch() == switch_name
- #description() == description_
- #num_of_args() == num_of_args_
- adds this tester to the testers() map.
!*/
virtual ~tester (
){}
const std::string& cmd_line_switch (
) const;
/*!
ensures
- returns the name of the command line switch for this tester.
!*/
const std::string& description (
) const;
/*!
ensures
- returns the description of what this tester tests.
!*/
unsigned long num_of_args (
) const;
/*!
ensures
- returns the number of arguments this test expects
!*/
virtual void perform_test (
);
/*!
requires
- is invoked when number_of_args() == 0
ensures
- performs the test and throws an exception
derived from std::exception if the test fails.
!*/
virtual void perform_test (
const std::string& arg
);
/*!
requires
- is invoked when number_of_args() == 1
ensures
- performs the test and throws an exception
derived from std::exception if the test fails.
!*/
virtual void perform_test (
const std::string& arg1,
const std::string& arg2
);
/*!
requires
- is invoked when number_of_args() == 2
ensures
- performs the test and throws an exception
derived from std::exception if the test fails.
!*/
private:
// ---------------------------------------------------------------------------
// Implementation Details
// ---------------------------------------------------------------------------
/*!
CONVENTION
- switch_name == cmd_line_switch()
- description_ == description()
- num_of_args_ == num_of_args()
- test::tester[switch_name] == this
!*/
const std::string switch_name;
const std::string description_;
const unsigned long num_of_args_;
};
}
#endif // DLIB_TESTEr_