#include #include #include #include "simplesync.hpp" TEST(simplesync_test, varint) { uint8_t buf[1024]; for (int i = -999999; i < 999999; i += 29) { int offset = simplesync::encode_varint(i, buf); ASSERT_LE(1, offset); for (int o = 0; o < offset - 1; o += 1) EXPECT_FALSE(buf[o] & 0x80) << "offset:" << offset << " " << (uint32_t)(buf[o] & 0x7F); EXPECT_TRUE(buf[offset - 1] & 0x80) << "offset:" << offset << " " << (uint32_t)(buf[offset - 1] & 0x7F); int out; offset = simplesync::decode_varint(buf, out); ASSERT_LE(1, offset); ASSERT_EQ(out, i); } } TEST(simplesync_test, cobs_encode) { uint8_t buf_raw[] = {0x11, 0x22, 0x00, 0x33}; uint8_t buf_coded[] = {0x03, 0x11, 0x22, 0x02, 0x33, 0x00}; uint8_t buf[sizeof(buf_coded) + 1]; unsigned int buf_used = simplesync::cobs_encode(buf_raw, sizeof(buf_raw), buf, sizeof(buf)); ASSERT_EQ(buf_used, sizeof(buf_coded)); ASSERT_EQ(0, memcmp(buf_coded, buf, sizeof(buf_coded))); unsigned int buf_out_used = sizeof(buf); unsigned int buf_in_used = sizeof(buf_coded); int error = simplesync::cobs_decode(buf_coded, buf_in_used, buf, buf_out_used); ASSERT_EQ(error, 0); ASSERT_EQ(buf_used, sizeof(buf_coded)); ASSERT_EQ(buf_out_used, sizeof(buf_raw)); ASSERT_EQ(0, memcmp(buf_raw, buf, sizeof(buf_raw))); } uint8_t stream_buf[1024]; unsigned int buf_size = sizeof(stream_buf); unsigned int buf_used = 0; TEST(simplesync_test, encode_decode) { buf_used = 0; typedef simplesync::SimpleSyncStatic S; S s([](uint8_t *buf, unsigned int buf_size) { memcpy(stream_buf + buf_used, buf, buf_size); buf_used += buf_size; return 0; }); S::NumberInterface n1(s, (char *)"n1", 0); S::StringInterface s1(s, (char *)"s1", 0); S::NumberInterface n2(s, (char *)"n2", 2); n1.value = 4; strcpy(s1.value, "hallo"); n2.value = 2; for (int time = 0; time < 5; time += 1) { buf_used = 0; s.update(time); s.update(time); unsigned int parsed = 0; for (unsigned int i = 1; i <= buf_used; i += 1) parsed += s.parse_stream_buf(stream_buf + parsed, i - parsed); ASSERT_EQ(parsed, buf_used); } ASSERT_EQ(n1.value, 4); ASSERT_EQ(n2.value, 2); ASSERT_STREQ(s1.value,"hallo"); } int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }