From e2870db5be1503e6a489fc3d47daf950d6f62723 Mon Sep 17 00:00:00 2001 From: Jia Tan Date: Mon, 22 Jan 2024 23:33:39 +0800 Subject: [PATCH] Tests: Add two RISC-V Filter test files. These test files achieve 100% code coverage in src/liblzma/simple/riscv.c. They contain all of the instructions that should be filtered and a few cases that should not. --- tests/files/README | 8 ++++++++ tests/files/good-1-riscv-lzma2-1.xz | Bin 0 -> 7512 bytes tests/files/good-1-riscv-lzma2-2.xz | Bin 0 -> 7516 bytes 3 files changed, 8 insertions(+) create mode 100644 tests/files/good-1-riscv-lzma2-1.xz create mode 100644 tests/files/good-1-riscv-lzma2-2.xz diff --git a/tests/files/README b/tests/files/README index 119cac48..b0b700c5 100644 --- a/tests/files/README +++ b/tests/files/README @@ -80,6 +80,14 @@ good-1-arm64-lzma2-2.xz is like good-1-arm64-lzma2-1.xz but with non-zero start offset. XZ Embedded doesn't support this file. + good-1-riscv-lzma2-1.xz uses the RISC-V filter and LZMA2. The + uncompressed data is constructed so it tests all of the instructions + that should be encoded and a few that should not. Additionally, the + file contains random bytes to help test unforeseen corner cases. + + good-1-riscv-lzma2-2.xz is like good-1-riscv-lzma2-1.xz but with + non-zero start offset. XZ Embedded doesn't support this file. + good-1-lzma2-1.xz has two LZMA2 chunks, of which the second sets new properties. diff --git a/tests/files/good-1-riscv-lzma2-1.xz b/tests/files/good-1-riscv-lzma2-1.xz new file mode 100644 index 0000000000000000000000000000000000000000..38a0e2fd3d84ca4b37819bc61c1638cab7873027 GIT binary patch literal 7512 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