aboutsummaryrefslogtreecommitdiff
path: root/pw_protobuf/stream_decoder_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'pw_protobuf/stream_decoder_test.cc')
-rw-r--r--pw_protobuf/stream_decoder_test.cc90
1 files changed, 86 insertions, 4 deletions
diff --git a/pw_protobuf/stream_decoder_test.cc b/pw_protobuf/stream_decoder_test.cc
index 302d134b9..db90d3382 100644
--- a/pw_protobuf/stream_decoder_test.cc
+++ b/pw_protobuf/stream_decoder_test.cc
@@ -61,6 +61,12 @@ TEST(StreamDecoder, Decode) {
0x2d, 0xef, 0xbe, 0xad, 0xde,
// type=string, k=6, v="Hello world"
0x32, 0x0b, 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd',
+ // type=sfixed32, k=7, v=-50
+ 0x3d, 0xce, 0xff, 0xff, 0xff,
+ // type=sfixed64, k=8, v=-1647993274
+ 0x41, 0x46, 0x9e, 0xc5, 0x9d, 0xff, 0xff, 0xff, 0xff,
+ // type=float, k=9, v=2.718
+ 0x4d, 0xb6, 0xf3, 0x2d, 0x40,
};
// clang-format on
@@ -105,6 +111,24 @@ TEST(StreamDecoder, Decode) {
buffer[sws.size()] = '\0';
EXPECT_STREQ(buffer, "Hello world");
+ EXPECT_EQ(decoder.Next(), OkStatus());
+ ASSERT_EQ(decoder.FieldNumber().value(), 7u);
+ Result<int32_t> sfixed32 = decoder.ReadSfixed32();
+ ASSERT_EQ(sfixed32.status(), OkStatus());
+ EXPECT_EQ(sfixed32.value(), -50);
+
+ EXPECT_EQ(decoder.Next(), OkStatus());
+ ASSERT_EQ(decoder.FieldNumber().value(), 8u);
+ Result<int64_t> sfixed64 = decoder.ReadSfixed64();
+ ASSERT_EQ(sfixed64.status(), OkStatus());
+ EXPECT_EQ(sfixed64.value(), -1647993274);
+
+ EXPECT_EQ(decoder.Next(), OkStatus());
+ ASSERT_EQ(decoder.FieldNumber().value(), 9u);
+ Result<float> flt = decoder.ReadFloat();
+ ASSERT_EQ(flt.status(), OkStatus());
+ EXPECT_EQ(flt.value(), 2.718f);
+
EXPECT_EQ(decoder.Next(), Status::OutOfRange());
}
@@ -917,7 +941,23 @@ TEST(StreamDecoder, PackedFixed) {
0xc8, 0x00, 0x00, 0x00,
// type=fixed64[], v=2, v={0x0102030405060708}
0x12, 0x08,
- 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01
+ 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01,
+ // type=sfixed32[], k=3, v={0, -50, 100, -150, 200}
+ 0x1a, 0x14,
+ 0x00, 0x00, 0x00, 0x00,
+ 0xce, 0xff, 0xff, 0xff,
+ 0x64, 0x00, 0x00, 0x00,
+ 0x6a, 0xff, 0xff, 0xff,
+ 0xc8, 0x00, 0x00, 0x00,
+ // type=sfixed64[], v=4, v={-1647993274}
+ 0x22, 0x08,
+ 0x46, 0x9e, 0xc5, 0x9d, 0xff, 0xff, 0xff, 0xff,
+ // type=double[], k=5, v=3.14159
+ 0x2a, 0x08,
+ 0x6e, 0x86, 0x1b, 0xf0, 0xf9, 0x21, 0x09, 0x40,
+ // type=float[], k=6, v=2.718
+ 0x32, 0x04,
+ 0xb6, 0xf3, 0x2d, 0x40,
};
// clang-format on
@@ -945,12 +985,54 @@ TEST(StreamDecoder, PackedFixed) {
EXPECT_EQ(size.size(), 1u);
EXPECT_EQ(fixed64[0], 0x0102030405060708u);
+
+ EXPECT_EQ(decoder.Next(), OkStatus());
+ ASSERT_EQ(decoder.FieldNumber().value(), 3u);
+ std::array<int32_t, 8> sfixed32{};
+ size = decoder.ReadPackedSfixed32(sfixed32);
+ ASSERT_EQ(size.status(), OkStatus());
+ EXPECT_EQ(size.size(), 5u);
+
+ EXPECT_EQ(sfixed32[0], 0);
+ EXPECT_EQ(sfixed32[1], -50);
+ EXPECT_EQ(sfixed32[2], 100);
+ EXPECT_EQ(sfixed32[3], -150);
+ EXPECT_EQ(sfixed32[4], 200);
+
+ EXPECT_EQ(decoder.Next(), OkStatus());
+ ASSERT_EQ(decoder.FieldNumber().value(), 4u);
+ std::array<int64_t, 8> sfixed64{};
+ size = decoder.ReadPackedSfixed64(sfixed64);
+ ASSERT_EQ(size.status(), OkStatus());
+ EXPECT_EQ(size.size(), 1u);
+
+ EXPECT_EQ(sfixed64[0], -1647993274);
+
+ EXPECT_EQ(decoder.Next(), OkStatus());
+ ASSERT_EQ(decoder.FieldNumber().value(), 5u);
+ std::array<double, 8> dbl{};
+ size = decoder.ReadPackedDouble(dbl);
+ ASSERT_EQ(size.status(), OkStatus());
+ EXPECT_EQ(size.size(), 1u);
+
+ EXPECT_EQ(dbl[0], 3.14159);
+
+ EXPECT_EQ(decoder.Next(), OkStatus());
+ ASSERT_EQ(decoder.FieldNumber().value(), 6u);
+ std::array<float, 8> flt{};
+ size = decoder.ReadPackedFloat(flt);
+ ASSERT_EQ(size.status(), OkStatus());
+ EXPECT_EQ(size.size(), 1u);
+
+ EXPECT_EQ(flt[0], 2.718f);
+
+ EXPECT_EQ(decoder.Next(), Status::OutOfRange());
}
TEST(StreamDecoder, PackedFixedInsufficientSpace) {
// clang-format off
constexpr uint8_t encoded_proto[] = {
- // type=sfixed32[], k=1, v={0, 50, 100, 150, 200}
+ // type=fixed32[], k=1, v={0, 50, 100, 150, 200}
0x0a, 0x14,
0x00, 0x00, 0x00, 0x00,
0x32, 0x00, 0x00, 0x00,
@@ -965,8 +1047,8 @@ TEST(StreamDecoder, PackedFixedInsufficientSpace) {
EXPECT_EQ(decoder.Next(), OkStatus());
ASSERT_EQ(decoder.FieldNumber().value(), 1u);
- std::array<uint32_t, 2> sfixed32{};
- StatusWithSize size = decoder.ReadPackedFixed32(sfixed32);
+ std::array<uint32_t, 2> fixed32{};
+ StatusWithSize size = decoder.ReadPackedFixed32(fixed32);
ASSERT_EQ(size.status(), Status::ResourceExhausted());
}