blob: 94055b2b1b50f3f0b17cc50e56bfcd406942bb11 [file] [log] [blame]
#ifndef __HAYAI_OUTPUTTER
#define __HAYAI_OUTPUTTER
#include <iostream>
#include <cstddef>
#include "hayai_test_result.hpp"
namespace hayai
{
/// Outputter.
/// Abstract base class for outputters.
class Outputter
{
public:
/// Begin benchmarking.
/// The total number of benchmarks registred is the sum of the two
/// counts passed to the outputter.
///
/// @param enabledCount Number of benchmarks to be executed.
/// @param disabledCount Number of disabled benchmarks to be skipped.
virtual void Begin(const std::size_t& enabledCount,
const std::size_t& disabledCount) = 0;
/// End benchmarking.
/// @param executedCount Number of benchmarks that have been executed.
/// @param disabledCount Number of benchmarks that have been skipped
/// because they are disabled.
virtual void End(const std::size_t& executedCount,
const std::size_t& disabledCount) = 0;
/// Begin benchmark test run.
/// @param fixtureName Fixture name.
/// @param testName Test name.
/// @param parameters Test parameter description.
/// @param runsCount Number of runs to be executed.
/// @param iterationsCount Number of iterations per run.
virtual void BeginTest(const std::string& fixtureName,
const std::string& testName,
const TestParametersDescriptor& parameters,
const std::size_t& runsCount,
const std::size_t& iterationsCount) = 0;
/// End benchmark test run.
/// @param fixtureName Fixture name.
/// @param testName Test name.
/// @param parameters Test parameter description.
/// @param result Test result.
virtual void EndTest(const std::string& fixtureName,
const std::string& testName,
const TestParametersDescriptor& parameters,
const TestResult& result) = 0;
/// Skip disabled benchmark test run.
/// @param fixtureName Fixture name.
/// @param testName Test name.
/// @param parameters Test parameter description.
/// @param runsCount Number of runs to be executed.
/// @param iterationsCount Number of iterations per run.
virtual void SkipDisabledTest(const std::string& fixtureName,
const std::string& testName,
const TestParametersDescriptor&
parameters,
const std::size_t& runsCount,
const std::size_t& iterationsCount) = 0;
virtual ~Outputter()
{
}
protected:
/// Write a nicely formatted test name to a stream.
static void WriteTestNameToStream(std::ostream& stream,
const std::string& fixtureName,
const std::string& testName,
const TestParametersDescriptor&
parameters)
{
stream << fixtureName << "." << testName;
const std::vector<TestParameterDescriptor>& descs =
parameters.Parameters();
if (descs.empty())
return;
stream << "(";
for (std::size_t i = 0; i < descs.size(); ++i)
{
if (i)
stream << ", ";
const TestParameterDescriptor& desc = descs[i];
stream << desc.Declaration << " = " << desc.Value;
}
stream << ")";
}
};
}
#endif