diff options
Diffstat (limited to 'ml/dlib/dlib/test/tester.cpp')
-rw-r--r-- | ml/dlib/dlib/test/tester.cpp | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/ml/dlib/dlib/test/tester.cpp b/ml/dlib/dlib/test/tester.cpp new file mode 100644 index 000000000..2fb4d41ac --- /dev/null +++ b/ml/dlib/dlib/test/tester.cpp @@ -0,0 +1,175 @@ +// Copyright (C) 2006 Davis E. King (davis@dlib.net) +// License: Boost Software License See LICENSE.txt for the full license. + +#include <string> +#include "tester.h" +#include <cstdlib> +#include <dlib/threads.h> + +namespace test +{ +// ----------------------------------------------------------------------------- + + bool be_verbose = true; + +// ----------------------------------------------------------------------------- + + static dlib::mutex spinner_mutex; + static dlib::mutex test_count_mutex; + dlib::uint64 test_count = 0; + +// ----------------------------------------------------------------------------- + + dlib::uint64 number_of_testing_statements_executed ( + ) + { + dlib::auto_mutex lock(test_count_mutex); + return test_count; + } + + void increment_test_count ( + ) + { + test_count_mutex.lock(); + ++test_count; + test_count_mutex.unlock(); + } + +// ----------------------------------------------------------------------------- + + void check_test ( + bool _exp, + long line, + const char* file, + const char* _exp_str + ) + { + test_count_mutex.lock(); + ++test_count; + test_count_mutex.unlock(); + 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_str << ".\n"; + throw dlib::error(dlib_o_out.str()); + } + } + +// ----------------------------------------------------------------------------- + + map_of_testers& testers ( + ) + { + static map_of_testers t; + return t; + } + +// ----------------------------------------------------------------------------- + + tester:: + tester ( + const std::string& switch_name_x, + const std::string& description_x, + unsigned long num_of_args_x + ) : + switch_name(switch_name_x), + description_(description_x), + num_of_args_(num_of_args_x) + { + using namespace std; + if (testers().is_in_domain(switch_name)) + { + cerr << "ERROR: More than one tester has been defined with the switch '" << switch_name << "'." << endl; + exit(1); + } + + string temp(switch_name); + tester* t = this; + testers().add(temp,t); + } + +// ----------------------------------------------------------------------------- + + const std::string& tester:: + cmd_line_switch ( + ) const + { + return switch_name; + } + +// ----------------------------------------------------------------------------- + + const std::string& tester:: + description ( + ) const + { + return description_; + } + +// ----------------------------------------------------------------------------- + + unsigned long tester:: + num_of_args ( + ) const + { + return num_of_args_; + } + +// ----------------------------------------------------------------------------- + + void tester:: + perform_test ( + ) + { + } + +// ----------------------------------------------------------------------------- + + void tester:: + perform_test ( + const std::string& + ) + { + } + +// ----------------------------------------------------------------------------- + + void tester:: + perform_test ( + const std::string&, + const std::string& + ) + { + } + +// ----------------------------------------------------------------------------- + + void print_spinner ( + ) + { + if (be_verbose) + { + using namespace std; + dlib::auto_mutex M(spinner_mutex); + static int i = 0; + cout << "\b\b"; + switch (i) + { + case 0: cout << '|'; break; + case 1: cout << '/'; break; + case 2: cout << '-'; break; + case 3: cout << '\\'; break; + } + cout << " " << flush; + i = (i+1)%4; + } + } + +// ----------------------------------------------------------------------------- + +} + + + |