diff options
Diffstat (limited to 'Userland')
-rw-r--r-- | Userland/test-compress.cpp | 96 |
1 files changed, 34 insertions, 62 deletions
diff --git a/Userland/test-compress.cpp b/Userland/test-compress.cpp index ce43de84b0..76d054039f 100644 --- a/Userland/test-compress.cpp +++ b/Userland/test-compress.cpp @@ -24,79 +24,51 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include <AK/TestSuite.h> + #include <LibCompress/Deflate.h> #include <LibCompress/Zlib.h> -#include <LibCore/ArgsParser.h> -auto main(int argc, char** argv) -> int +bool compare(ReadonlyBytes lhs, ReadonlyBytes rhs) { - const char* mode = nullptr; - const char* type = nullptr; - - Core::ArgsParser parser; - parser.add_positional_argument(type, "Type of algorithm to apply (Only Zlib and DEFLATE is present at the moment)", "type", Core::ArgsParser::Required::No); - parser.add_positional_argument(mode, "Mode to operate in (compress|decompress; Only decompress is valid at the moment)", "mode", Core::ArgsParser::Required::No); - parser.parse(argc, argv); + if (lhs.size() != rhs.size()) + return false; - if (type == nullptr) { - type = "deflate"; + for (size_t idx = 0; idx < lhs.size(); ++idx) { + if (lhs[idx] != rhs[idx]) + return false; } - if (mode == nullptr) { - mode = "decompress"; - } - - StringView mode_sv { mode }; - StringView type_sv { type }; - if (mode_sv == "decompress") { - if (type_sv == "deflate") { - // Deflated bytes for the string "This is a simple text file :)" - u8 data_bytes[] = { - 0x0B, 0xC9, 0xC8, 0x2C, - 0x56, 0x00, 0xA2, 0x44, - 0x85, 0xE2, 0xCC, 0xDC, - 0x82, 0x9C, 0x54, 0x85, - 0x92, 0xD4, 0x8A, 0x12, - 0x85, 0xB4, 0x4C, 0x20, - 0xCB, 0x4A, 0x13, 0x00 - }; + return true; +} - auto deflated = Compress::DeflateStream::decompress_all({ data_bytes, 4 * 7 }); - auto decompressed = String((const char*)deflated.data(), deflated.size()); +TEST_CASE(deflate_decompress_compressed_block) +{ + const u8 compressed[] = { + 0x0B, 0xC9, 0xC8, 0x2C, 0x56, 0x00, 0xA2, 0x44, 0x85, 0xE2, 0xCC, 0xDC, + 0x82, 0x9C, 0x54, 0x85, 0x92, 0xD4, 0x8A, 0x12, 0x85, 0xB4, 0x4C, 0x20, + 0xCB, 0x4A, 0x13, 0x00 + }; - if (decompressed.equals_ignoring_case("This is a simple text file :)")) { - printf("Test PASSED"); - return 0; - } else { - printf("Test FAILED"); - return 1; - } - } + const u8 uncompressed[] = "This is a simple text file :)"; - if (type_sv == "zlib") { - // zlib bytes for the string "This is a simple text file :)" - u8 data_bytes[] = { - 0x78, 0x01, 0x01, 0x1D, 0x00, 0xE2, 0xFF, 0x54, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, - 0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, - 0x74, 0x65, 0x78, 0x74, 0x20, 0x66, 0x69, 0x6C, - 0x65, 0x20, 0x3A, 0x29, 0x99, 0x5E, 0x09, 0xE8 - }; + const auto decompressed = Compress::DeflateStream::decompress_all({ compressed, sizeof(compressed) }); + EXPECT(compare({ uncompressed, sizeof(uncompressed) - 1 }, decompressed.span())); +} - auto deflater = Compress::Zlib({ data_bytes, 8 * 5 }); - auto deflated = deflater.decompress(); - auto decompressed = String((const char*)deflated.data(), deflated.size()); +TEST_CASE(zlib_simple_decompress) +{ + const u8 compressed[] = { + 0x78, 0x01, 0x01, 0x1D, 0x00, 0xE2, 0xFF, 0x54, 0x68, 0x69, 0x73, 0x20, + 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6D, 0x70, 0x6C, 0x65, 0x20, + 0x74, 0x65, 0x78, 0x74, 0x20, 0x66, 0x69, 0x6C, 0x65, 0x20, 0x3A, 0x29, + 0x99, 0x5E, 0x09, 0xE8 + }; - if (decompressed.equals_ignoring_case("This is a simple text file :)")) { - printf("Test PASSED"); - return 0; - } else { - printf("Test FAILED"); - return 1; - } - } - } + const u8 uncompressed[] = "This is a simple text file :)"; - printf("Unknown arguments passed to test!"); - return 1; + const auto decompressed = Compress::Zlib { { compressed, sizeof(compressed) } }.decompress(); + EXPECT(compare({ uncompressed, sizeof(uncompressed) - 1 }, decompressed.span())); } + +TEST_MAIN(Compress) |