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 "dbc.hpp"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
void dbc::log(const string &message) {
|
void dbc::log(const string &message, const std::source_location location) {
|
||||||
std::cerr << "!!!!!!!!!!" << message << std::endl;
|
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);
|
string err = fmt::format("[SENTINEL!] {}", message);
|
||||||
dbc::log(err);
|
dbc::log(err, location);
|
||||||
throw dbc::SentinelError{err};
|
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) {
|
if(!test) {
|
||||||
string err = fmt::format("[PRE!] {}", message);
|
string err = fmt::format("[PRE!] {}", message);
|
||||||
dbc::log(err);
|
dbc::log(err, location);
|
||||||
throw dbc::PreCondError{err};
|
throw dbc::PreCondError{err};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void dbc::pre(const string &message, std::function<bool()> tester) {
|
void dbc::pre(const string &message, std::function<bool()> tester, const std::source_location location) {
|
||||||
dbc::pre(message, tester());
|
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) {
|
if(!test) {
|
||||||
string err = fmt::format("[POST!] {}", message);
|
string err = fmt::format("[POST!] {}", message);
|
||||||
dbc::log(err);
|
dbc::log(err, location);
|
||||||
throw dbc::PostCondError{err};
|
throw dbc::PostCondError{err};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void dbc::post(const string &message, std::function<bool()> tester) {
|
void dbc::post(const string &message, std::function<bool()> tester, const std::source_location location) {
|
||||||
dbc::post(message, tester());
|
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) {
|
if(!test) {
|
||||||
string err = fmt::format("[CHECK!] {}\n", message);
|
string err = fmt::format("[CHECK!] {}\n", message);
|
||||||
dbc::log(err);
|
dbc::log(err, location);
|
||||||
throw dbc::CheckError{err};
|
throw dbc::CheckError{err};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
35
dbc.hpp
35
dbc.hpp
|
@ -3,6 +3,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <source_location>
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
|
@ -19,11 +20,31 @@ namespace dbc {
|
||||||
class PreCondError : public Error {};
|
class PreCondError : public Error {};
|
||||||
class PostCondError : public Error {};
|
class PostCondError : public Error {};
|
||||||
|
|
||||||
void log(const string &message);
|
void log(const string &message,
|
||||||
[[noreturn]] void sentinel(const string &message);
|
const std::source_location location =
|
||||||
void pre(const string &message, bool test);
|
std::source_location::current());
|
||||||
void pre(const string &message, std::function<bool()> tester);
|
|
||||||
void post(const string &message, bool test);
|
[[noreturn]] void sentinel(const string &message,
|
||||||
void post(const string &message, std::function<bool()> tester);
|
const std::source_location location =
|
||||||
void check(bool test, const string &message);
|
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;
|
using namespace dbc;
|
||||||
|
|
||||||
TEST_CASE("basic feature tests", "[utils]") {
|
TEST_CASE("basic feature tests", "[dbc]") {
|
||||||
log("Logging a message.");
|
log("Logging a message.");
|
||||||
|
|
||||||
pre("confirm positive cases work", 1 == 1);
|
pre("confirm positive cases work", 1 == 1);
|
||||||
|
|
||||||
pre("confirm positive lambda", [&]{ return 1 == 1;});
|
pre("confirm positive lambda", [&]{ return 1 == 1;});
|
||||||
|
|
||||||
post("confirm positive post", 1 == 1);
|
post("confirm positive post", 1 == 1);
|
||||||
|
|
||||||
post("confirm postitive post with lamdba", [&]{ return 1 == 1;});
|
post("confirm postitive post with lamdba", [&]{ return 1 == 1;});
|
||||||
|
|
||||||
check(1 == 1, "one equals 1");
|
check(1 == 1, "one equals 1");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue