simplesync/test/simplesync_test.cpp
2024-01-12 18:56:51 +01:00

82 lines
2.5 KiB
C++

#include <cstdint>
#include <cstring>
#include <gtest/gtest.h>
#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<int, int, 999> 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();
}