Add copying utility methods to Arena
This commit is contained in:
@@ -585,32 +585,6 @@ TEST_CASE("thread counter cleanup bug") {
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("error conditions") {
|
||||
SUBCASE("counter negative increment") {
|
||||
auto counter_family = metric::create_counter("error_counter", "Error test");
|
||||
auto counter = counter_family.create({});
|
||||
|
||||
// This should abort in debug builds due to validation
|
||||
// In release builds, behavior is undefined
|
||||
// counter.inc(-1.0); // Would abort
|
||||
}
|
||||
|
||||
SUBCASE("invalid metric names") {
|
||||
// These should abort due to validation
|
||||
// auto bad_counter = metric::create_counter("123invalid", "help"); // Would
|
||||
// abort auto bad_gauge = metric::create_gauge("invalid-name", "help"); //
|
||||
// Would abort
|
||||
}
|
||||
|
||||
SUBCASE("invalid label keys") {
|
||||
auto counter_family = metric::create_counter("valid_name", "help");
|
||||
|
||||
// This should abort due to label validation
|
||||
// auto counter = counter_family.create({{"123invalid", "value"}}); // Would
|
||||
// abort
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("memory management") {
|
||||
SUBCASE("arena allocation in render") {
|
||||
Arena arena;
|
||||
|
||||
@@ -8,24 +8,14 @@
|
||||
#include <string_view>
|
||||
#include <thread>
|
||||
|
||||
// Helper to copy a string into arena memory
|
||||
static std::string_view arena_copy_string(std::string_view str, Arena &arena) {
|
||||
if (str.empty()) {
|
||||
return std::string_view{};
|
||||
}
|
||||
char *copied = arena.allocate<char>(str.size());
|
||||
std::memcpy(copied, str.data(), str.size());
|
||||
return std::string_view(copied, str.size());
|
||||
}
|
||||
|
||||
struct EchoHandler : ConnectionHandler {
|
||||
Arena arena;
|
||||
std::span<std::string_view> reply;
|
||||
WeakRef<MessageSender> wconn;
|
||||
std::latch done{1};
|
||||
void on_data_arrived(std::string_view data, Connection &conn) override {
|
||||
reply = std::span{arena.allocate<std::string_view>(1), 1};
|
||||
reply[0] = arena_copy_string(data, arena);
|
||||
reply = arena.allocate_span<std::string_view>(1);
|
||||
reply[0] = arena.copy_string(data);
|
||||
wconn = conn.get_weak_ref();
|
||||
CHECK(wconn.lock());
|
||||
done.count_down();
|
||||
|
||||
Reference in New Issue
Block a user