From 64c0dc47a96d9235034ae76f85f2eccf5029276b Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 7 Feb 2025 15:30:16 -0800 Subject: [PATCH] unittests/FEXCore: Fixes VL test and adds decode check So when encoding we also test the decode path. --- FEXCore/unittests/APITests/vl_integer.cpp | 79 +++++++++++++++++++---- 1 file changed, 65 insertions(+), 14 deletions(-) diff --git a/FEXCore/unittests/APITests/vl_integer.cpp b/FEXCore/unittests/APITests/vl_integer.cpp index c9e5bb2ad..7aa67e3ce 100644 --- a/FEXCore/unittests/APITests/vl_integer.cpp +++ b/FEXCore/unittests/APITests/vl_integer.cpp @@ -24,46 +24,73 @@ TEST_CASE("vl-size") { CHECK(FEXCore::Utils::vl64::EncodedSize(std::numeric_limits::max()) == 9); } -TEST_CASE("vl8 - in memory - encode") { +TEST_CASE("vl8 - in memory - encode/decode") { uint8_t data[1]; REQUIRE(FEXCore::Utils::vl64::Encode(data, 0) == 1); CHECK(data[0] == 0); + auto Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 1); + CHECK(Dec.Integer == 0); REQUIRE(FEXCore::Utils::vl64::Encode(data, 63) == 1); CHECK(data[0] == 0b0011'1111); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 1); + CHECK(Dec.Integer == 63); REQUIRE(FEXCore::Utils::vl64::Encode(data, -1) == 1); CHECK(data[0] == 0b0111'1111); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 1); + CHECK(Dec.Integer == -1); REQUIRE(FEXCore::Utils::vl64::Encode(data, -64) == 1); CHECK(data[0] == 0b0100'0000); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 1); + CHECK(Dec.Integer == -64); } -TEST_CASE("vl16 - in memory - encode") { +TEST_CASE("vl16 - in memory - encode/decode") { uint8_t data[2]; REQUIRE(FEXCore::Utils::vl64::Encode(data, -65) == 2); - CHECK(data[0] == 0b1011'1111); - CHECK(data[1] == 0b1011'1111); + CHECK((uint64_t)data[0] == 0b1011'1111); + CHECK((uint64_t)data[1] == 0b1011'1111); + auto Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 2); + CHECK(Dec.Integer == -65); REQUIRE(FEXCore::Utils::vl64::Encode(data, -66) == 2); - CHECK(data[0] == 0b1011'1110); - CHECK(data[1] == 0b1011'1111); + CHECK((uint64_t)data[0] == 0b1011'1111); + CHECK((uint64_t)data[1] == 0b1011'1110); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 2); + CHECK(Dec.Integer == -66); REQUIRE(FEXCore::Utils::vl64::Encode(data, 64) == 2); - CHECK(data[0] == 0b0100'0000); - CHECK(data[1] == 0b1000'0000); + CHECK((uint64_t)data[0] == 0b1000'0000); + CHECK((uint64_t)data[1] == 0b0100'0000); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 2); + CHECK(Dec.Integer == 64); REQUIRE(FEXCore::Utils::vl64::Encode(data, 8191) == 2); - CHECK(data[0] == 0b1111'1111); - CHECK(data[1] == 0b1001'1111); + CHECK((uint64_t)data[0] == 0b1001'1111); + CHECK((uint64_t)data[1] == 0b1111'1111); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 2); + CHECK(Dec.Integer == 8191); REQUIRE(FEXCore::Utils::vl64::Encode(data, -8192) == 2); - CHECK(data[0] == 0b0000'0000); - CHECK(data[1] == 0b1010'0000); + CHECK((uint64_t)data[0] == 0b1010'0000); + CHECK((uint64_t)data[1] == 0b0000'0000); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 2); + CHECK(Dec.Integer == -8192); } -TEST_CASE("vl32 - in memory - encode") { +TEST_CASE("vl32 - in memory - encode/decode") { uint8_t data[5]; int32_t result {}; @@ -71,24 +98,36 @@ TEST_CASE("vl32 - in memory - encode") { CHECK(data[0] == 0b1100'0000); memcpy(&result, &data[1], sizeof(int32_t)); CHECK(result == 8192); + auto Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 5); + CHECK(Dec.Integer == 8192); REQUIRE(FEXCore::Utils::vl64::Encode(data, -8193) == 5); CHECK(data[0] == 0b1100'0000); memcpy(&result, &data[1], sizeof(int32_t)); CHECK(result == -8193); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 5); + CHECK(Dec.Integer == -8193); REQUIRE(FEXCore::Utils::vl64::Encode(data, std::numeric_limits::min()) == 5); CHECK(data[0] == 0b1100'0000); memcpy(&result, &data[1], sizeof(int32_t)); CHECK(result == std::numeric_limits::min()); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 5); + CHECK(Dec.Integer == std::numeric_limits::min()); REQUIRE(FEXCore::Utils::vl64::Encode(data, std::numeric_limits::max()) == 5); CHECK(data[0] == 0b1100'0000); memcpy(&result, &data[1], sizeof(int32_t)); CHECK(result == std::numeric_limits::max()); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 5); + CHECK(Dec.Integer == std::numeric_limits::max()); } -TEST_CASE("vl64 - in memory - encode") { +TEST_CASE("vl64 - in memory - encode/decode") { uint8_t data[9]; int64_t result {}; @@ -96,19 +135,31 @@ TEST_CASE("vl64 - in memory - encode") { CHECK(data[0] == 0b1110'0000); memcpy(&result, &data[1], sizeof(int64_t)); CHECK(result == static_cast(std::numeric_limits::min()) - 1); + auto Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 9); + CHECK(Dec.Integer == static_cast(std::numeric_limits::min()) - 1); REQUIRE(FEXCore::Utils::vl64::Encode(data, static_cast(std::numeric_limits::max()) + 1) == 9); CHECK(data[0] == 0b1110'0000); memcpy(&result, &data[1], sizeof(int64_t)); CHECK(result == static_cast(std::numeric_limits::max()) + 1); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 9); + CHECK(Dec.Integer == static_cast(std::numeric_limits::max()) + 1); REQUIRE(FEXCore::Utils::vl64::Encode(data, std::numeric_limits::min()) == 9); CHECK(data[0] == 0b1110'0000); memcpy(&result, &data[1], sizeof(int64_t)); CHECK(result == std::numeric_limits::min()); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 9); + CHECK(Dec.Integer == std::numeric_limits::min()); REQUIRE(FEXCore::Utils::vl64::Encode(data, std::numeric_limits::max()) == 9); CHECK(data[0] == 0b1110'0000); memcpy(&result, &data[1], sizeof(int64_t)); CHECK(result == std::numeric_limits::max()); + Dec = FEXCore::Utils::vl64::Decode(data); + CHECK(Dec.Size == 9); + CHECK(Dec.Integer == std::numeric_limits::max()); }