You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.4 KiB
47 lines
1.4 KiB
#include "dbc.hpp"
|
|
#include <iostream>
|
|
|
|
void dbc::log(const string &message, const std::source_location location) {
|
|
std::cout << '[' << location.file_name() << ':'
|
|
<< location.line() << "|"
|
|
<< location.function_name() << "] "
|
|
<< message << std::endl;
|
|
}
|
|
|
|
void dbc::sentinel(const string &message, const std::source_location location) {
|
|
string err = fmt::format("[SENTINEL!] {}", message);
|
|
dbc::log(err, location);
|
|
throw dbc::SentinelError{err};
|
|
}
|
|
|
|
void dbc::pre(const string &message, bool test, const std::source_location location) {
|
|
if(!test) {
|
|
string err = fmt::format("[PRE!] {}", message);
|
|
dbc::log(err, location);
|
|
throw dbc::PreCondError{err};
|
|
}
|
|
}
|
|
|
|
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, const std::source_location location) {
|
|
if(!test) {
|
|
string err = fmt::format("[POST!] {}", message);
|
|
dbc::log(err, location);
|
|
throw dbc::PostCondError{err};
|
|
}
|
|
}
|
|
|
|
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, const std::source_location location) {
|
|
if(!test) {
|
|
string err = fmt::format("[CHECK!] {}\n", message);
|
|
dbc::log(err, location);
|
|
throw dbc::CheckError{err};
|
|
}
|
|
}
|
|
|