General Purpose library for Freestanding C++ and POSIX systems
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 

82 linhas
1.8 KiB

#include "gp_config.hpp"
#include "gp/system/logging_segment.hpp"
#include "allocator.hpp"
#include "test_scaffold.h"
#include <iostream>
alignas(2048) gp::array<char, 4096> static_mapper::store;
gp::buddy<> static_mapper::impl = gp::buddy<>{store.begin().data, store.size()};
static_logging_segment<1024> logger;
void log_failure(const char* failure) {
log_segment("FAILURE", failure, std::numeric_limits<int16_t>::max());
}
void log_segment(const char* name, const char* text, int16_t prio) {
logger.push_segment(name, text, prio);
}
void print_logs() {
auto end = logger.size();
for(size_t idx = 0; idx < end; idx++) {
auto seg = logger.get_segment_by_idx(idx);
std::cout << "\t";
for(char c : seg.name) {
std::cout << c;
}
std::cout << ":\t";
for(char c : seg.text) {
std::cout << c;
}
std::cout << "\n";
}
}
#ifndef CATCH_EXCEPTIONS
#define CATCH_EXCEPTIONS 0
#endif
std::vector<std::unique_ptr<test_scaffold>> tests;
int main()
{
uint failed = 0;
uint runned = 0;
for(auto& test : tests)
{
++runned;
int value;
#if CATCH_EXCEPTIONS
try{
#endif
value = test->run();
if(value)
{
std::cout << std::dec << test->name << " failed with "<< value << std::endl;
print_logs();
}
#if CATCH_EXCEPTIONS
} catch (gp::runtime_error err) {
std::cout << test->name << " failed with an exception: " << err.what() << std::endl;
print_logs();
value = -1;
} catch (gp_config::assert_failure err) {
std::cout << test->name << " failed with an assertion failure: " << err.what() << std::endl;
print_logs();
value = -1;
} catch (...) {
std::cout << test->name << " failed with an exception" << std::endl;
print_logs();
value = -1;
}
#endif
logger.clear();
failed += (value != 0);
}
std::cout << std::dec << "Runned " << runned << " tests with " << failed << " failures" << std::endl;
return 0;
}