diff options
author | Giorgio Arena <giorgio.arena@arm.com> | 2017-10-25 15:47:08 +0100 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:35:24 +0000 |
commit | 2d09993bed545f836cd624577c3ae749de6329b7 (patch) | |
tree | 2beb032f58a164b0547c36b678e038e1510e7f80 /tests | |
parent | 5cbd20f10f1a51dc177c4e9e7c0be01261870260 (diff) | |
download | ComputeLibrary-2d09993bed545f836cd624577c3ae749de6329b7.tar.gz |
COMPMID-621 Support several printers for tests
Change-Id: I2e8e98aab1ec14c2a1bf17db2facc908b241b783
Reviewed-on: http://mpd-gerrit.cambridge.arm.com/93308
Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/framework/Framework.cpp | 132 | ||||
-rw-r--r-- | tests/framework/Framework.h | 16 | ||||
-rw-r--r-- | tests/main.cpp | 2 |
3 files changed, 104 insertions, 46 deletions
diff --git a/tests/framework/Framework.cpp b/tests/framework/Framework.cpp index 318f9b1d4c..82ea0fa93d 100644 --- a/tests/framework/Framework.cpp +++ b/tests/framework/Framework.cpp @@ -134,11 +134,20 @@ void Framework::print_test_info(std::ostream &os) const } } +template <typename F> +void Framework::func_on_all_printers(F &&func) +{ + std::for_each(std::begin(_printers), std::end(_printers), func); +} + void Framework::log_test_start(const TestInfo &info) { - if(_printer != nullptr && _log_level >= LogLevel::TESTS) + if(_log_level >= LogLevel::TESTS) { - _printer->print_test_header(info); + func_on_all_printers([&](Printer * p) + { + p->print_test_header(info); + }); } } @@ -149,17 +158,20 @@ void Framework::log_test_skipped(const TestInfo &info) void Framework::log_test_end(const TestInfo &info) { - if(_printer != nullptr) + if(_log_level >= LogLevel::MEASUREMENTS) { - if(_log_level >= LogLevel::MEASUREMENTS) + func_on_all_printers([&](Printer * p) { - _printer->print_measurements(_test_results.at(info).measurements); - } + p->print_measurements(_test_results.at(info).measurements); + }); + } - if(_log_level >= LogLevel::TESTS) + if(_log_level >= LogLevel::TESTS) + { + func_on_all_printers([](Printer * p) { - _printer->print_test_footer(); - } + p->print_test_footer(); + }); } } @@ -170,9 +182,12 @@ void Framework::log_failed_expectation(const TestError &error) const bool is_expected_failure = _current_test_info->status == TestCaseFactory::Status::EXPECTED_FAILURE; - if(_log_level >= error.level() && _printer != nullptr) + if(_log_level >= error.level()) { - _printer->print_error(error, is_expected_failure); + func_on_all_printers([&](Printer * p) + { + p->print_error(error, is_expected_failure); + }); } _current_test_result->status = TestResult::Status::FAILED; @@ -180,9 +195,12 @@ void Framework::log_failed_expectation(const TestError &error) void Framework::log_info(const std::string &info) { - if(_log_level >= LogLevel::DEBUG && _printer != nullptr) + if(_log_level >= LogLevel::DEBUG) { - _printer->print_info(info); + func_on_all_printers([&](Printer * p) + { + p->print_info(info); + }); } } @@ -243,9 +261,12 @@ void Framework::run_test(const TestInfo &info, TestCaseFactory &test_factory) _current_test_info = &info; _current_test_result = &result; - if(_log_level >= LogLevel::ERRORS && _printer != nullptr) + if(_log_level >= LogLevel::ERRORS) { - _printer->print_errors_header(); + func_on_all_printers([](Printer * p) + { + p->print_errors_header(); + }); } const bool is_expected_failure = info.status == TestCaseFactory::Status::EXPECTED_FAILURE; @@ -283,10 +304,13 @@ void Framework::run_test(const TestInfo &info, TestCaseFactory &test_factory) { if(_error_on_missing_assets) { - if(_log_level >= LogLevel::ERRORS && _printer != nullptr) + if(_log_level >= LogLevel::ERRORS) { TestError test_error(error.what(), LogLevel::ERRORS); - _printer->print_error(test_error, is_expected_failure); + func_on_all_printers([&](Printer * p) + { + p->print_error(test_error, is_expected_failure); + }); } result.status = TestResult::Status::FAILED; @@ -298,9 +322,12 @@ void Framework::run_test(const TestInfo &info, TestCaseFactory &test_factory) } else { - if(_log_level >= LogLevel::DEBUG && _printer != nullptr) + if(_log_level >= LogLevel::DEBUG) { - _printer->print_info(error.what()); + func_on_all_printers([&](Printer * p) + { + p->print_info(error.what()); + }); } result.status = TestResult::Status::NOT_RUN; @@ -308,9 +335,12 @@ void Framework::run_test(const TestInfo &info, TestCaseFactory &test_factory) } catch(const TestError &error) { - if(_log_level >= error.level() && _printer != nullptr) + if(_log_level >= error.level()) { - _printer->print_error(error, is_expected_failure); + func_on_all_printers([&](Printer * p) + { + p->print_error(error, is_expected_failure); + }); } result.status = TestResult::Status::FAILED; @@ -323,12 +353,15 @@ void Framework::run_test(const TestInfo &info, TestCaseFactory &test_factory) #ifdef ARM_COMPUTE_CL catch(const ::cl::Error &error) { - if(_log_level >= LogLevel::ERRORS && _printer != nullptr) + if(_log_level >= LogLevel::ERRORS) { std::stringstream stream; stream << "Error code: " << error.err(); TestError test_error(error.what(), LogLevel::ERRORS, stream.str()); - _printer->print_error(test_error, is_expected_failure); + func_on_all_printers([&](Printer * p) + { + p->print_error(test_error, is_expected_failure); + }); } result.status = TestResult::Status::FAILED; @@ -341,9 +374,12 @@ void Framework::run_test(const TestInfo &info, TestCaseFactory &test_factory) #endif /* ARM_COMPUTE_CL */ catch(const std::exception &error) { - if(_log_level >= LogLevel::ERRORS && _printer != nullptr) + if(_log_level >= LogLevel::ERRORS) { - _printer->print_error(error, is_expected_failure); + func_on_all_printers([&](Printer * p) + { + p->print_error(error, is_expected_failure); + }); } result.status = TestResult::Status::CRASHED; @@ -355,9 +391,12 @@ void Framework::run_test(const TestInfo &info, TestCaseFactory &test_factory) } catch(...) { - if(_log_level >= LogLevel::ERRORS && _printer != nullptr) + if(_log_level >= LogLevel::ERRORS) { - _printer->print_error(TestError("Received unknown exception"), is_expected_failure); + func_on_all_printers([&](Printer * p) + { + p->print_error(TestError("Received unknown exception"), is_expected_failure); + }); } result.status = TestResult::Status::CRASHED; @@ -370,9 +409,12 @@ void Framework::run_test(const TestInfo &info, TestCaseFactory &test_factory) } catch(const std::exception &error) { - if(_log_level >= LogLevel::ERRORS && _printer != nullptr) + if(_log_level >= LogLevel::ERRORS) { - _printer->print_error(error, is_expected_failure); + func_on_all_printers([&](Printer * p) + { + p->print_error(error, is_expected_failure); + }); } result.status = TestResult::Status::CRASHED; @@ -384,9 +426,12 @@ void Framework::run_test(const TestInfo &info, TestCaseFactory &test_factory) } catch(...) { - if(_log_level >= LogLevel::ERRORS && _printer != nullptr) + if(_log_level >= LogLevel::ERRORS) { - _printer->print_error(TestError("Received unknown exception"), is_expected_failure); + func_on_all_printers([&](Printer * p) + { + p->print_error(TestError("Received unknown exception"), is_expected_failure); + }); } result.status = TestResult::Status::CRASHED; @@ -397,9 +442,12 @@ void Framework::run_test(const TestInfo &info, TestCaseFactory &test_factory) } } - if(_log_level >= LogLevel::ERRORS && _printer != nullptr) + if(_log_level >= LogLevel::ERRORS) { - _printer->print_errors_footer(); + func_on_all_printers([](Printer * p) + { + p->print_errors_footer(); + }); } _current_test_info = nullptr; @@ -432,9 +480,12 @@ bool Framework::run() // Clear old test results _test_results.clear(); - if(_printer != nullptr && _log_level >= LogLevel::TESTS) + if(_log_level >= LogLevel::TESTS) { - _printer->print_run_header(); + func_on_all_printers([](Printer * p) + { + p->print_run_header(); + }); } const std::chrono::time_point<std::chrono::high_resolution_clock> start = std::chrono::high_resolution_clock::now(); @@ -456,9 +507,12 @@ bool Framework::run() const std::chrono::time_point<std::chrono::high_resolution_clock> end = std::chrono::high_resolution_clock::now(); - if(_printer != nullptr && _log_level >= LogLevel::TESTS) + if(_log_level >= LogLevel::TESTS) { - _printer->print_run_footer(); + func_on_all_printers([](Printer * p) + { + p->print_run_footer(); + }); } auto runtime = std::chrono::duration_cast<std::chrono::seconds>(end - start); @@ -527,9 +581,9 @@ Profiler Framework::get_profiler() const return profiler; } -void Framework::set_printer(Printer *printer) +void Framework::add_printer(Printer *printer) { - _printer = printer; + _printers.push_back(printer); } std::vector<TestInfo> Framework::test_infos() const diff --git a/tests/framework/Framework.h b/tests/framework/Framework.h index 063824cbdb..1d7efee59f 100644 --- a/tests/framework/Framework.h +++ b/tests/framework/Framework.h @@ -280,7 +280,7 @@ public: * * @param[in] printer Pointer to a printer. */ - void set_printer(Printer *printer); + void add_printer(Printer *printer); /** List of @ref TestInfo's. * @@ -314,14 +314,18 @@ private: */ std::string current_suite_name() const; + /* Perform func on all printers */ + template <typename F> + void func_on_all_printers(F &&func); + std::vector<std::string> _test_suite_name{}; std::vector<std::unique_ptr<TestCaseFactory>> _test_factories{}; std::map<TestInfo, TestResult> _test_results{}; - int _num_iterations{ 1 }; - bool _throw_errors{ false }; - bool _stop_on_error{ false }; - bool _error_on_missing_assets{ false }; - Printer *_printer{ nullptr }; + int _num_iterations{ 1 }; + bool _throw_errors{ false }; + bool _stop_on_error{ false }; + bool _error_on_missing_assets{ false }; + std::vector<Printer *> _printers{}; using create_function = std::unique_ptr<Instrument>(); std::map<InstrumentType, create_function *> _available_instruments{}; diff --git a/tests/main.cpp b/tests/main.cpp index 5bdd665068..d056267418 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -197,7 +197,7 @@ int main(int argc, char **argv) } framework.init(instruments->value(), iterations->value(), dataset_mode->value(), filter->value(), filter_id->value(), log_level->value()); - framework.set_printer(printer.get()); + framework.add_printer(printer.get()); framework.set_throw_errors(throw_errors->value()); framework.set_stop_on_error(stop_on_error->value()); framework.set_error_on_missing_assets(error_on_missing_assets->value()); |