<commit_before>#ifndef BANDIT_INFO_REPORTER_H
#define BANDIT_INFO_REPORTER_H

namespace bandit {
namespace detail {

struct info_reporter : public progress_reporter
{
	info_reporter(std::ostream &stm, const failure_formatter &failure_formatter,
	  const detail::colorizer &colorizer)
	  : progress_reporter(failure_formatter)
	  , stm_(stm)
	  , colorizer_(colorizer)
	  , indentation_(0)
	{}

	info_reporter(const failure_formatter &failure_formatter, const detail::colorizer &colorizer)
	  : progress_reporter(failure_formatter)
	  , stm_(std::cout)
	  , colorizer_(colorizer)
	  , indentation_(0)
	{}

	info_reporter &operator=(const info_reporter &)
	{
		return *this;
	}

	void test_run_complete()
	{
		progress_reporter::test_run_complete();

		stm_ << std::endl;

		test_run_summary summary(specs_run_, specs_failed_, specs_succeeded_, specs_skipped_, failures_,
		  test_run_errors_, colorizer_);
		summary.write(stm_);
		stm_.flush();
	}

	void test_run_error(const char *desc, const struct test_run_error &err)
	{
		progress_reporter::test_run_error(desc, err);<commit_msg>info reporter: change output of summary<commit_after>#ifndef BANDIT_INFO_REPORTER_H
#define BANDIT_INFO_REPORTER_H

namespace bandit {
namespace detail {

struct info_reporter : public progress_reporter
{
	info_reporter(std::ostream &stm, const failure_formatter &failure_formatter,
	  const detail::colorizer &colorizer)
	  : progress_reporter(failure_formatter)
	  , stm_(stm)
	  , colorizer_(colorizer)
	  , indentation_(0)
	{}

	info_reporter(const failure_formatter &failure_formatter, const detail::colorizer &colorizer)
	  : progress_reporter(failure_formatter)
	  , stm_(std::cout)
	  , colorizer_(colorizer)
	  , indentation_(0)
	{}

	info_reporter &operator=(const info_reporter &)
	{
		return *this;
	}

	void summary()
	{
		stm_
		  << colorizer_.white()
		  << "Tests run: " << specs_run_
		  << std::endl;
		if (specs_skipped_ > 0) {
			stm_
			  << colorizer_.yellow()
			  << "Skipped: " << specs_skipped_
			  << std::endl;
		}
		if (specs_succeeded_ > 0) {
			stm_
			  << colorizer_.green()
			  << "Passed: " << specs_succeeded_
			  << std::endl;
		}
		if (specs_failed_ > 0) {
			stm_
			  << colorizer_.red()
			  << "Failed: " << specs_failed_
			  << std::endl;
			std::for_each(failures_.begin(), failures_.end(), [&](const std::string &failure) {
				stm_
				 << colorizer_.white()
				 << " (*) "
				 << colorizer_.red()
				 << failure << std::endl;
			});
		}
		if (test_run_errors_.size() > 0) {
			stm_
			  << colorizer_.red()
			  << "Errors: " << test_run_errors_.size()
			  << std::endl;
			std::for_each(test_run_errors_.begin(), test_run_errors_.end(), [&](const std::string &error) {
				stm_
				 << colorizer_.white()
				 << " (*) "
				 << colorizer_.red()
				 << error << std::endl;
			});
		}
		stm_
		  << colorizer_.reset()
		  << std::endl;
	}

	void test_run_complete()
	{
		progress_reporter::test_run_complete();
		stm_ << std::endl;
		summary();
		stm_.flush();
	}

	void test_run_error(const char *desc, const struct test_run_error &err)
	{
		progress_reporter::test_run_error(desc, err);
{'fraction_non_alphanumeric': 0.13682864450127877, 'fraction_numerical': 0.0025575447570332483, 'mean_word_length': 4.15485996705107, 'pattern_counts': {'":': 0, '<': 71, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2624741', 'n_tokens_mistral': 1287, 'n_tokens_neox': 1103, 'n_words': 187}