-
toole1 authored
git-svn-id: https://subversion.cs.illinois.edu/svn/cs225@5941 6fbd10e7-183d-0410-a318-cb416676e4f2
toole1 authoredgit-svn-id: https://subversion.cs.illinois.edu/svn/cs225@5941 6fbd10e7-183d-0410-a318-cb416676e4f2
monad_shared.h 3.15 KiB
#ifndef MONAD_SHARED
#define MONAD_SHARED
#include "util.h"
#include "pipestream.h"
namespace monad_shared
{
struct Version
{
int32_t major_;
int32_t minor_;
int32_t patch_;
Version(int32_t maj, int32_t min, int32_t pat)
: major_(maj), minor_(min), patch_(pat)
{ }
#if 0
Version(const std::string & s)
{
size_t i = 0;
}
#endif
void print(std::ostream & out) const
{
out << major_ << '.' << minor_ << '.' << patch_;
}
};
inline std::ostream & operator<<(std::ostream & out, const Version & v)
{
v.print(out);
return out;
}
namespace versioninfo
{
extern const char * official_name;
extern const char * version_name;
extern const Version version_num;
extern const char * date;
}
void printInfo();
struct unit_test_input
{
typedef void (*function)(util::pipestream &);
private:
function func_;
const char * name_;
long timeout_;
int32_t points_;
bool is_valgrind_;
public:
unit_test_input(const char * _name,
unit_test_input::function _func,
int32_t _points,
long _timeout,
bool _is_valgrind)
: func_(_func),
name_(_name),
timeout_(_timeout),
points_(_points),
is_valgrind_(_is_valgrind) { }
void execute(util::pipestream & checkstream) const { func_(checkstream); }
const char * name() const { return name_; }
long timeout() const { return timeout_; }
int32_t points() const { return points_; }
bool is_valgrind() const { return is_valgrind_; }
};
struct unit_test_result : public unit_test_input
{
private:
std::string errormsg_;
std::string output_;
long time_;
int32_t valgrind_flags_;
public:
unit_test_result(const unit_test_input & _input,
const std::string & _errormsg,
const std::string & _output,
const long _time,
const int32_t _valgrind_flags)
: unit_test_input(_input),
errormsg_((_errormsg != "") ? _errormsg : "Unexpectedly Aborted"),
output_(_output),
time_(_time),
valgrind_flags_(_valgrind_flags) { }
const std::string & errormsg() const { return errormsg_; }
const std::string & output() const { return output_; }
long time() const { return time_; }
int32_t valgrind_flags() const { return valgrind_flags_; }
bool passed() const { return errormsg_ == pass_string; }
bool failed() const { return !passed(); }
int32_t points_scored() const { return passed() ? points() : 0; }
// Static class data
static const char * pass_string;
static bool _failed(const unit_test_result & obj) { return obj.failed(); }
};
namespace output
{
void set_error_message();
void header(const std::string & title);
void total_score(int32_t score, int32_t outof);
void warning(const std::string & message);
void testname(const unit_test_input & curr_test, int32_t max_testname_len, int32_t max_points_len);
void detailed_info(const unit_test_result & curr_test);
std::string passed_string();
std::string failed_string();
} // namespace output
}
#endif // MONAD_SHARED