#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("double decoder", "[reader]") {
    double decoded_num;
    uint64_t bytes_read;

    uint8_t num_bytes_100[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40};
    bytes_read = decode_double(num_bytes_100, num_bytes_100 + 8, &decoded_num);
    REQUIRE(decoded_num == 100);
    REQUIRE(bytes_read == 8);

    uint8_t num_bytes_pi[] = {0x6E, 0x86, 0x1B, 0xF0, 0xF9, 0x21, 0x09, 0x40};
    bytes_read = decode_double(num_bytes_pi, num_bytes_pi + 8, &decoded_num);
    REQUIRE(decoded_num == 3.14159);
    REQUIRE(bytes_read == 8);

    uint8_t num_bytes_neg_euler[] = {0x96, 0xB4, 0xE2, 0x1B, 0x0A, 0xBF, 0x05, 0xC0};
    bytes_read = decode_double(num_bytes_neg_euler, num_bytes_neg_euler + 8, &decoded_num);
    REQUIRE(decoded_num == -2.718281);
    REQUIRE(bytes_read == 8);

    bytes_read = decode_double(num_bytes_neg_euler, num_bytes_neg_euler + 7, &decoded_num);
    REQUIRE(bytes_read == 0);
}

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);
}