|
|
#include <gp/algorithms/foreach.hpp>
|
|
#include <gp/utils/allocators/arena.hpp>
|
|
#include <gp/containers/array.hpp>
|
|
#include <gp/ipc/envelope/cbor.hpp>
|
|
#include "test_scaffold.h"
|
|
|
|
#include <bitset>
|
|
#include <sstream>
|
|
|
|
struct generic_cbor_test : public test_scaffold {
|
|
std::unique_ptr<gp::array<char, 4096*4>> store = std::make_unique<gp::array<char, 4096*4>>();
|
|
gp::arena alloc{&*store->begin(), store->size()};
|
|
};
|
|
|
|
struct cbor_test1 : public generic_cbor_test {
|
|
cbor_test1() {
|
|
name = __FILE__ ":" "##1";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
some_int a{16};
|
|
some_int b = 12u;
|
|
b = a;
|
|
gp_config::assertion(b.is_a<int>(), "b got wrong type assigned");
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
struct cbor_test2 : public generic_cbor_test {
|
|
cbor_test2() {
|
|
name = __FILE__ ":" "##2";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
some_int a{16u};
|
|
some_int b = a;
|
|
gp_config::assertion(b.is_a<unsigned int>(), "b got wrong type assigned");
|
|
gp_config::assertion(b.value<unsigned int>() == 16, "b got wrong value assigned");
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
struct cbor_test3 : public generic_cbor_test {
|
|
cbor_test3() {
|
|
name = __FILE__ ":" "##3";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
some_int a{16u};
|
|
some_int b = gp::move(a);
|
|
gp_config::assertion(b.is_a<unsigned int>(), "b got wrong type assigned");
|
|
gp_config::assertion(b.value<unsigned int>() == 16, "b got wrong value assigned");
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
struct cbor_test4 : public generic_cbor_test {
|
|
cbor_test4() {
|
|
name = __FILE__ ":" "##4";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
some_int a{16u};
|
|
some_int b;
|
|
new(&b) some_int(a);
|
|
gp_config::assertion(b.is_a<unsigned int>(), "b got wrong type assigned");
|
|
gp_config::assertion(b.value<unsigned int>() == 16, "b got wrong value assigned");
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
struct cbor_test5 : public generic_cbor_test {
|
|
cbor_test5() {
|
|
name = __FILE__ ":" "##5";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
some_int a{16u};
|
|
some_int b;
|
|
new(&b) some_int(gp::move(a));
|
|
gp_config::assertion(b.is_a<unsigned int>(), "b got wrong type assigned");
|
|
gp_config::assertion(b.value<unsigned int>() == 16, "b got wrong value assigned");
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
struct cbor_test6 : public generic_cbor_test {
|
|
cbor_test6() {
|
|
name = __FILE__ ":" "##6";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
gp::vector<some_int> vec{alloc};
|
|
vec.emplace_back(12u);
|
|
vec.emplace_back(-16);
|
|
gp_config::assertion(vec[0].is_a<unsigned int>(), "vec0 got wrong type assigned");
|
|
gp_config::assertion(vec[1].is_a<int>(), "vec1 got wrong type assigned");
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
struct cbor_test7 : public generic_cbor_test {
|
|
cbor_test7() {
|
|
name = __FILE__ ":" "##7";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
gp::vector<char> serialized(alloc);
|
|
|
|
gp::push_as_cbor(serialized, gp::cbor_associative_array_initiator{2});
|
|
gp::push_as_cbor(serialized, gp::make_pair(uint64_t(12), int64_t(-98)));
|
|
gp::push_as_cbor(serialized, gp::make_pair(uint64_t(13), int64_t(98)));
|
|
|
|
log_segment("serialized[0]", std::to_string((unsigned char)serialized[0]).c_str());
|
|
log_segment("serialized[1]", std::to_string((unsigned char)serialized[1]).c_str());
|
|
log_segment("serialized[2]", std::to_string((unsigned char)serialized[2]).c_str());
|
|
log_segment("serialized[3]", std::to_string((unsigned char)serialized[3]).c_str());
|
|
log_segment("serialized[4]", std::to_string((unsigned char)serialized[4]).c_str());
|
|
log_segment("serialized[5]", std::to_string((unsigned char)serialized[5]).c_str());
|
|
log_segment("serialized[6]", std::to_string((unsigned char)serialized[6]).c_str());
|
|
|
|
gp::array<char, 7> serialized_manual{
|
|
char(0b10100010),
|
|
char(0b00001100),
|
|
char(0b00111000), char(98),
|
|
char(0b00001101),
|
|
char(0b00011000), char(98)
|
|
};
|
|
|
|
gp_config::assertion(serialized.size() == serialized_manual.size(), "could not encode: wrong output size");
|
|
for(size_t idx = 0; idx < serialized_manual.size(); idx++) {
|
|
gp_config::assertion(serialized[idx] == serialized_manual[idx], "data did not serialize correctly");
|
|
}
|
|
|
|
auto state = serialized_manual.as_buffer();
|
|
size_t count = 0;
|
|
auto count_handler = [](size_t size){
|
|
{
|
|
std::bitset<sizeof(size_t)*8> size_bits{size};
|
|
std::stringstream v;
|
|
v << size_bits;
|
|
log_segment("size bits", v.str().c_str());
|
|
}
|
|
{
|
|
std::bitset<sizeof(size_t)*8> size_bits{-size};
|
|
std::stringstream v;
|
|
v << size_bits;
|
|
log_segment("-size bits", v.str().c_str());
|
|
}
|
|
{
|
|
log_segment("-size value", std::to_string((size_t)-size).c_str());
|
|
}
|
|
gp_config::assertion(size == 2, "could not decode the correct size");
|
|
return true;
|
|
};
|
|
|
|
auto callback_handler = [&count](gp::parsing_state state, gp::allocator& alloc) {
|
|
log_segment("state remaining", std::to_string(state.size()).c_str());
|
|
count++;
|
|
switch(count-1) {
|
|
case 0: {
|
|
auto [value, new_state] = gp::read_cbor<int64_t>(state, alloc);
|
|
gp_config::assertion(value.has_value(), "could not decode value 0");
|
|
log_segment("value 0", std::to_string(value.value()).c_str());
|
|
gp_config::assertion(value.value() == 12, "could not decode the correct size");
|
|
return new_state;
|
|
}
|
|
case 1:{
|
|
auto [value, new_state] = gp::read_cbor<int64_t>(state, alloc);
|
|
gp_config::assertion(value.has_value(), "could not decode value 1");
|
|
log_segment("value 1", std::to_string(value.value()).c_str());
|
|
gp_config::assertion(value.value() == -98, "could not decode the correct size");
|
|
return new_state;
|
|
}
|
|
case 2:{
|
|
auto [value, new_state] = gp::read_cbor<int64_t>(state, alloc);
|
|
gp_config::assertion(value.has_value(), "could not encode value 2");
|
|
log_segment("value 2", std::to_string(value.value()).c_str());
|
|
gp_config::assertion(value.value() == 13, "could not encode the correct size");
|
|
return new_state;
|
|
}
|
|
case 3:{
|
|
auto [value, new_state] = gp::read_cbor<int64_t>(state, alloc);
|
|
gp_config::assertion(value.has_value(), "could not encode value 3");
|
|
log_segment("value 3", std::to_string(value.value()).c_str());
|
|
gp_config::assertion(value.value() == 98, "could not encode the correct size");
|
|
return new_state;
|
|
}
|
|
default: return state;
|
|
}
|
|
};
|
|
|
|
auto new_state = read_cbor_kv_list(
|
|
state,
|
|
alloc,
|
|
callback_handler,
|
|
count_handler
|
|
);
|
|
|
|
gp_config::assertion(state.size() > new_state.size(), "reading succeeded");
|
|
|
|
gp_config::assertion(new_state.size() == 0, "something is left in the string");
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
struct cbor_test8 : public generic_cbor_test {
|
|
cbor_test8() {
|
|
name = __FILE__ ":" "##8";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
|
|
{
|
|
gp::vector<char> serialized(alloc);
|
|
gp::array<char, 1> serialized_manual{
|
|
char(1)
|
|
};
|
|
|
|
gp::push_as_cbor(serialized, 1);
|
|
|
|
gp_config::assertion(serialized.size() == serialized_manual.size(), "could not encode (wrong size)");
|
|
gp_config::assertion(serialized[0] == serialized_manual[0], "data did not encode correctly");
|
|
|
|
auto [value, new_state] = gp::read_cbor<int>(serialized.as_buffer(), alloc);
|
|
|
|
|
|
gp_config::assertion(value.has_value(), "could not redecode");
|
|
gp_config::assertion(value.value() == 1, "data did not serialize correctly: wrong value decoded");
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
};
|
|
|
|
struct cbor_test9 : public generic_cbor_test {
|
|
cbor_test9() {
|
|
name = __FILE__ ":" "##9";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
gp::vector<char> serialized(alloc);
|
|
gp::array<char, 3> serialized_manual{
|
|
char(0b00011001),
|
|
char(0b00000100),
|
|
char(0b00000000)
|
|
};
|
|
|
|
gp::push_as_cbor(serialized, 1024);
|
|
|
|
gp_config::assertion(serialized_manual.size() == serialized.size(), "could not encode");
|
|
for(size_t idx = 0; idx < serialized_manual.size(); idx++) {
|
|
gp_config::assertion(serialized[idx] == serialized_manual[idx], "data did not serialize correctly");
|
|
}
|
|
|
|
auto [value, state] = gp::read_cbor<int>(serialized.as_buffer(), alloc);
|
|
|
|
gp_config::assertion(value.has_value(), "could not decode");
|
|
gp_config::assertion(value.value() == 1024, "data did not decode correctly");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
};
|
|
|
|
struct cbor_test10 : public generic_cbor_test {
|
|
cbor_test10() {
|
|
name = __FILE__ ":" "##10";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
|
|
{
|
|
gp::vector<char> serialized(alloc);
|
|
gp::array<char, 5> serialized_manual{
|
|
char(0b00011010),
|
|
char(0xAA),
|
|
char(0xBB),
|
|
char(0xCC),
|
|
char(0xDD)
|
|
};
|
|
|
|
gp::push_as_cbor(serialized, 0xAABBCCDD);
|
|
|
|
gp_config::assertion(serialized_manual.size() == serialized.size(), "could not encode");
|
|
for(size_t idx = 0; idx < serialized_manual.size(); idx++) {
|
|
gp_config::assertion(serialized[idx] == serialized_manual[idx], "data did not serialize correctly");
|
|
}
|
|
|
|
auto [value, state] = gp::read_cbor<uint64_t>(serialized.as_buffer(), alloc);
|
|
|
|
gp_config::assertion(value.has_value(), "could not decode");
|
|
gp_config::assertion(value.value() == 0xAABBCCDD, "data did not decode correctly");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
};
|
|
|
|
struct cbor_test11 : public generic_cbor_test {
|
|
cbor_test11() {
|
|
name = __FILE__ ":" "##11";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
gp::vector<char> serialized(alloc);
|
|
gp::array<char, 9> serialized_manual{
|
|
char(0b00011011),
|
|
char(0xAA),
|
|
char(0xBB),
|
|
char(0xCC),
|
|
char(0xDD),
|
|
char(0xEE),
|
|
char(0xFF),
|
|
char(0x00),
|
|
char(0x11)
|
|
};
|
|
|
|
gp::push_as_cbor(serialized, 0xAABBCCDDEEFF0011ull);
|
|
|
|
gp_config::assertion(serialized_manual.size() == serialized.size(), "could not encode");
|
|
for(size_t idx = 0; idx < serialized_manual.size(); idx++) {
|
|
gp_config::assertion(serialized[idx] == serialized_manual[idx], "data did not serialize correctly");
|
|
}
|
|
|
|
auto [value, state] = gp::read_cbor<uint64_t>(serialized.as_buffer(), alloc);
|
|
|
|
gp_config::assertion(value.has_value(), "could not decode");
|
|
gp_config::assertion(value.value() == 0xAABBCCDDEEFF0011ull, "data did not decode correctly");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
};
|
|
|
|
struct cbor_test12 : public generic_cbor_test {
|
|
cbor_test12() {
|
|
name = __FILE__ ":" "##12";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
gp::vector<char> serialized(alloc);
|
|
gp::array<char, 1> serialized_manual{
|
|
char(0b11100000+22)
|
|
};
|
|
|
|
gp::push_as_cbor(serialized, nullptr);
|
|
|
|
gp_config::assertion(serialized.size() == serialized_manual.size(), "could not encode");
|
|
gp_config::assertion(serialized[0] == serialized_manual[0], "data did not serialize correctly");
|
|
|
|
auto [value, state] = gp::read_cbor<std::nullptr_t>(serialized.as_buffer(), alloc);
|
|
|
|
gp_config::assertion(value.has_value(), "could not encode");
|
|
gp_config::assertion(value.value() == nullptr, "data did not decode correctly");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
};
|
|
|
|
struct cbor_test13 : public generic_cbor_test {
|
|
cbor_test13() {
|
|
name = __FILE__ ":" "##13";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
gp::vector<char> serialized(alloc);
|
|
gp::array<char, 1> serialized_manual{
|
|
char(0b11100000+21)
|
|
};
|
|
|
|
gp::push_as_cbor(serialized, true);
|
|
|
|
gp_config::assertion(serialized.size() == serialized_manual.size(), "could not encode");
|
|
gp_config::assertion(serialized[0] == serialized_manual[0], "data did not serialize correctly");
|
|
|
|
auto [value, state] = gp::read_cbor<bool>(serialized.as_buffer(), alloc);
|
|
|
|
gp_config::assertion(value.has_value(), "could not encode");
|
|
gp_config::assertion(value.value() == true, "data did not decode correctly");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
};
|
|
|
|
struct cbor_test14 : public generic_cbor_test {
|
|
cbor_test14() {
|
|
name = __FILE__ ":" "##14";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
gp::vector<char> serialized(alloc);
|
|
gp::array<char, 1> serialized_manual{
|
|
char(0b11100000+20)
|
|
};
|
|
|
|
gp::push_as_cbor(serialized, false);
|
|
|
|
gp_config::assertion(serialized.size() == serialized_manual.size(), "could not encode");
|
|
gp_config::assertion(serialized[0] == serialized_manual[0], "data did not serialize correctly");
|
|
|
|
auto [value, state] = gp::read_cbor<bool>(serialized.as_buffer(), alloc);
|
|
|
|
gp_config::assertion(value.has_value(), "could not encode");
|
|
gp_config::assertion(value.value() == false, "data did not decode correctly");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
};
|
|
|
|
struct cbor_test15 : public generic_cbor_test {
|
|
cbor_test15() {
|
|
name = __FILE__ ":" "##15";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
gp::vector<char> serialized(alloc);
|
|
gp::array<char, 1> serialized_manual{
|
|
char(0b11100000+24)
|
|
};
|
|
|
|
gp::push_as_cbor(serialized, gp::cbor_undefined{});
|
|
|
|
gp_config::assertion(serialized.size() == serialized_manual.size(), "could not encode");
|
|
gp_config::assertion(serialized[0] == serialized_manual[0], "data did not serialize correctly");
|
|
|
|
auto [value, state] = gp::read_cbor<gp::cbor_undefined>(serialized.as_buffer(), alloc);
|
|
|
|
gp_config::assertion(value.has_value(), "could not encode");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
};
|
|
|
|
struct cbor_test16 : public generic_cbor_test {
|
|
cbor_test16() {
|
|
name = __FILE__ ":" "##16";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
gp::vector<char> str{alloc};
|
|
str.reserve(5);
|
|
for(auto a : {'h', 'e', 'l', 'l', 'o'})
|
|
str.push_back((char)a);
|
|
|
|
|
|
gp::vector<char> serialized(alloc);
|
|
gp::array<char, 6> serialized_manual{
|
|
char(0b01000101),
|
|
char('h'),
|
|
char('e'),
|
|
char('l'),
|
|
char('l'),
|
|
char('o')
|
|
};
|
|
|
|
gp::push_as_cbor(serialized, str.as_buffer());
|
|
|
|
gp_config::assertion(serialized.size() != serialized_manual.size(), "could not encode");
|
|
for(size_t idx = 0; idx < serialized_manual.size(); idx++) {
|
|
gp_config::assertion(serialized[idx] == serialized_manual[idx], "data did not serialize correctly");
|
|
}
|
|
|
|
auto [value, state] = gp::read_cbor<gp::vector<char>>(serialized.as_buffer(), alloc);
|
|
|
|
gp_config::assertion(value.has_value(), "could not decode");
|
|
gp_config::assertion(value.value() == str, "data did not decode correctly");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
};
|
|
|
|
struct cbor_test17 : public generic_cbor_test {
|
|
cbor_test17() {
|
|
name = __FILE__ ":" "##17";
|
|
}
|
|
|
|
virtual int run() {
|
|
using some_int = gp::fixed_variant<int, unsigned int, long long>;
|
|
{
|
|
gp::vector<char> str{alloc};
|
|
str.reserve(5);
|
|
for(auto a : {'h', 'e', 'l', 'l', 'o'})
|
|
str.push_back((char)a);
|
|
|
|
gp::vector<char> serialized(alloc);
|
|
gp::array<char, 31> serialized_manual{
|
|
char(0b10000101),
|
|
char(0b01000101),
|
|
char('h'),
|
|
char('e'),
|
|
char('l'),
|
|
char('l'),
|
|
char('o'),
|
|
char(0b01000101),
|
|
char('h'),
|
|
char('e'),
|
|
char('l'),
|
|
char('l'),
|
|
char('o'),
|
|
char(0b01000101),
|
|
char('h'),
|
|
char('e'),
|
|
char('l'),
|
|
char('l'),
|
|
char('o'),
|
|
char(0b01000101),
|
|
char('h'),
|
|
char('e'),
|
|
char('l'),
|
|
char('l'),
|
|
char('o'),
|
|
char(0b01000101),
|
|
char('h'),
|
|
char('e'),
|
|
char('l'),
|
|
char('l'),
|
|
char('o')
|
|
};
|
|
|
|
gp::push_as_cbor(serialized, gp::cbor_array_initiator{5});
|
|
gp::repeat(5,
|
|
[&](){
|
|
gp::push_as_cbor(serialized, str.as_buffer());
|
|
}
|
|
);
|
|
|
|
gp_config::assertion(serialized.size() == serialized_manual.size(), "could not encode");
|
|
for(size_t idx = 0; idx < serialized_manual.size(); idx++) {
|
|
gp_config::assertion(serialized[idx] == serialized_manual[idx], "data did not serialize correctly");
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
append_test dummy_pg5zhr84bv(new cbor_test1{});
|
|
append_test dummy_pg5zdhr8bv(new cbor_test2{});
|
|
append_test dummy_pg5zhrf8bv(new cbor_test3{});
|
|
append_test dummy_pg5zhdr8bv(new cbor_test4{});
|
|
append_test dummy_pg5zghr8bv(new cbor_test5{});
|
|
append_test dummy_pg5zhfr8bv(new cbor_test6{});
|
|
append_test dummy_pg5zhrs8bv(new cbor_test7{});
|
|
append_test dummy_pg5zhrj8bv(new cbor_test8{});
|
|
append_test dummy_pg5zhrh8bv(new cbor_test9{});
|
|
append_test dummy_pg5zhrz8bv(new cbor_test10{});
|
|
append_test dummy_pg5zhrg8bv(new cbor_test11{});
|
|
append_test dummy_pg5zher8bv(new cbor_test12{});
|
|
append_test dummy_pg5zhr8rbv(new cbor_test13{});
|
|
append_test dummy_pg5zzhr8bv(new cbor_test14{});
|
|
append_test dummy_p78shrg8bv(new cbor_test15{});
|
|
append_test dummy_p4sddr8rbv(new cbor_test16{});
|
|
append_test dummy_pg5zzdjobv(new cbor_test17{});
|
|
|
|
|
|
/*
|
|
TODO: REWRITE THOSE BAD BOIS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
gp::cbor_value data{alloc};
|
|
data = gp::cbor_floating_point(128.5f);
|
|
|
|
gp::array<std::byte, 5> serialized;
|
|
gp::array<std::byte, 5> serialized_manual{
|
|
std::byte(0b11111010),
|
|
std::byte(0b01000011),
|
|
std::byte(0b00000000),
|
|
std::byte(0b10000000),
|
|
std::byte(0b00000000)
|
|
};
|
|
|
|
auto ret_it = data.encode(serialized.as_buffer());
|
|
|
|
gp_config::assertion(serialized.begin() != ret_it, "could not encode");
|
|
gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
|
|
|
|
gp::fill(serialized,(std::byte)0);
|
|
|
|
auto decoded = gp::cbor_value::decode(alloc, serialized_manual.as_buffer());
|
|
ret_it = decoded.first.encode(serialized.as_buffer());
|
|
|
|
gp_config::assertion(serialized.begin() != ret_it, "could not encode");
|
|
gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
|
|
}
|
|
{
|
|
gp::cbor_value data{alloc};
|
|
data = gp::cbor_floating_point((double)128.5);
|
|
|
|
gp::array<std::byte, 9> serialized;
|
|
gp::array<std::byte, 9> serialized_manual{
|
|
std::byte(0b11111011),
|
|
std::byte(0b01000000),
|
|
std::byte(0b01100000),
|
|
std::byte(0b00010000),
|
|
std::byte(0b00000000),
|
|
std::byte(0b00000000),
|
|
std::byte(0b00000000),
|
|
std::byte(0b00000000),
|
|
std::byte(0b00000000)
|
|
};
|
|
|
|
auto ret_it = data.encode(serialized.as_buffer());
|
|
|
|
gp_config::assertion(serialized.begin() != ret_it, "could not encode");
|
|
gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
|
|
|
|
gp::fill(serialized,(std::byte)0);
|
|
|
|
auto decoded = gp::cbor_value::decode(alloc, serialized_manual.as_buffer());
|
|
ret_it = decoded.first.encode(serialized.as_buffer());
|
|
|
|
gp_config::assertion(serialized.begin() != ret_it, "could not encode");
|
|
gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
|
|
}
|
|
{
|
|
gp::vector<std::byte> str{alloc};
|
|
str.reserve(5);
|
|
for(auto a : {'h', 'e', 'l', 'l', 'o'})
|
|
str.push_back((std::byte)a);
|
|
gp::cbor_value data{alloc};
|
|
data = str;
|
|
gp::vector<gp::cbor_value> meta{alloc};
|
|
gp::repeat(5, [&](){
|
|
meta.push_back(data);
|
|
});
|
|
data = meta;
|
|
|
|
|
|
gp::array<std::byte, 31> serialized;
|
|
gp::array<std::byte, 31> serialized_manual{
|
|
std::byte(0b10000101),
|
|
std::byte(0b01000101),
|
|
std::byte('h'),
|
|
std::byte('e'),
|
|
std::byte('l'),
|
|
std::byte('l'),
|
|
std::byte('o'),
|
|
std::byte(0b01000101),
|
|
std::byte('h'),
|
|
std::byte('e'),
|
|
std::byte('l'),
|
|
std::byte('l'),
|
|
std::byte('o'),
|
|
std::byte(0b01000101),
|
|
std::byte('h'),
|
|
std::byte('e'),
|
|
std::byte('l'),
|
|
std::byte('l'),
|
|
std::byte('o'),
|
|
std::byte(0b01000101),
|
|
std::byte('h'),
|
|
std::byte('e'),
|
|
std::byte('l'),
|
|
std::byte('l'),
|
|
std::byte('o'),
|
|
std::byte(0b01000101),
|
|
std::byte('h'),
|
|
std::byte('e'),
|
|
std::byte('l'),
|
|
std::byte('l'),
|
|
std::byte('o')
|
|
};
|
|
|
|
auto ret_it = data.encode(serialized.as_buffer());
|
|
|
|
gp_config::assertion(serialized.begin() != ret_it, "could not encode");
|
|
gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
|
|
|
|
gp::fill(serialized,(std::byte)0);
|
|
|
|
auto decoded = gp::cbor_value::decode(alloc, serialized_manual.as_buffer());
|
|
ret_it = decoded.first.encode(serialized.as_buffer());
|
|
|
|
gp_config::assertion(serialized.begin() != ret_it, "could not encode");
|
|
gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
|
|
}
|
|
{
|
|
gp::vector<std::byte> str{alloc};
|
|
str.reserve(5);
|
|
for(auto a : {'h', 'e', 'l', 'l', 'o'})
|
|
str.push_back((std::byte)a);
|
|
gp::cbor_value data{alloc};
|
|
data = str;
|
|
gp::vector<gp::pair<gp::cbor_value, gp::cbor_value>> meta{alloc};
|
|
gp::repeat(2, [&](){
|
|
meta.push_back(gp::make_pair(data, data));
|
|
});
|
|
data = meta;
|
|
|
|
|
|
gp::array<std::byte, 25> serialized;
|
|
gp::array<std::byte, 25> serialized_manual{
|
|
std::byte(0b10100010),
|
|
std::byte(0b01000101),
|
|
std::byte('h'),
|
|
std::byte('e'),
|
|
std::byte('l'),
|
|
std::byte('l'),
|
|
std::byte('o'),
|
|
std::byte(0b01000101),
|
|
std::byte('h'),
|
|
std::byte('e'),
|
|
std::byte('l'),
|
|
std::byte('l'),
|
|
std::byte('o'),
|
|
std::byte(0b01000101),
|
|
std::byte('h'),
|
|
std::byte('e'),
|
|
std::byte('l'),
|
|
std::byte('l'),
|
|
std::byte('o'),
|
|
std::byte(0b01000101),
|
|
std::byte('h'),
|
|
std::byte('e'),
|
|
std::byte('l'),
|
|
std::byte('l'),
|
|
std::byte('o')
|
|
};
|
|
|
|
auto ret_it = data.encode(serialized.as_buffer());
|
|
|
|
gp_config::assertion(serialized.begin() != ret_it, "could not encode");
|
|
gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
|
|
|
|
gp::fill(serialized,(std::byte)0);
|
|
|
|
auto decoded = gp::cbor_value::decode(alloc, serialized_manual.as_buffer());
|
|
ret_it = decoded.first.encode(serialized.as_buffer());
|
|
|
|
gp_config::assertion(serialized.begin() != ret_it, "could not encode");
|
|
gp_config::assertion(serialized == serialized_manual, "data did not serialize correctly");
|
|
}
|
|
|
|
*/
|