diff options
| author | Valentin Popov <valentin@popov.link> | 2026-02-10 11:57:00 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-02-10 11:57:00 +0300 |
| commit | ba1789f10607f5a6cba5863128d31f776b8e59cc (patch) | |
| tree | cc090228196bddc5a700c5ec32ec61f53c44a4b4 /crates/rsli/src/tests.rs | |
| parent | 842f4a85693b418af81560738aa3136ac500d9b1 (diff) | |
| download | fparkan-ba1789f10607f5a6cba5863128d31f776b8e59cc.tar.xz fparkan-ba1789f10607f5a6cba5863128d31f776b8e59cc.zip | |
fix: обработка выхода за пределы индекса сортировки в архиве и улучшение декодирования LZSS с поддержкой XOR
Diffstat (limited to 'crates/rsli/src/tests.rs')
| -rw-r--r-- | crates/rsli/src/tests.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/crates/rsli/src/tests.rs b/crates/rsli/src/tests.rs index 7ed16b1..94d14af 100644 --- a/crates/rsli/src/tests.rs +++ b/crates/rsli/src/tests.rs @@ -668,6 +668,44 @@ fn rsli_synthetic_all_methods_roundtrip() { } #[test] +fn rsli_xorlzss_huffman_on_the_fly_roundtrip() { + let plain: Vec<u8> = (0..512u16).map(|i| b'A' + (i % 26) as u8).collect(); + let entries = vec![SyntheticRsliEntry { + name: "XLZH_ONFLY".to_string(), + method_raw: 0x0A0, + plain: plain.clone(), + declared_packed_size: None, + }]; + + let bytes = build_rsli_bytes( + &entries, + &RsliBuildOptions { + seed: 0x0BAD_C0DE, + presorted: true, + overlay: 0, + add_ao_trailer: false, + }, + ); + let path = write_temp_file("rsli-xorlzh-onfly", &bytes); + + let library = Library::open_path(&path).expect("open synthetic XLZH archive failed"); + let id = library + .find("XLZH_ONFLY") + .expect("find XLZH_ONFLY entry failed"); + + let loaded = library.load(id).expect("load XLZH_ONFLY failed"); + assert_eq!(loaded, plain); + + let packed = library + .load_packed(id) + .expect("load_packed XLZH_ONFLY failed"); + let unpacked = library.unpack(&packed).expect("unpack XLZH_ONFLY failed"); + assert_eq!(unpacked, loaded); + + let _ = fs::remove_file(&path); +} + +#[test] fn rsli_synthetic_overlay_and_ao_trailer() { let entries = vec