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
	
	 Zed A. Shaw
						Zed A. Shaw