| #include <catch.hpp> |
| #include <rive/core/reader.h> |
| |
| TEST_CASE("uint leb decoder", "[reader]") |
| { |
| uint64_t result; |
| |
| uint8_t encoded1[] = {0x01}; |
| decode_uint_leb(encoded1, encoded1 + 1, &result); |
| REQUIRE(result == 1); |
| |
| uint8_t encoded15[] = {0x0F}; |
| decode_uint_leb(encoded15, encoded15 + 1, &result); |
| REQUIRE(result == 15); |
| |
| uint8_t encodedMultiByte[] = {0xE5, 0x8E, 0x26}; |
| decode_uint_leb(encodedMultiByte, encodedMultiByte + 3, &result); |
| REQUIRE(result == 624485); |
| } |
| |
| TEST_CASE("string decoder", "[reader]") |
| { |
| char* str = strdup("New Artboard"); |
| uint8_t str_bytes[] = {0x4E, 0x65, 0x77, 0x20, 0x41, 0x72, 0x74, 0x62, 0x6F, 0x61, 0x72, 0x64}; |
| // Length of string + 1 is needed to add the null terminator |
| char* decoded_str = (char*)malloc((13) * sizeof(char)); |
| uint64_t bytes_read = decode_string(12, str_bytes, str_bytes + 12, decoded_str); |
| REQUIRE(strcmp(str, decoded_str) == 0); |
| REQUIRE(bytes_read == 12); |
| |
| bytes_read = decode_string(12, str_bytes, str_bytes + 11, decoded_str); |
| REQUIRE(bytes_read == 0); |
| delete str; |
| delete decoded_str; |
| } |
| |
| TEST_CASE("float decoder", "[reader]") |
| { |
| float decoded_num; |
| uint64_t bytes_read; |
| |
| uint8_t num_bytes_100[] = {0x00, 0x00, 0xC8, 0x42}; |
| bytes_read = decode_float(num_bytes_100, num_bytes_100 + 4, &decoded_num); |
| REQUIRE(decoded_num == 100.0f); |
| REQUIRE(bytes_read == 4); |
| |
| uint8_t num_bytes_pi[] = {0xD0, 0x0F, 0x49, 0x40}; |
| bytes_read = decode_float(num_bytes_pi, num_bytes_pi + 4, &decoded_num); |
| REQUIRE(decoded_num == 3.14159f); |
| REQUIRE(bytes_read == 4); |
| |
| uint8_t num_bytes_neg_euler[] = {0x51, 0xF8, 0x2D, 0xC0}; |
| bytes_read = decode_float(num_bytes_neg_euler, num_bytes_neg_euler + 4, &decoded_num); |
| REQUIRE(decoded_num == -2.718281f); |
| REQUIRE(bytes_read == 4); |
| |
| bytes_read = decode_float(num_bytes_neg_euler, num_bytes_neg_euler + 3, &decoded_num); |
| REQUIRE(bytes_read == 0); |
| } |
| |
| TEST_CASE("byte decoder", "[reader") |
| { |
| uint8_t decoded_byte; |
| // luigi: commented this out as it was giving a warning (I added -Wall to |
| // the compiler flags). Warning was: |
| // |
| // ../../rive/test/reader_test.cpp:108:11: warning: unused variable |
| // 'bytes_read' [-Wunused-variable] |
| // |
| // uint64_t bytes_read; |
| uint8_t pos = 0; |
| uint8_t bytes[] = {0x00, 0x00, 0xC8, 0x42}; |
| |
| pos += decode_uint_8(bytes + pos, bytes + 4, &decoded_byte); |
| REQUIRE(decoded_byte == bytes[pos - 1]); |
| pos += decode_uint_8(bytes + pos, bytes + 4, &decoded_byte); |
| REQUIRE(decoded_byte == bytes[pos - 1]); |
| pos += decode_uint_8(bytes + pos, bytes + 4, &decoded_byte); |
| REQUIRE(decoded_byte == bytes[pos - 1]); |
| pos += decode_uint_8(bytes + pos, bytes + 4, &decoded_byte); |
| REQUIRE(decoded_byte == bytes[pos - 1]); |
| // overflow |
| REQUIRE(decode_uint_8(bytes + pos, bytes + 4, &decoded_byte) == 0); |
| } |