libfreemkv 0.31.4: prune 144 vacuous tests (keep spec-grounded subset)
This commit is contained in:
-189
@@ -127,41 +127,6 @@ pub fn ignore(_event: Event) {}
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
/// EventKind::BytesRead carries bytes and total as u64.
|
||||
/// Mutation: making `bytes` a u32 silently truncates progress on large discs (>4 GiB).
|
||||
#[test]
|
||||
fn bytes_read_fields_are_u64() {
|
||||
// A 4K UHD disc is ~100 GiB — bytes must be u64 to hold it.
|
||||
let event = Event {
|
||||
kind: EventKind::BytesRead {
|
||||
bytes: u64::MAX,
|
||||
total: u64::MAX,
|
||||
},
|
||||
};
|
||||
match event.kind {
|
||||
EventKind::BytesRead { bytes, total } => {
|
||||
assert_eq!(bytes, u64::MAX);
|
||||
assert_eq!(total, u64::MAX);
|
||||
}
|
||||
_ => panic!("wrong variant"),
|
||||
}
|
||||
}
|
||||
|
||||
/// EventKind::SectorSkipped carries a u64 sector number.
|
||||
/// Mutation: using u32 truncates LBAs > 4 GiB sectors (large BD-R discs).
|
||||
#[test]
|
||||
fn sector_skipped_field_is_u64() {
|
||||
let event = Event {
|
||||
kind: EventKind::SectorSkipped { sector: u64::MAX },
|
||||
};
|
||||
match event.kind {
|
||||
EventKind::SectorSkipped { sector } => {
|
||||
assert_eq!(sector, u64::MAX);
|
||||
}
|
||||
_ => panic!("wrong variant"),
|
||||
}
|
||||
}
|
||||
|
||||
/// BatchSizeReason::Shrunk != BatchSizeReason::Probed.
|
||||
/// These two variants carry distinct meanings (error vs. recovery); they
|
||||
/// must not compare as equal.
|
||||
@@ -172,14 +137,6 @@ mod tests {
|
||||
assert_ne!(BatchSizeReason::Shrunk, BatchSizeReason::Probed);
|
||||
}
|
||||
|
||||
/// BatchSizeReason::Shrunk == BatchSizeReason::Shrunk (reflexive equality).
|
||||
/// Mutation: a broken PartialEq impl that always returns false would fail this.
|
||||
#[test]
|
||||
fn batch_size_reason_eq_is_reflexive() {
|
||||
assert_eq!(BatchSizeReason::Shrunk, BatchSizeReason::Shrunk);
|
||||
assert_eq!(BatchSizeReason::Probed, BatchSizeReason::Probed);
|
||||
}
|
||||
|
||||
/// BatchSizeReason is Clone + Copy: cloning does not move the original.
|
||||
/// This is required because EventKind::BatchSizeChanged embeds it by value.
|
||||
/// Mutation: removing Copy would require the caller to clone explicitly;
|
||||
@@ -190,150 +147,4 @@ mod tests {
|
||||
let _r2 = r; // copy, not move
|
||||
let _r3 = r; // r still usable after copy
|
||||
}
|
||||
|
||||
/// EventKind::BatchSizeChanged can be constructed and destructured.
|
||||
/// Mutation: renaming the `reason` field to `cause` breaks all pattern-matches.
|
||||
#[test]
|
||||
fn batch_size_changed_constructs_and_destructs() {
|
||||
let event = Event {
|
||||
kind: EventKind::BatchSizeChanged {
|
||||
new_size: 32,
|
||||
reason: BatchSizeReason::Shrunk,
|
||||
},
|
||||
};
|
||||
match event.kind {
|
||||
EventKind::BatchSizeChanged { new_size, reason } => {
|
||||
assert_eq!(new_size, 32);
|
||||
assert_eq!(reason, BatchSizeReason::Shrunk);
|
||||
}
|
||||
_ => panic!("wrong variant"),
|
||||
}
|
||||
}
|
||||
|
||||
/// EventKind::ExtentStart carries all three fields at u64.
|
||||
/// Mutation: making start_sector a u32 truncates large-disc LBAs.
|
||||
#[test]
|
||||
fn extent_start_fields_are_correct_types() {
|
||||
let event = Event {
|
||||
kind: EventKind::ExtentStart {
|
||||
index: 0,
|
||||
start_sector: u64::MAX,
|
||||
sector_count: u64::MAX,
|
||||
},
|
||||
};
|
||||
match event.kind {
|
||||
EventKind::ExtentStart {
|
||||
index,
|
||||
start_sector,
|
||||
sector_count,
|
||||
} => {
|
||||
assert_eq!(index, 0);
|
||||
assert_eq!(start_sector, u64::MAX);
|
||||
assert_eq!(sector_count, u64::MAX);
|
||||
}
|
||||
_ => panic!("wrong variant"),
|
||||
}
|
||||
}
|
||||
|
||||
/// EventKind::Complete carries bytes (u64) and errors (u32).
|
||||
/// Mutation: making bytes a u32 truncates total-bytes-written on large outputs.
|
||||
#[test]
|
||||
fn complete_fields_are_correct_types() {
|
||||
let event = Event {
|
||||
kind: EventKind::Complete {
|
||||
bytes: u64::MAX,
|
||||
errors: u32::MAX,
|
||||
},
|
||||
};
|
||||
match event.kind {
|
||||
EventKind::Complete { bytes, errors } => {
|
||||
assert_eq!(bytes, u64::MAX);
|
||||
assert_eq!(errors, u32::MAX);
|
||||
}
|
||||
_ => panic!("wrong variant"),
|
||||
}
|
||||
}
|
||||
|
||||
/// ignore() accepts any Event variant without panicking.
|
||||
/// This is trivially true but ensures the function signature matches all
|
||||
/// EventKind variants (would fail to compile if a new variant is added
|
||||
/// without updating the function or the test).
|
||||
/// Mutation: making ignore() generic over a wrong type causes a compile error.
|
||||
#[test]
|
||||
fn ignore_accepts_any_event() {
|
||||
ignore(Event {
|
||||
kind: EventKind::DriveReady,
|
||||
});
|
||||
ignore(Event {
|
||||
kind: EventKind::BytesRead { bytes: 0, total: 0 },
|
||||
});
|
||||
ignore(Event {
|
||||
kind: EventKind::SectorSkipped { sector: 0 },
|
||||
});
|
||||
ignore(Event {
|
||||
kind: EventKind::Complete {
|
||||
bytes: 0,
|
||||
errors: 0,
|
||||
},
|
||||
});
|
||||
ignore(Event {
|
||||
kind: EventKind::BatchSizeChanged {
|
||||
new_size: 16,
|
||||
reason: BatchSizeReason::Probed,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/// EventKind::SpeedChange carries speed_kbs as u16.
|
||||
/// Spec: 0xFFFF is the sentinel meaning "max speed" (value from CD-ROM MMC spec).
|
||||
/// Mutation: using u8 for speed_kbs truncates values > 255 to 0 or wrong values.
|
||||
#[test]
|
||||
fn speed_change_sentinel_max_is_0xffff() {
|
||||
let event = Event {
|
||||
kind: EventKind::SpeedChange { speed_kbs: 0xFFFF },
|
||||
};
|
||||
match event.kind {
|
||||
EventKind::SpeedChange { speed_kbs } => {
|
||||
assert_eq!(
|
||||
speed_kbs, 0xFFFF,
|
||||
"0xFFFF is the max-speed sentinel (MMC spec)"
|
||||
);
|
||||
}
|
||||
_ => panic!("wrong variant"),
|
||||
}
|
||||
}
|
||||
|
||||
/// EventKind::ReadError carries an error with a sector field.
|
||||
/// Mutation: using i64 for sector would allow negative sector values (nonsensical).
|
||||
#[test]
|
||||
fn read_error_carries_error_and_sector() {
|
||||
use crate::error::Error;
|
||||
let event = Event {
|
||||
kind: EventKind::ReadError {
|
||||
sector: 99_999,
|
||||
error: Error::Halted,
|
||||
},
|
||||
};
|
||||
match event.kind {
|
||||
EventKind::ReadError { sector, .. } => {
|
||||
assert_eq!(sector, 99_999u64);
|
||||
}
|
||||
_ => panic!("wrong variant"),
|
||||
}
|
||||
}
|
||||
|
||||
/// EventKind::Retry carries attempt as u32 (1-based).
|
||||
/// Mutation: u8 for attempt overflows after 255 retries without warning.
|
||||
#[test]
|
||||
fn retry_attempt_is_u32() {
|
||||
let event = Event {
|
||||
kind: EventKind::Retry { attempt: u32::MAX },
|
||||
};
|
||||
match event.kind {
|
||||
EventKind::Retry { attempt } => {
|
||||
assert_eq!(attempt, u32::MAX);
|
||||
}
|
||||
_ => panic!("wrong variant"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user