From 653ff976f507ae5dd1e5f448f524861155ba56a1 Mon Sep 17 00:00:00 2001 From: xgdgsc Date: Fri, 17 Mar 2023 22:09:20 +0800 Subject: [PATCH] clamp , merge test --- Cargo.lock | 68 ++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/commands/compress.rs | 16 +++++----- tests/integration.rs | 28 ++++------------- 4 files changed, 83 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 837f7f7..1621202 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -653,6 +653,73 @@ dependencies = [ "getrandom", ] +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.15" @@ -706,6 +773,7 @@ dependencies = [ "libc", "linked-hash-map", "lzzzz", + "num", "once_cell", "parse-display", "proptest", diff --git a/Cargo.toml b/Cargo.toml index d7291ee..c8dff06 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ ignore = "0.4.20" libc = "0.2.140" linked-hash-map = "0.5.6" lzzzz = "1.0.4" +num = "0.4.0" once_cell = "1.17.1" rayon = "1.7.0" same-file = "1.0.6" diff --git a/src/commands/compress.rs b/src/commands/compress.rs index 54eb1a2..f8da228 100644 --- a/src/commands/compress.rs +++ b/src/commands/compress.rs @@ -45,36 +45,36 @@ pub fn compress_files( // by default, ParCompress uses a default compression level of 3 // instead of the regular default that flate2 uses gzp::par::compress::ParCompress::::builder() - .compression_level(level.map_or_else(Default::default, |l| { - gzp::Compression::new(if l < 1 || l > 9 { 1 } else { l as u32 }) - })) + .compression_level( + level.map_or_else(Default::default, |l| gzp::Compression::new(num::clamp(l as u32, 1, 9))), + ) .from_writer(encoder), ), Bzip => Box::new(bzip2::write::BzEncoder::new( encoder, level.map_or_else(Default::default, |l| { - bzip2::Compression::new(if l < 1 || l > 9 { 1 } else { l as u32 }) + bzip2::Compression::new(num::clamp(l as u32, 1, 9)) }), )), Lz4 => Box::new(lzzzz::lz4f::WriteCompressor::new( encoder, lzzzz::lz4f::PreferencesBuilder::new() - .compression_level(level.map_or(0, |l| if l < 1 || l > 12 { 0 } else { l as i32 })) + .compression_level(level.map_or(0, |l| num::clamp(l as i32, 1, 12))) .build(), )?), Lzma => Box::new(xz2::write::XzEncoder::new( encoder, - level.map_or(6, |l| if l < 0 || l > 9 { 6 } else { l as u32 }), + level.map_or(6, |l| num::clamp(l as u32, 0, 9)), )), Snappy => Box::new( gzp::par::compress::ParCompress::::builder() .compression_level(gzp::par::compress::Compression::new( - level.map_or_else(Default::default, |l| l as u32), + level.map_or_else(Default::default, |l| num::clamp(l as u32, 0, 9)), )) .from_writer(encoder), ), Zstd => Box::new( - zstd::stream::write::Encoder::new(encoder, level.map_or(0, |l| l as i32)) + zstd::stream::write::Encoder::new(encoder, level.map_or(0, |l| num::clamp(l as i32, 1, 22))) .unwrap() .auto_finish(), ), diff --git a/tests/integration.rs b/tests/integration.rs index 428524f..4b1d518 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -100,7 +100,11 @@ fn single_empty_file(ext: Extension, #[any(size_range(0..8).lift())] exts: Vec) { +fn single_file( + ext: Extension, + #[any(size_range(0..8).lift())] exts: Vec, + #[strategy(0i16..30)] level: i16, +) { let dir = tempdir().unwrap(); let dir = dir.path(); let before = &dir.join("before"); @@ -109,7 +113,7 @@ fn single_file(ext: Extension, #[any(size_range(0..8).lift())] exts: Vec, - #[strategy(0i16..30)] level: i16, -) { - let dir = tempdir().unwrap(); - let dir = dir.path(); - let before = &dir.join("before"); - fs::create_dir(before).unwrap(); - let before_file = &before.join("file"); - let archive = &dir.join(format!("file.{}", merge_extensions(ext, exts))); - let after = &dir.join("after"); - fs::write(before_file, []).unwrap(); - ouch!("-A", "c", "-l", level.to_string(), before_file, archive); - ouch!("-A", "d", archive, "-d", after); - assert_same_directory(before, after, false); -}