From 738bc442f680bda95667e4fd1ae743c6f6afeab0 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Sat, 3 Aug 2024 16:20:39 +0200 Subject: Made transport slicing possible --- modules/codec/tests/transport.cpp | 114 ++++++++++++++++++++++++++++++++++---- 1 file changed, 104 insertions(+), 10 deletions(-) (limited to 'modules/codec/tests') diff --git a/modules/codec/tests/transport.cpp b/modules/codec/tests/transport.cpp index e24fae6..f5943dd 100644 --- a/modules/codec/tests/transport.cpp +++ b/modules/codec/tests/transport.cpp @@ -1,6 +1,7 @@ #include #include "../c++/data.hpp" #include "../c++/simple.hpp" +#include "../c++/transport.hpp" #include @@ -23,12 +24,10 @@ using TestStruct = Struct< SAW_TEST("Transport FixedLen Struct write and slice"){ using namespace saw; - return; ring_buffer buff{2048u}; data native; - - data simple{heap(buff)}; + data simple; { auto& tda = native.template get<"two_dim_array">(); @@ -40,12 +39,30 @@ SAW_TEST("Transport FixedLen Struct write and slice"){ } codec codec; - auto eov = codec.encode(native, simple); - SAW_EXPECT(eov.is_value(), "Encoding error"); + { + auto eov = codec.encode(native, simple); + SAW_EXPECT(eov.is_value(), "Encoding error."); + } + + { + auto& rd_buff = simple.get_buffer(); + + { + auto eov = stream_value::encode(rd_buff.read_composite_length(), buff); + SAW_EXPECT(eov.is_value(), "Buffer write length error."); + } + { + auto eov = buff.write_from(rd_buff); + SAW_EXPECT(eov.is_value(), "Buffer copy error."); + auto& val = eov.get_value(); + rd_buff.read_advance(val); + buff.write_advance(val); + } + } // Reset values native = {}; - simple = {heap(buff)}; + simple = {}; { auto& tda = native.template get<"two_dim_array">(); tda = {1,2}; @@ -54,10 +71,87 @@ SAW_TEST("Transport FixedLen Struct write and slice"){ tda.at(0,1).set(4); native.template get<"number">().set(709); } + { + auto eov = codec.encode(native, simple); + SAW_EXPECT(eov.is_value(), "Encoding error on second try."); + } + + { + auto& rd_buff = simple.get_buffer(); + + { + auto eov = stream_value::encode(rd_buff.read_composite_length(), buff); + SAW_EXPECT(eov.is_value(), "Buffer write length error."); + } + { + auto eov = buff.write_from(rd_buff); + SAW_EXPECT(eov.is_value(), "Buffer copy error."); + auto& val = eov.get_value(); + rd_buff.read_advance(val); + buff.write_advance(val); + } + } - auto eov = codec.encode(native, simple); - SAW_EXPECT(eov.is_value(), "Encoding error"); - + transport> trans; + { + auto eo_slice = trans.view_slice(buff); + + SAW_EXPECT(eo_slice.is_value(), "Buffer write length error."); + auto& slice = eo_slice.get_value(); + + auto arr_buff = heap(1024u); + { + auto eov = arr_buff->write_from(slice); + SAW_EXPECT(eov.is_value(), "Failed to copy buffer."); + auto& len_val = eov.get_value(); + + slice.read_advance(len_val); + buff.read_advance(len_val); + arr_buff->write_advance(len_val); + } + + data simple_slice{std::move(arr_buff)}; + native = {}; + auto eov = codec.decode(simple_slice, native); + SAW_EXPECT(eov.is_value(), "Decoding error on first try."); + + { + auto& tda = native.template get<"two_dim_array">(); + + SAW_EXPECT(tda.at(0,0).get() == 5, "Decoded value (0,0) wrong."); + SAW_EXPECT(tda.at(0,1).get() == 3, "Decoded value (0,1) wrong."); + SAW_EXPECT(native.template get<"number">().get() == 410, "Decoded value number wrong."); + } + } + { + auto eo_slice = trans.view_slice(buff); + + SAW_EXPECT(eo_slice.is_value(), "Buffer write length error."); + auto& slice = eo_slice.get_value(); + + auto arr_buff = heap(1024u); + { + auto eov = arr_buff->write_from(slice); + SAW_EXPECT(eov.is_value(), "Failed to copy buffer."); + auto& len_val = eov.get_value(); + + slice.read_advance(len_val); + buff.read_advance(len_val); + arr_buff->write_advance(len_val); + } + + data simple_slice{std::move(arr_buff)}; + native = {}; + auto eov = codec.decode(simple_slice, native); + SAW_EXPECT(eov.is_value(), "Decoding error on second try."); + + { + auto& tda = native.template get<"two_dim_array">(); + + SAW_EXPECT(tda.at(0,0).get() == 2, "Decoded value (0,0) wrong."); + SAW_EXPECT(tda.at(0,1).get() == 4, "Decoded value (0,1) wrong."); + SAW_EXPECT(native.template get<"number">().get() == 709, "Decoded value number wrong."); + } + } } - } -- cgit v1.2.3