perf: optimizations and additional test cases

This commit is contained in:
Michael Aaron Murphy 2025-11-25 06:24:34 +01:00
parent db4d26e591
commit 44edef9673
No known key found for this signature in database
GPG key ID: B2732D4240C9212C
9 changed files with 225 additions and 226 deletions

View file

@ -28,29 +28,29 @@ impl Directory<'_> {
}
pub fn directory_size_distance(&self, size: u16, scale: u16) -> i16 {
let scaled_size = self.size * self.scale;
let min_scaled_size = self.minsize * self.scale;
let max_scaled_size = self.maxsize * self.scale;
let scale = scale as i16;
let size = size as i16;
let scaled_requested_size = size * scale;
let scaled_requested_size = size as i16 * scale;
match self.type_ {
DirectoryType::Fixed => scaled_size - scaled_requested_size,
DirectoryType::Fixed => self.size * self.scale - scaled_requested_size,
DirectoryType::Scalable => {
let min_scaled_size = self.minsize * self.scale;
if scaled_requested_size < min_scaled_size {
min_scaled_size - scaled_requested_size
} else if scaled_requested_size < max_scaled_size {
scaled_requested_size - max_scaled_size
} else {
0
let max_scaled_size = self.maxsize * self.scale;
if scaled_requested_size < max_scaled_size {
scaled_requested_size - max_scaled_size
} else {
0
}
}
}
DirectoryType::Threshold => {
if scaled_requested_size < (self.size - self.threshold) * scale {
min_scaled_size - scaled_requested_size
self.minsize * self.scale - scaled_requested_size
} else if scaled_requested_size > (self.size + self.threshold) * scale {
scaled_requested_size - max_scaled_size
scaled_requested_size - self.maxsize * self.scale
} else {
0
}
@ -74,9 +74,9 @@ impl Default for DirectoryType {
impl From<&str> for DirectoryType {
fn from(value: &str) -> Self {
match value {
"Fixed" => DirectoryType::Fixed,
"Scalable" => DirectoryType::Scalable,
match value.as_bytes()[0] {
b'F' => DirectoryType::Fixed,
b'S' => DirectoryType::Scalable,
_ => DirectoryType::Threshold,
}
}