summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-02 15:42:33 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-02 15:42:33 +0200
commit465c1379ceec8db1fc8990a3fe3bda2f2786d339 (patch)
tree4d079585f9601330070c35ee902a33151714f578
parentbbe2baab28853ef4a62fa748e690c7bd9e4215be (diff)
wip
-rw-r--r--modules/codec/c++/simple.hpp10
-rw-r--r--modules/codec/tests/transport.cpp57
2 files changed, 63 insertions, 4 deletions
diff --git a/modules/codec/c++/simple.hpp b/modules/codec/c++/simple.hpp
index 1afdc33..b0cdfd9 100644
--- a/modules/codec/c++/simple.hpp
+++ b/modules/codec/c++/simple.hpp
@@ -14,16 +14,18 @@ struct KelSimple {};
template<typename T>
class data<T, encode::KelSimple> {
private:
- ring_buffer buffer_;
+ own<buffer> buffer_;
public:
- data() = default;
+ data():
+ buffer_{heap<ring_buffer>()}
+ {}
- data(ring_buffer buffer__):
+ data(own<buffer> buffer__):
buffer_{std::move(buffer__)}
{}
buffer& get_buffer(){
- return buffer_;
+ return *buffer_;
}
};
diff --git a/modules/codec/tests/transport.cpp b/modules/codec/tests/transport.cpp
new file mode 100644
index 0000000..cffee24
--- /dev/null
+++ b/modules/codec/tests/transport.cpp
@@ -0,0 +1,57 @@
+#include <forstio/test/suite.hpp>
+#include "../c++/data.hpp"
+#include "../c++/simple.hpp"
+
+#include <iostream>
+
+namespace {
+namespace schema {
+using namespace saw::schema;
+
+using ZeroDimArray = Array<Int32,0>;
+using OneDimArray = Array<Int32,1>;
+using TwoDimArray = Array<Int32,2>;
+using ThreeDimArray = Array<Int32,3>;
+
+using TestStruct = Struct<
+ Member<TwoDimArray, "two_dim_array">,
+ Member<UInt64, "number">
+>;
+
+}
+
+SAW_TEST("KelSimple Struct write and read back"){
+ using namespace saw;
+
+ ring_buffer buffer{2048u};
+
+ data<schema::TestStruct,encode::Native> native;
+
+ data<schema::TestStruct,encode::KelSimple> simple;
+
+ auto& tda = native.template get<"two_dim_array">();
+ tda = {1,2};
+
+ tda.at(0,0).set(5);
+ tda.at(0,1).set(3);
+ native.template get<"number">().set(410);
+
+ codec<schema::TestStruct, encode::KelSimple> codec;
+
+ auto eov = codec.encode(native, simple);
+ SAW_EXPECT(eov.is_value(), "Encoding error");
+
+ // Reset values
+ native = {};
+
+ eov = codec.decode(simple, native);
+ SAW_EXPECT(eov.is_value(), "Decoding error");
+
+ auto& dec_tda = native.template get<"two_dim_array">();
+
+ SAW_EXPECT(dec_tda.at(0,0).get() == 5, "Incorrect Decoding in array 0,0");
+ SAW_EXPECT(dec_tda.at(0,1).get() == 3, "Incorrect Decoding in array 0,1");
+ SAW_EXPECT(native.template get<"number">().get() == 410, "Incorrect Decoding in number");
+}
+
+}