General Purpose library for Freestanding C++ and POSIX systems
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 

74 行
1.7 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<128> 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";
}
}
std::vector<std::unique_ptr<test_scaffold>> tests;
int main()
{
uint failed = 0;
uint runned = 0;
for(auto& test : tests)
{
++runned;
int value;
try{
value = test->run();
if(value)
{
std::cout << std::dec << test->name << " failed with "<< value << std::endl;
print_logs();
}
} 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;
}
logger.clear();
failed += (value != 0);
}
std::cout << std::dec << "Runned " << runned << " tests with " << failed << " failures" << std::endl;
return 0;
}