diff options
Diffstat (limited to 'tests/codec.cpp')
-rw-r--r-- | tests/codec.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/codec.cpp b/tests/codec.cpp index 442ae57..7253ecc 100644 --- a/tests/codec.cpp +++ b/tests/codec.cpp @@ -18,6 +18,11 @@ using TestStruct = Struct< Member<UInt64, "number"> >; +using TestUnion = Union< + Member<TwoDimArray, "two_dim_array">, + Member<UInt64, "number"> +>; + using TestTuple = Tuple< TwoDimArray, UInt64 @@ -196,6 +201,31 @@ SAW_TEST("KelSimple Struct write and read back"){ 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"); } + +SAW_TEST("KelSimple Union write and read back"){ + using namespace saw; + + data<schema::TestUnion,encode::Native> native; + data<schema::TestUnion,encode::KelSimple> simple; + + native.template set<"number">(data<schema::UInt64, encode::Native>{}); + native.template get<"number">().set(410); + + codec<schema::TestUnion, 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"); + + SAW_EXPECT(native.template holds_alternative<"number">(), "Incorrect Decoding in array 0,1"); + SAW_EXPECT(native.template get<"number">().get() == 410, "Incorrect Decoding in number"); +} + SAW_TEST("KelSimple Tuple write and read back"){ using namespace saw; |