...
This commit is contained in:
parent
d7ed4fac6c
commit
3821d965cc
@ -36,6 +36,9 @@ if (BUILD_TESTS)
|
||||
set(DEVATTR_TEST_APP adc_devattr_test)
|
||||
add_executable(${DEVATTR_TEST_APP} tests/adc_devattr_test.cpp)
|
||||
|
||||
set(NETMSG_TEST_APP adc_netmsg_test)
|
||||
add_executable(${NETMSG_TEST_APP} tests/adc_netmsg_test.cpp)
|
||||
|
||||
if (NOT doctest_FOUND)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
@ -51,6 +54,7 @@ if (BUILD_TESTS)
|
||||
include(CTest)
|
||||
# add_test(VALUE_HOLDER ${VALUEHOLDER_TEST_APP})
|
||||
add_test(VALUE_HOLDER ${DEVATTR_TEST_APP})
|
||||
add_test(NETMSG_TEST ${NETMSG_TEST_APP})
|
||||
enable_testing()
|
||||
endif(BUILD_TESTS)
|
||||
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <ranges>
|
||||
#include <vector>
|
||||
|
||||
#include "../common/adc_traits.h"
|
||||
#include "../common/adc_utils.h"
|
||||
|
||||
|
||||
/*
|
||||
@ -152,7 +152,7 @@ protected:
|
||||
|
||||
output_seq_t _outputSequence;
|
||||
|
||||
AdcNetMessageInterface() : _storageSequence(), _outputSequence() {};
|
||||
AdcNetMessageInterface() : _storageSequence(), _outputSequence(){};
|
||||
|
||||
template <typename T, typename... Ts>
|
||||
AdcNetMessageInterface(const T& v, const Ts&... vs) : AdcNetMessageInterface()
|
||||
@ -292,7 +292,8 @@ public:
|
||||
auto max_el = _storageSequence.size() - start;
|
||||
N >= max_el ? max_el * 2 - 1 : N * 2 - 1;
|
||||
|
||||
std::ranges::copy(_outputSequence | std::views::drop(start * 2) | std::views::take(N), std::back_inserter(r));
|
||||
std::ranges::copy(_outputSequence | std::views::drop(start * 2) | std::views::take(N) | std::views::join,
|
||||
std::back_inserter(r));
|
||||
}
|
||||
|
||||
const output_seq_t& storageSeq() override
|
||||
@ -374,6 +375,8 @@ public:
|
||||
this->_storageSequence.clear();
|
||||
this->_outputSequence.clear();
|
||||
|
||||
// TODO: what if key is an empty range?!!!
|
||||
|
||||
if constexpr (traits::adc_input_char_range<KeyT> || traits::formattable<KeyT>) {
|
||||
std::ranges::copy(key, std::back_inserter(_key));
|
||||
} else if constexpr (traits::formattable<KeyT>) {
|
||||
@ -394,6 +397,7 @@ public:
|
||||
void key(R& r) const
|
||||
{
|
||||
if constexpr (std::is_convertible_v<std::string, R>) {
|
||||
r = _key;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -413,6 +417,23 @@ public:
|
||||
this->tokensBytes(r, start, N);
|
||||
}
|
||||
|
||||
|
||||
template <std::input_iterator IterT>
|
||||
void setFromBytes(IterT begin, IterT end)
|
||||
{
|
||||
auto sp = std::span(begin, end);
|
||||
|
||||
auto found = std::ranges::search(sp, keyparamDelimiter);
|
||||
|
||||
if (found.empty()) { // no parameters
|
||||
setKeyParam(sp);
|
||||
} else {
|
||||
auto N = std::ranges::distance(sp.begin(), found.begin());
|
||||
setKeyParam(sp.first(N), sp.last(sp.size() - N - keyparamDelimiter.size()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
std::string _key;
|
||||
// _outputSequence will store parameters
|
||||
|
||||
26
tests/adc_netmsg_test.cpp
Normal file
26
tests/adc_netmsg_test.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
|
||||
#include <doctest/doctest.h>
|
||||
#include <iostream>
|
||||
|
||||
#include "../net/adc_netmessage.h"
|
||||
|
||||
using namespace adc;
|
||||
|
||||
TEST_CASE("[ADC NET MESSAGE]")
|
||||
{
|
||||
AdcKeyParamNetMessage<> msg;
|
||||
|
||||
std::string_view bytes{"SET POS 1 2 3 4 5"};
|
||||
|
||||
std::cout << "BYTES: [" << bytes << "]\n";
|
||||
|
||||
msg.setFromBytes(bytes.begin(), bytes.end());
|
||||
|
||||
std::string key, pars;
|
||||
msg.key(key);
|
||||
std::cout << "KEY: [" << key << "]\n";
|
||||
|
||||
msg.paramsBytes(pars, 1);
|
||||
// msg.paramsBytes(pars);
|
||||
std::cout << "PARS BYTES: [" << pars << "]\n";
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user