Update test helpers

This commit is contained in:
ado 2023-07-29 13:56:00 +02:00
parent 5d6c2c4af5
commit a98742945b
2 changed files with 39 additions and 62 deletions

View File

@ -1,7 +1,5 @@
#pragma once #pragma once
#define _CRT_SECURE_NO_WARNINGS
#include "common.hpp" #include "common.hpp"
#include "converter.hpp" #include "converter.hpp"
#include "extract.hpp" #include "extract.hpp"

View File

@ -1,9 +1,6 @@
#pragma once #pragma once
#define _CRT_SECURE_NO_WARNINGS #include <string>
#include <cstdlib>
#include <cstring>
#ifdef CMAKE_GITHUB_CI #ifdef CMAKE_GITHUB_CI
#include <doctest/doctest.h> #include <doctest/doctest.h>
@ -12,73 +9,55 @@
#endif #endif
struct buffer { struct buffer {
char* data_{nullptr}; std::string data_;
char* operator()(const char* data) { char *operator()(const std::string &data) {
if (data_) { data_ = data;
delete[] data_; return data_.data();
} }
data_ = new char[strlen(data) + 1];
strcpy(data_, data);
return data_;
}
char* append(const char* data) { char *append(const std::string &data) {
if (data_) { data_ += data;
char* new_data_ = new char[strlen(data_) + strlen(data) + 1]; return data_.data();
strcpy(new_data_, data_); }
strcat(new_data_, data);
delete[] data_;
data_ = new_data_;
return data_;
} else {
return operator()(data);
}
}
char* append_overwrite_last(const char* data, size_t size) { char *append_overwrite_last(const std::string &data, size_t size) {
data_[strlen(data_) - size] = '\0'; data_.resize(data_.size() - size);
return append(data); return append(data);
} }
~buffer() {
if (data_) {
delete[] data_;
}
}
}; };
[[maybe_unused]] inline buffer buff; [[maybe_unused]] inline buffer buff;
#define CHECK_FLOATING_CONVERSION(input, type) \ #define CHECK_FLOATING_CONVERSION(input, type) \
{ \ { \
auto eps = std::numeric_limits<type>::min(); \ auto eps = std::numeric_limits<type>::min(); \
std::string s = #input; \ std::string s = #input; \
auto t = ss::to_num<type>(s.c_str(), s.c_str() + s.size()); \ auto t = ss::to_num<type>(s.c_str(), s.c_str() + s.size()); \
REQUIRE(t.has_value()); \ REQUIRE(t.has_value()); \
CHECK_LT(std::abs(t.value() - type(input)), eps); \ CHECK_LT(std::abs(t.value() - type(input)), eps); \
} \ } \
{ \ { \
/* check negative too */ \ /* check negative too */ \
auto eps = std::numeric_limits<type>::min(); \ auto eps = std::numeric_limits<type>::min(); \
auto s = std::string("-") + #input; \ auto s = std::string("-") + #input; \
auto t = ss::to_num<type>(s.c_str(), s.c_str() + s.size()); \ auto t = ss::to_num<type>(s.c_str(), s.c_str() + s.size()); \
REQUIRE(t.has_value()); \ REQUIRE(t.has_value()); \
CHECK_LT(std::abs(t.value() - type(-input)), eps); \ CHECK_LT(std::abs(t.value() - type(-input)), eps); \
} }
#define CHECK_INVALID_CONVERSION(input, type) \ #define CHECK_INVALID_CONVERSION(input, type) \
{ \ { \
std::string s = input; \ std::string s = input; \
auto t = ss::to_num<type>(s.c_str(), s.c_str() + s.size()); \ auto t = ss::to_num<type>(s.c_str(), s.c_str() + s.size()); \
CHECK_FALSE(t.has_value()); \ CHECK_FALSE(t.has_value()); \
} }
#define REQUIRE_VARIANT(var, el, type) \ #define REQUIRE_VARIANT(var, el, type) \
{ \ { \
auto ptr = std::get_if<type>(&var); \ auto ptr = std::get_if<type>(&var); \
REQUIRE(ptr); \ REQUIRE(ptr); \
REQUIRE_EQ(el, *ptr); \ REQUIRE_EQ(el, *ptr); \
} }
#define CHECK_NOT_VARIANT(var, type) CHECK(!std::holds_alternative<type>(var)); #define CHECK_NOT_VARIANT(var, type) CHECK(!std::holds_alternative<type>(var));