Brought line numbers back for the dbc.cpp logging stuff. May not work in clang because of the bug they have (had?).
This commit is contained in:
parent
0efb17371b
commit
5ed8196c80
3 changed files with 49 additions and 22 deletions
31
dbc.cpp
31
dbc.cpp
|
@ -1,44 +1,47 @@
|
|||
#include "dbc.hpp"
|
||||
#include <iostream>
|
||||
|
||||
void dbc::log(const string &message) {
|
||||
std::cerr << "!!!!!!!!!!" << message << std::endl;
|
||||
void dbc::log(const string &message, const std::source_location location) {
|
||||
std::clog << '[' << location.file_name() << ':'
|
||||
<< location.line() << "|"
|
||||
<< location.function_name() << "] "
|
||||
<< message << std::endl;
|
||||
}
|
||||
|
||||
void dbc::sentinel(const string &message) {
|
||||
void dbc::sentinel(const string &message, const std::source_location location) {
|
||||
string err = fmt::format("[SENTINEL!] {}", message);
|
||||
dbc::log(err);
|
||||
dbc::log(err, location);
|
||||
throw dbc::SentinelError{err};
|
||||
}
|
||||
|
||||
void dbc::pre(const string &message, bool test) {
|
||||
void dbc::pre(const string &message, bool test, const std::source_location location) {
|
||||
if(!test) {
|
||||
string err = fmt::format("[PRE!] {}", message);
|
||||
dbc::log(err);
|
||||
dbc::log(err, location);
|
||||
throw dbc::PreCondError{err};
|
||||
}
|
||||
}
|
||||
|
||||
void dbc::pre(const string &message, std::function<bool()> tester) {
|
||||
dbc::pre(message, tester());
|
||||
void dbc::pre(const string &message, std::function<bool()> tester, const std::source_location location) {
|
||||
dbc::pre(message, tester(), location);
|
||||
}
|
||||
|
||||
void dbc::post(const string &message, bool test) {
|
||||
void dbc::post(const string &message, bool test, const std::source_location location) {
|
||||
if(!test) {
|
||||
string err = fmt::format("[POST!] {}", message);
|
||||
dbc::log(err);
|
||||
dbc::log(err, location);
|
||||
throw dbc::PostCondError{err};
|
||||
}
|
||||
}
|
||||
|
||||
void dbc::post(const string &message, std::function<bool()> tester) {
|
||||
dbc::post(message, tester());
|
||||
void dbc::post(const string &message, std::function<bool()> tester, const std::source_location location) {
|
||||
dbc::post(message, tester(), location);
|
||||
}
|
||||
|
||||
void dbc::check(bool test, const string &message) {
|
||||
void dbc::check(bool test, const string &message, const std::source_location location) {
|
||||
if(!test) {
|
||||
string err = fmt::format("[CHECK!] {}\n", message);
|
||||
dbc::log(err);
|
||||
dbc::log(err, location);
|
||||
throw dbc::CheckError{err};
|
||||
}
|
||||
}
|
||||
|
|
35
dbc.hpp
35
dbc.hpp
|
@ -3,6 +3,7 @@
|
|||
#include <string>
|
||||
#include <fmt/core.h>
|
||||
#include <functional>
|
||||
#include <source_location>
|
||||
|
||||
using std::string;
|
||||
|
||||
|
@ -19,11 +20,31 @@ namespace dbc {
|
|||
class PreCondError : public Error {};
|
||||
class PostCondError : public Error {};
|
||||
|
||||
void log(const string &message);
|
||||
[[noreturn]] void sentinel(const string &message);
|
||||
void pre(const string &message, bool test);
|
||||
void pre(const string &message, std::function<bool()> tester);
|
||||
void post(const string &message, bool test);
|
||||
void post(const string &message, std::function<bool()> tester);
|
||||
void check(bool test, const string &message);
|
||||
void log(const string &message,
|
||||
const std::source_location location =
|
||||
std::source_location::current());
|
||||
|
||||
[[noreturn]] void sentinel(const string &message,
|
||||
const std::source_location location =
|
||||
std::source_location::current());
|
||||
|
||||
void pre(const string &message, bool test,
|
||||
const std::source_location location =
|
||||
std::source_location::current());
|
||||
|
||||
void pre(const string &message, std::function<bool()> tester,
|
||||
const std::source_location location =
|
||||
std::source_location::current());
|
||||
|
||||
void post(const string &message, bool test,
|
||||
const std::source_location location =
|
||||
std::source_location::current());
|
||||
|
||||
void post(const string &message, std::function<bool()> tester,
|
||||
const std::source_location location =
|
||||
std::source_location::current());
|
||||
|
||||
void check(bool test, const string &message,
|
||||
const std::source_location location =
|
||||
std::source_location::current());
|
||||
}
|
||||
|
|
|
@ -3,12 +3,15 @@
|
|||
|
||||
using namespace dbc;
|
||||
|
||||
TEST_CASE("basic feature tests", "[utils]") {
|
||||
TEST_CASE("basic feature tests", "[dbc]") {
|
||||
log("Logging a message.");
|
||||
|
||||
pre("confirm positive cases work", 1 == 1);
|
||||
|
||||
pre("confirm positive lambda", [&]{ return 1 == 1;});
|
||||
|
||||
post("confirm positive post", 1 == 1);
|
||||
|
||||
post("confirm postitive post with lamdba", [&]{ return 1 == 1;});
|
||||
|
||||
check(1 == 1, "one equals 1");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue